From 3409cb1c72e50bbc2bd2eced7ba98aabc62a1367 Mon Sep 17 00:00:00 2001 From: dkaraush Date: Wed, 14 Aug 2024 16:33:13 +0400 Subject: [PATCH] update to 11.0.0 (5143) --- TMessagesProj/build.gradle | 7 +- TMessagesProj/jni/CMakeLists.txt | 4 +- .../jni/ffmpeg/arm64-v8a/libavcodec.a | Bin 2806500 -> 3071878 bytes .../jni/ffmpeg/arm64-v8a/libavformat.a | Bin 817174 -> 837068 bytes .../jni/ffmpeg/arm64-v8a/libavresample.a | Bin 110026 -> 110090 bytes .../jni/ffmpeg/arm64-v8a/libavutil.a | Bin 840848 -> 840912 bytes .../jni/ffmpeg/arm64-v8a/libswresample.a | Bin 119884 -> 119948 bytes .../jni/ffmpeg/arm64-v8a/libswscale.a | Bin 559938 -> 560002 bytes TMessagesProj/jni/ffmpeg/arm64-v8a/libvpx.a | Bin 1855866 -> 1855882 bytes .../jni/ffmpeg/armeabi-v7a/libavcodec.a | Bin 2900402 -> 3162372 bytes .../jni/ffmpeg/armeabi-v7a/libavformat.a | Bin 689162 -> 703324 bytes .../jni/ffmpeg/armeabi-v7a/libavresample.a | Bin 96142 -> 96206 bytes .../jni/ffmpeg/armeabi-v7a/libavutil.a | Bin 1051486 -> 1051550 bytes .../jni/ffmpeg/armeabi-v7a/libswresample.a | Bin 115032 -> 115096 bytes .../jni/ffmpeg/armeabi-v7a/libswscale.a | Bin 470464 -> 470528 bytes TMessagesProj/jni/ffmpeg/armeabi-v7a/libvpx.a | Bin 1620098 -> 1620118 bytes TMessagesProj/jni/ffmpeg/x86/libavcodec.a | Bin 2937746 -> 3213084 bytes TMessagesProj/jni/ffmpeg/x86/libavformat.a | Bin 820958 -> 838228 bytes TMessagesProj/jni/ffmpeg/x86/libavresample.a | Bin 114060 -> 114124 bytes TMessagesProj/jni/ffmpeg/x86/libavutil.a | Bin 974142 -> 974206 bytes TMessagesProj/jni/ffmpeg/x86/libswresample.a | Bin 122360 -> 122424 bytes TMessagesProj/jni/ffmpeg/x86/libswscale.a | Bin 579204 -> 579268 bytes TMessagesProj/jni/ffmpeg/x86/libvpx.a | Bin 2205044 -> 2205064 bytes TMessagesProj/jni/ffmpeg/x86_64/libavcodec.a | Bin 3017548 -> 3307756 bytes TMessagesProj/jni/ffmpeg/x86_64/libavformat.a | Bin 899630 -> 921196 bytes .../jni/ffmpeg/x86_64/libavresample.a | Bin 121318 -> 121382 bytes TMessagesProj/jni/ffmpeg/x86_64/libavutil.a | Bin 1005488 -> 1005552 bytes .../jni/ffmpeg/x86_64/libswresample.a | Bin 131512 -> 131576 bytes TMessagesProj/jni/ffmpeg/x86_64/libswscale.a | Bin 599710 -> 599774 bytes TMessagesProj/jni/ffmpeg/x86_64/libvpx.a | Bin 2580242 -> 2580258 bytes TMessagesProj/jni/tgnet/ApiScheme.cpp | 6 + TMessagesProj/jni/tgnet/ApiScheme.h | 3 +- TMessagesProj/src/main/AndroidManifest.xml | 11 +- TMessagesProj/src/main/assets/currencies.json | 2 +- .../src/main/assets/darkblue.attheme | 3 + TMessagesProj/src/main/assets/fonts/num.otf | Bin 4352 -> 4680 bytes TMessagesProj/src/main/assets/night.attheme | 3 + .../src/main/assets/shaders/fragment4.glsl | 3 +- .../telegram/messenger/AndroidUtilities.java | 157 +- .../telegram/messenger/ApplicationLoader.java | 1 - .../telegram/messenger/BillingController.java | 171 +- .../org/telegram/messenger/ChatObject.java | 5 +- .../telegram/messenger/CodeHighlighting.java | 4 +- .../messenger/DownloadController.java | 7 +- .../java/org/telegram/messenger/Emoji.java | 2 +- .../org/telegram/messenger/FileLoader.java | 2 +- .../telegram/messenger/FileRefController.java | 66 +- .../org/telegram/messenger/ImageLoader.java | 7 +- .../org/telegram/messenger/ImageReceiver.java | 2 +- .../org/telegram/messenger/LinkifyPort.java | 8 +- .../telegram/messenger/LocaleController.java | 13 +- .../telegram/messenger/MediaController.java | 30 + .../messenger/MediaDataController.java | 168 +- .../messenger/MessageLoaderLogger.java | 54 - .../org/telegram/messenger/MessageObject.java | 340 +- .../messenger/MessagePreviewParams.java | 2 +- .../messenger/MessagesController.java | 609 +- .../telegram/messenger/MessagesStorage.java | 37 +- .../messenger/NotificationCenter.java | 7 + .../messenger/SendMessagesHelper.java | 75 +- .../org/telegram/messenger/SharedConfig.java | 35 +- .../java/org/telegram/messenger/Timer.java | 104 + .../org/telegram/messenger/UserConfig.java | 4 + .../org/telegram/messenger/UserObject.java | 2 +- .../org/telegram/messenger/Utilities.java | 9 + .../telegram/messenger/VideoEditedInfo.java | 16 + .../telegram/messenger/browser/Browser.java | 387 +- .../messenger/camera/Camera2Session.java | 13 + .../messenger/camera/CameraController.java | 16 + .../messenger/camera/CameraSession.java | 28 +- .../messenger/ringtone/RingtoneUploader.java | 2 +- .../messenger/utils/BillingUtilities.java | 181 +- .../messenger/video/TextureRenderer.java | 11 +- .../telegram/tgnet/ConnectionsManager.java | 3 +- .../main/java/org/telegram/tgnet/TLRPC.java | 3011 +++++--- .../org/telegram/tgnet/tl/TL_account.java | 78 + .../java/org/telegram/tgnet/tl/TL_bots.java | 937 +++ .../org/telegram/tgnet/tl/TL_stories.java | 87 +- .../ui/ActionBar/ActionBarLayout.java | 125 +- .../ui/ActionBar/ActionBarMenuSubItem.java | 6 +- .../telegram/ui/ActionBar/AlertDialog.java | 488 +- .../telegram/ui/ActionBar/BackDrawable.java | 4 + .../telegram/ui/ActionBar/BaseFragment.java | 104 +- .../telegram/ui/ActionBar/BottomSheet.java | 239 +- .../ui/ActionBar/BottomSheetTabDialog.java | 157 + .../ui/ActionBar/BottomSheetTabs.java | 289 +- .../ui/ActionBar/BottomSheetTabsOverlay.java | 271 +- .../ui/ActionBar/DrawerLayoutContainer.java | 3 +- .../ui/ActionBar/INavigationLayout.java | 1 + .../telegram/ui/ActionBar/SimpleTextView.java | 2 +- .../java/org/telegram/ui/ActionBar/Theme.java | 32 +- .../telegram/ui/ActionBar/ThemeColors.java | 9 + .../telegram/ui/Adapters/MentionsAdapter.java | 7 +- .../ui/Adapters/MessagesSearchAdapter.java | 4 +- .../java/org/telegram/ui/ArticleViewer.java | 6135 ++++++++++++----- .../main/java/org/telegram/ui/AvatarSpan.java | 6 + .../org/telegram/ui/Cells/BotHelpCell.java | 3 +- .../org/telegram/ui/Cells/ChatActionCell.java | 194 +- .../telegram/ui/Cells/ChatMessageCell.java | 350 +- .../org/telegram/ui/Cells/CheckBoxCell.java | 8 +- .../telegram/ui/Cells/CreationTextCell.java | 7 +- .../org/telegram/ui/Cells/DialogCell.java | 43 +- .../org/telegram/ui/Cells/EditTextCell.java | 14 + .../telegram/ui/Cells/GraySectionCell.java | 8 +- .../org/telegram/ui/Cells/GroupMedia.java | 4 + .../org/telegram/ui/Cells/HeaderCell.java | 6 +- .../telegram/ui/Cells/ProfileSearchCell.java | 13 +- .../org/telegram/ui/Cells/SessionCell.java | 4 +- .../ui/Cells/SharedPhotoVideoCell.java | 2 +- .../ui/Cells/SharedPhotoVideoCell2.java | 122 +- .../java/org/telegram/ui/Cells/TextCell.java | 7 +- .../ui/Cells/TextInfoPrivacyCell.java | 4 +- .../ui/Cells/TextSelectionHelper.java | 37 +- .../java/org/telegram/ui/Cells/UserCell.java | 58 +- .../telegram/ui/ChangeUsernameActivity.java | 5 +- .../telegram/ui/ChannelAdminLogActivity.java | 29 +- .../ui/ChannelMonetizationLayout.java | 108 +- .../java/org/telegram/ui/ChatActivity.java | 424 +- .../org/telegram/ui/ChatEditActivity.java | 85 +- .../org/telegram/ui/ChatEditTypeActivity.java | 4 +- .../telegram/ui/ChatPullingDownDrawable.java | 2 +- .../telegram/ui/ChatRightsEditActivity.java | 9 + .../org/telegram/ui/ChatUsersActivity.java | 389 +- .../telegram/ui/Components/AlertsCreator.java | 32 +- .../ui/Components/AnimatedEmojiSpan.java | 28 +- .../ui/Components/AnimatedFileDrawable.java | 29 +- .../ui/Components/AnimatedTextView.java | 10 + .../ui/Components/AvatarDrawable.java | 77 +- .../BottomSheetWithRecyclerListView.java | 19 +- .../org/telegram/ui/Components/Bulletin.java | 158 +- .../ui/Components/BulletinFactory.java | 10 +- .../ui/Components/ChatActivityEnterView.java | 181 +- .../ui/Components/ChatAttachAlert.java | 44 +- .../ChatAttachAlertContactsLayout.java | 4 +- .../ChatAttachAlertDocumentLayout.java | 5 +- .../ChatAttachAlertPhotoLayout.java | 9 +- .../ui/Components/ChatAvatarContainer.java | 50 +- .../telegram/ui/Components/CheckBoxBase.java | 13 +- .../ui/Components/CombinedDrawable.java | 5 + .../ui/Components/DialogsBotsAdapter.java | 400 ++ .../ui/Components/FilterTabsView.java | 34 +- .../ui/Components/FlickerLoadingView.java | 52 +- .../ui/Components/InstantCameraView.java | 143 +- .../ui/Components/InviteLinkBottomSheet.java | 562 +- .../telegram/ui/Components/ItemOptions.java | 106 +- .../ui/Components/LineProgressView.java | 2 + .../ui/Components/LinkActionView.java | 33 +- .../org/telegram/ui/Components/LinkPath.java | 2 +- .../telegram/ui/Components/MediaActivity.java | 2 +- .../ui/Components/MessagePreviewView.java | 6 +- .../ui/Components/Paint/Views/EntityView.java | 2 + .../Components/Paint/Views/LinkPreview.java | 15 +- .../ui/Components/Paint/Views/LinkView.java | 24 +- .../Paint/Views/LocationMarker.java | 251 +- .../Components/Paint/Views/LocationView.java | 27 +- .../Paint/Views/MessageEntityView.java | 2 +- .../Components/Paint/Views/WeatherView.java | 237 + .../ui/Components/PhonebookShareAlert.java | 4 +- .../Premium/GLIcon/GLIconRenderer.java | 3 +- .../Premium/GLIcon/GLIconTextureView.java | 25 +- .../ui/Components/Premium/GLIcon/Icon3D.java | 7 +- .../Premium/LimitReachedBottomSheet.java | 2 +- .../Premium/PremiumFeatureBottomSheet.java | 3 + .../Premium/PremiumPreviewBottomSheet.java | 4 +- .../Premium/ProfilePremiumCell.java | 38 +- .../boosts/ReassignBoostBottomSheet.java | 2 +- .../Premium/boosts/SelectorBottomSheet.java | 2 +- .../boosts/UserSelectorBottomSheet.java | 108 +- .../boosts/adapters/SelectorAdapter.java | 7 +- .../cells/selector/SelectorUserCell.java | 37 +- .../ui/Components/ProfileGalleryView.java | 5 +- .../ui/Components/RLottieDrawable.java | 157 +- .../ChatCustomReactionsEditActivity.java | 163 +- .../ChatSelectionReactionMenuOverlay.java | 2 +- .../Reactions/CustomReactionEditText.java | 12 +- .../Reactions/ReactionsEffectOverlay.java | 2 +- .../Reactions/ReactionsLayoutInBubble.java | 179 +- .../Components/ReactionsContainerLayout.java | 56 +- .../ui/Components/RecyclerListView.java | 28 +- .../ui/Components/ReplyMessageLine.java | 27 +- .../telegram/ui/Components/ScrimOptions.java | 44 +- .../Components/ScrollSlidingTextTabStrip.java | 41 +- .../ui/Components/SearchViewPager.java | 103 +- ...SelectSendAsPremiumHintBulletinLayout.java | 4 +- .../ui/Components/SenderSelectPopup.java | 6 +- .../org/telegram/ui/Components/Shaker.java | 48 + .../ui/Components/SharedMediaLayout.java | 1318 ++-- .../ui/Components/SmoothScroller.java | 20 +- .../telegram/ui/Components/StarAppsSheet.java | 58 + .../telegram/ui/Components/ThanosEffect.java | 7 +- .../ui/Components/ThemeEditorView.java | 2 +- .../ui/Components/TranslateAlert2.java | 6 + .../org/telegram/ui/Components/UItem.java | 13 +- .../ui/Components/UniversalAdapter.java | 150 +- .../ui/Components/UniversalRecyclerView.java | 4 - .../ui/Components/ViewPagerFixed.java | 145 +- .../java/org/telegram/ui/DialogsActivity.java | 103 + .../org/telegram/ui/EmptyBaseFragment.java | 17 + .../org/telegram/ui/FilteredSearchView.java | 17 +- .../telegram/ui/GradientHeaderActivity.java | 4 +- .../java/org/telegram/ui/LaunchActivity.java | 341 +- .../org/telegram/ui/LinkEditActivity.java | 431 +- .../org/telegram/ui/ManageLinksActivity.java | 347 +- .../org/telegram/ui/MessageSendPreview.java | 14 +- .../ui/MultiContactsSelectorBottomSheet.java | 2 +- .../telegram/ui/NewContactBottomSheet.java | 2 +- .../ui/NotificationsSoundActivity.java | 2 +- .../org/telegram/ui/PaymentFormActivity.java | 103 +- .../java/org/telegram/ui/PhotoViewer.java | 630 +- .../telegram/ui/PremiumPreviewFragment.java | 9 +- .../telegram/ui/PrivacyControlActivity.java | 1 + .../java/org/telegram/ui/ProfileActivity.java | 454 +- .../ui/RevenueSharingAdsInfoBottomSheet.java | 14 +- .../org/telegram/ui/SecretVoicePlayer.java | 2 +- .../telegram/ui/SponsoredMessageInfoView.java | 18 +- .../telegram/ui/Stars/BotStarsActivity.java | 6 + .../telegram/ui/Stars/BotStarsController.java | 123 +- .../org/telegram/ui/Stars/ISuperRipple.java | 17 + .../ui/Stars/StarReactionsOverlay.java | 384 ++ .../telegram/ui/Stars/StarsController.java | 1024 ++- .../telegram/ui/Stars/StarsIntroActivity.java | 1454 +++- .../ui/Stars/StarsReactionsSheet.java | 1400 ++++ .../org/telegram/ui/Stars/SuperRipple.java | 169 + .../ui/Stars/SuperRippleFallback.java | 146 + .../org/telegram/ui/StatisticActivity.java | 60 +- .../telegram/ui/Stories/PeerStoriesView.java | 257 +- .../ui/Stories/SelfStoryViewsPage.java | 28 +- .../ui/Stories/StoriesController.java | 634 +- .../telegram/ui/Stories/StoriesStorage.java | 13 +- .../telegram/ui/Stories/StoriesViewPager.java | 24 + .../ui/Stories/StoryMediaAreasView.java | 76 + .../org/telegram/ui/Stories/StoryViewer.java | 20 +- .../Stories/StoryWidgetsImageDecorator.java | 83 +- .../bots/BotPreviewsEditContainer.java | 2001 ++++++ .../recorder/ButtonWithCounterView.java | 26 +- .../ui/Stories/recorder/DraftsController.java | 28 + .../ui/Stories/recorder/EmojiBottomSheet.java | 88 +- .../ui/Stories/recorder/FlashViews.java | 39 +- .../ui/Stories/recorder/HintView2.java | 7 +- .../ui/Stories/recorder/KeyboardNotifier.java | 11 +- .../ui/Stories/recorder/PaintView.java | 331 +- .../ui/Stories/recorder/PreviewButtons.java | 42 +- .../ui/Stories/recorder/PreviewView.java | 103 +- .../ui/Stories/recorder/StoryEntry.java | 61 +- .../ui/Stories/recorder/StoryLinkSheet.java | 31 +- .../recorder/StoryPrivacyBottomSheet.java | 270 +- .../ui/Stories/recorder/StoryRecorder.java | 612 +- .../ui/Stories/recorder/TimelineView.java | 167 +- .../telegram/ui/Stories/recorder/Weather.java | 617 ++ .../ui/TextMessageEnterTransition.java | 3 +- .../java/org/telegram/ui/ThemeActivity.java | 149 +- .../ui/TwoStepVerificationSetupActivity.java | 3 +- .../org/telegram/ui/UserInfoActivity.java | 1 + .../org/telegram/ui/UsersSelectActivity.java | 4 +- .../telegram/ui/WebAppDisclaimerAlert.java | 14 +- .../telegram/ui/WrappedResourceProvider.java | 29 +- .../org/telegram/ui/bots/BotBiometry.java | 46 +- .../telegram/ui/bots/BotCommandsMenuView.java | 5 +- .../ui/bots/BotWebViewAttachedSheet.java | 376 +- .../ui/bots/BotWebViewMenuContainer.java | 75 +- .../org/telegram/ui/bots/BotWebViewSheet.java | 151 +- .../ui/bots/ChatActivityBotWebViewButton.java | 1 + .../bots/ChatAttachAlertBotWebViewLayout.java | 93 +- .../telegram/ui/bots/WebViewRequestProps.java | 101 + .../org/telegram/ui/web/AddressBarList.java | 1156 ++++ .../telegram/ui/web/BookmarksFragment.java | 436 ++ .../ui/{bots => web}/BotWebViewContainer.java | 1823 ++++- .../org/telegram/ui/web/BrowserHistory.java | 181 + .../org/telegram/ui/web/HistoryFragment.java | 360 + .../org/telegram/ui/web/HttpGetFileTask.java | 83 + .../java/org/telegram/ui/web/HttpGetTask.java | 77 + .../org/telegram/ui/web/HttpPostTask.java | 92 + .../ui/web/RestrictedDomainsList.java | 154 + .../org/telegram/ui/web/SearchEngine.java | 124 + .../org/telegram/ui/web/WebActionBar.java | 1067 +++ .../telegram/ui/web/WebBrowserSettings.java | 691 ++ .../org/telegram/ui/web/WebMetadataCache.java | 445 ++ .../main/res/drawable-hdpi/large_income.png | Bin 0 -> 1472 bytes .../drawable-hdpi/menu_browser_arrowup.png | Bin 0 -> 417 bytes .../drawable-hdpi/menu_browser_bookmark.png | Bin 0 -> 594 bytes .../drawable-hdpi/menu_browser_bookmarks.png | Bin 0 -> 658 bytes .../drawable-hdpi/menu_browser_refresh.png | Bin 0 -> 930 bytes .../res/drawable-hdpi/menu_browser_search.png | Bin 0 -> 751 bytes .../res/drawable-hdpi/menu_clear_cache.png | Bin 0 -> 1138 bytes .../res/drawable-hdpi/menu_clear_cookies.png | Bin 0 -> 1383 bytes .../res/drawable-hdpi/menu_clear_history.png | Bin 0 -> 1259 bytes .../res/drawable-hdpi/menu_clear_recent.png | Bin 0 -> 969 bytes .../res/drawable-hdpi/menu_cover_stories.png | Bin 0 -> 1092 bytes .../res/drawable-hdpi/menu_delete_old.png | Bin 0 -> 813 bytes .../drawable-hdpi/menu_premium_effects.png | Bin 0 -> 919 bytes .../res/drawable-hdpi/menu_privacy_policy.png | Bin 0 -> 1133 bytes .../res/drawable-hdpi/menu_stars_gift.png | Bin 0 -> 1132 bytes .../main/res/drawable-mdpi/large_income.png | Bin 0 -> 978 bytes .../drawable-mdpi/menu_browser_arrowup.png | Bin 0 -> 334 bytes .../drawable-mdpi/menu_browser_bookmark.png | Bin 0 -> 440 bytes .../drawable-mdpi/menu_browser_bookmarks.png | Bin 0 -> 517 bytes .../drawable-mdpi/menu_browser_refresh.png | Bin 0 -> 639 bytes .../res/drawable-mdpi/menu_browser_search.png | Bin 0 -> 534 bytes .../res/drawable-mdpi/menu_clear_cache.png | Bin 0 -> 760 bytes .../res/drawable-mdpi/menu_clear_cookies.png | Bin 0 -> 856 bytes .../res/drawable-mdpi/menu_clear_history.png | Bin 0 -> 875 bytes .../res/drawable-mdpi/menu_clear_recent.png | Bin 0 -> 659 bytes .../res/drawable-mdpi/menu_cover_stories.png | Bin 0 -> 710 bytes .../res/drawable-mdpi/menu_delete_old.png | Bin 0 -> 580 bytes .../drawable-mdpi/menu_premium_effects.png | Bin 0 -> 591 bytes .../res/drawable-mdpi/menu_privacy_policy.png | Bin 0 -> 751 bytes .../res/drawable-mdpi/menu_stars_gift.png | Bin 0 -> 732 bytes .../main/res/drawable-xhdpi/large_income.png | Bin 0 -> 1981 bytes .../drawable-xhdpi/menu_browser_arrowup.png | Bin 0 -> 471 bytes .../drawable-xhdpi/menu_browser_bookmark.png | Bin 0 -> 753 bytes .../drawable-xhdpi/menu_browser_bookmarks.png | Bin 0 -> 885 bytes .../drawable-xhdpi/menu_browser_refresh.png | Bin 0 -> 1211 bytes .../drawable-xhdpi/menu_browser_search.png | Bin 0 -> 950 bytes .../res/drawable-xhdpi/menu_clear_cache.png | Bin 0 -> 1586 bytes .../res/drawable-xhdpi/menu_clear_cookies.png | Bin 0 -> 1877 bytes .../res/drawable-xhdpi/menu_clear_history.png | Bin 0 -> 1861 bytes .../res/drawable-xhdpi/menu_clear_recent.png | Bin 0 -> 1353 bytes .../res/drawable-xhdpi/menu_cover_stories.png | Bin 0 -> 1530 bytes .../res/drawable-xhdpi/menu_delete_old.png | Bin 0 -> 972 bytes .../drawable-xhdpi/menu_premium_effects.png | Bin 0 -> 1209 bytes .../drawable-xhdpi/menu_privacy_policy.png | Bin 0 -> 1482 bytes .../res/drawable-xhdpi/menu_stars_gift.png | Bin 0 -> 1570 bytes .../main/res/drawable-xxhdpi/large_income.png | Bin 0 -> 3059 bytes .../drawable-xxhdpi/menu_browser_arrowup.png | Bin 0 -> 595 bytes .../drawable-xxhdpi/menu_browser_bookmark.png | Bin 0 -> 1015 bytes .../menu_browser_bookmarks.png | Bin 0 -> 1122 bytes .../drawable-xxhdpi/menu_browser_refresh.png | Bin 0 -> 1817 bytes .../drawable-xxhdpi/menu_browser_search.png | Bin 0 -> 1422 bytes .../res/drawable-xxhdpi/menu_clear_cache.png | Bin 0 -> 2240 bytes .../drawable-xxhdpi/menu_clear_cookies.png | Bin 0 -> 2884 bytes .../drawable-xxhdpi/menu_clear_history.png | Bin 0 -> 2785 bytes .../res/drawable-xxhdpi/menu_clear_recent.png | Bin 0 -> 1933 bytes .../drawable-xxhdpi/menu_cover_stories.png | Bin 0 -> 2230 bytes .../res/drawable-xxhdpi/menu_delete_old.png | Bin 0 -> 1421 bytes .../drawable-xxhdpi/menu_premium_effects.png | Bin 0 -> 1857 bytes .../drawable-xxhdpi/menu_privacy_policy.png | Bin 0 -> 2296 bytes .../res/drawable-xxhdpi/menu_stars_gift.png | Bin 0 -> 2205 bytes .../src/main/res/drawable/star_reaction.xml | 111 + .../main/res/drawable/star_small_inner.xml | 19 - .../main/res/drawable/star_small_outline.xml | 2 - .../src/main/res/drawable/warning_sign.xml | 13 + .../main/res/raw/roundcamera_flash_off.json | 1 + .../main/res/raw/roundcamera_flash_on.json | 1 + .../src/main/res/raw/roundcamera_flip.json | 1 + .../src/main/res/raw/star_reaction.json | 1 + .../src/main/res/raw/star_reaction_click.json | 1 + .../main/res/raw/star_reaction_effect1.json | 1 + .../main/res/raw/star_reaction_effect2.json | 1 + .../main/res/raw/star_reaction_effect3.json | 1 + .../main/res/raw/star_reaction_effect4.json | 1 + .../main/res/raw/star_reaction_effect5.json | 1 + .../src/main/res/raw/stars_send.json | 1 + .../src/main/res/raw/stars_topup.json | 1 + .../src/main/res/raw/superripple_effect.agsl | 66 + .../src/main/res/raw/webview_app_ext.js | 112 + TMessagesProj/src/main/res/raw/webview_ext.js | 242 + .../src/main/res/raw/webview_share.js | 43 + TMessagesProj/src/main/res/values/ids.xml | 2 + TMessagesProj/src/main/res/values/strings.xml | 350 +- .../src/main/AndroidManifest.xml | 11 +- .../messenger/SMSJobsNotification.java | 1 + gradle.properties | 4 +- 362 files changed, 36214 insertions(+), 7347 deletions(-) delete mode 100644 TMessagesProj/src/main/java/org/telegram/messenger/MessageLoaderLogger.java create mode 100644 TMessagesProj/src/main/java/org/telegram/messenger/Timer.java create mode 100644 TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_account.java create mode 100644 TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_bots.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabDialog.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Components/DialogsBotsAdapter.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/WeatherView.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Components/Shaker.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Components/StarAppsSheet.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/EmptyBaseFragment.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Stars/ISuperRipple.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Stars/StarReactionsOverlay.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsReactionsSheet.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Stars/SuperRipple.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Stars/SuperRippleFallback.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Stories/bots/BotPreviewsEditContainer.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/Weather.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/bots/WebViewRequestProps.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/web/AddressBarList.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/web/BookmarksFragment.java rename TMessagesProj/src/main/java/org/telegram/ui/{bots => web}/BotWebViewContainer.java (53%) create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/web/BrowserHistory.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/web/HistoryFragment.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/web/HttpGetFileTask.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/web/HttpGetTask.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/web/HttpPostTask.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/web/RestrictedDomainsList.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/web/SearchEngine.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/web/WebActionBar.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/web/WebBrowserSettings.java create mode 100644 TMessagesProj/src/main/java/org/telegram/ui/web/WebMetadataCache.java create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/large_income.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/menu_browser_arrowup.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/menu_browser_bookmark.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/menu_browser_bookmarks.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/menu_browser_refresh.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/menu_browser_search.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/menu_clear_cache.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/menu_clear_cookies.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/menu_clear_history.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/menu_clear_recent.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/menu_cover_stories.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/menu_delete_old.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/menu_premium_effects.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/menu_privacy_policy.png create mode 100644 TMessagesProj/src/main/res/drawable-hdpi/menu_stars_gift.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/large_income.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/menu_browser_arrowup.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/menu_browser_bookmark.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/menu_browser_bookmarks.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/menu_browser_refresh.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/menu_browser_search.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/menu_clear_cache.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/menu_clear_cookies.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/menu_clear_history.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/menu_clear_recent.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/menu_cover_stories.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/menu_delete_old.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/menu_premium_effects.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/menu_privacy_policy.png create mode 100644 TMessagesProj/src/main/res/drawable-mdpi/menu_stars_gift.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/large_income.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_arrowup.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_bookmark.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_bookmarks.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_refresh.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_search.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_cache.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_cookies.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_history.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_recent.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/menu_cover_stories.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/menu_delete_old.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/menu_premium_effects.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/menu_privacy_policy.png create mode 100644 TMessagesProj/src/main/res/drawable-xhdpi/menu_stars_gift.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/large_income.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_arrowup.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_bookmark.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_bookmarks.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_refresh.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_search.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_cache.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_cookies.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_history.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_recent.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/menu_cover_stories.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/menu_delete_old.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/menu_premium_effects.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/menu_privacy_policy.png create mode 100644 TMessagesProj/src/main/res/drawable-xxhdpi/menu_stars_gift.png create mode 100644 TMessagesProj/src/main/res/drawable/star_reaction.xml create mode 100644 TMessagesProj/src/main/res/drawable/warning_sign.xml create mode 100644 TMessagesProj/src/main/res/raw/roundcamera_flash_off.json create mode 100644 TMessagesProj/src/main/res/raw/roundcamera_flash_on.json create mode 100644 TMessagesProj/src/main/res/raw/roundcamera_flip.json create mode 100644 TMessagesProj/src/main/res/raw/star_reaction.json create mode 100644 TMessagesProj/src/main/res/raw/star_reaction_click.json create mode 100644 TMessagesProj/src/main/res/raw/star_reaction_effect1.json create mode 100644 TMessagesProj/src/main/res/raw/star_reaction_effect2.json create mode 100644 TMessagesProj/src/main/res/raw/star_reaction_effect3.json create mode 100644 TMessagesProj/src/main/res/raw/star_reaction_effect4.json create mode 100644 TMessagesProj/src/main/res/raw/star_reaction_effect5.json create mode 100644 TMessagesProj/src/main/res/raw/stars_send.json create mode 100644 TMessagesProj/src/main/res/raw/stars_topup.json create mode 100644 TMessagesProj/src/main/res/raw/superripple_effect.agsl create mode 100644 TMessagesProj/src/main/res/raw/webview_app_ext.js create mode 100644 TMessagesProj/src/main/res/raw/webview_ext.js create mode 100644 TMessagesProj/src/main/res/raw/webview_share.js diff --git a/TMessagesProj/build.gradle b/TMessagesProj/build.gradle index d9d7d786aa4..f4d41d8cd23 100644 --- a/TMessagesProj/build.gradle +++ b/TMessagesProj/build.gradle @@ -42,10 +42,9 @@ dependencies { implementation 'com.googlecode.mp4parser:isoparser:1.0.6' implementation 'com.stripe:stripe-android:2.0.2' implementation 'com.google.mlkit:language-id:16.1.1' - implementation 'com.android.billingclient:billing:5.1.0' + implementation 'com.android.billingclient:billing:6.0.1' implementation 'com.google.code.gson:gson:2.10' implementation 'com.google.guava:guava:31.1-android' - implementation 'com.airbnb.android:lottie:6.4.0' implementation 'com.google.android.play:integrity:1.3.0' implementation 'com.google.android.gms:play-services-safetynet:18.0.1' @@ -217,7 +216,9 @@ apply plugin: 'com.google.gms.google-services' task checkVisibility { doFirst { - def isPrivateBuild = project.gradle.startParameter.taskNames.find { it.contains("HA_private") } + def isPrivateBuild = project.gradle.startParameter.taskNames.find { + it.contains("HA_private") || it.contains("Debug") || it.contains("Release") + } def isPublicAllowed = !project.hasProperty("IS_PRIVATE") || !project.property("IS_PRIVATE").toBoolean() if (!isPrivateBuild && !isPublicAllowed) { throw new GradleException("Building public version of private code!") diff --git a/TMessagesProj/jni/CMakeLists.txt b/TMessagesProj/jni/CMakeLists.txt index 5f15aa626f4..3eb875975c5 100644 --- a/TMessagesProj/jni/CMakeLists.txt +++ b/TMessagesProj/jni/CMakeLists.txt @@ -268,6 +268,7 @@ elseif(${ANDROID_ABI} STREQUAL "arm64-v8a") rlottie/src/vector/pixman/pixman-arma64-neon-asm.S) endif() + #flac add_library(flac STATIC exoplayer/libFLAC/bitmath.c @@ -447,7 +448,8 @@ add_library(${NATIVE_LIB} SHARED exoplayer/ffmpeg_jni.cc fast-edge.cpp genann.c - secureid_ocr.cpp) + secureid_ocr.cpp +) target_compile_options(${NATIVE_LIB} PUBLIC -ffast-math -Os -funroll-loops -ffast-math -fno-strict-aliasing -fno-math-errno) diff --git a/TMessagesProj/jni/ffmpeg/arm64-v8a/libavcodec.a b/TMessagesProj/jni/ffmpeg/arm64-v8a/libavcodec.a index ef59f86ab39da62ff9b74b7e04c140754c2c08c4..3e86a329dbf0c618bd84f53b65e893b1faad6957 100644 GIT binary patch delta 237715 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 z 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

-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 z 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 z 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 JU-JLi_b=}bTvz}A delta 8517 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 QDu&P4G$)XEmepAQ2RM|@3jhEB diff --git a/TMessagesProj/jni/ffmpeg/arm64-v8a/libavresample.a b/TMessagesProj/jni/ffmpeg/arm64-v8a/libavresample.a index a5d4c2b779f075c7419f88e8d441a98d8f68602a..591f2207b53095b302cfeba675716bbe0ce1effa 100644 GIT binary patch delta 176 zcmX?go2}~(Tf-K{i#bdd7L)&r>oXPDO}55oXbHO&qHC73SAPo5yBHaQQ-{3buSQB`d6 ty-5O-`S>I_zsW;%M@~LJNq(}IxCCRs^u=o#?YSD%AQG`GlP^q?0|3`2FKqw- diff --git a/TMessagesProj/jni/ffmpeg/arm64-v8a/libavutil.a b/TMessagesProj/jni/ffmpeg/arm64-v8a/libavutil.a index cf6697a677f205159d4441970cf7ee178e821394..6b3846183c365e26b8159265276885abbbc9e197 100644 GIT binary patch delta 554 zcmZ9|PbdUY7y$5@H;b9)Q)De82QG54jen~Y>t>I8aBxs;D2bFL7wv}Ltaj6C=yT!X zv$mFfB~fb-{Fwp1{V+EO&rdMT4iU}pj0NK8h+h+0wfFQKPd~!V7)H;(CAiL V$OT}=d8)un0{Y|^`zZl?p>Hytcg6q! delta 533 zcmZ9|F-Sr|7zgn8PP6Cr1%_t5D6l0ON(4zONZV?NaA;^~XpAsukZ4M=xc4Ln<58b` ziw?n?dM@ojVGa!~Su~f}R6|Ag@*H{}eB5zA{vUVOs76cGsQKg_4@gktZR~g2oRZ*w z=P9Eyql8fxqi#lf81*pP%c#Prmr<^LmlVux_sm>8W^B$!$a(;qVG^{yGB81LHVX%M zlZCXkl7j}3Q>Q1yZ=_xVMkwhvUO&KEJA_4-np32|+UP9Ope#vVzR%$WgCVsdc+0^R ze6(2?oN=&@{Tk#9fnok9GU(6R>p*3E8x!i*UaD3rd)4`~Uy| diff --git a/TMessagesProj/jni/ffmpeg/arm64-v8a/libswresample.a b/TMessagesProj/jni/ffmpeg/arm64-v8a/libswresample.a index 7675775e3b91864b2fda2fcbae13ea53c4b73026..69efdf612d5deb9d13b37b901e6da127a1b24940 100644 GIT binary patch delta 1105 zcmZ8f(MwZt6!zSv+uYO{rCycTKy3D)Qz;Rw7DOh9DEMGusHn9bsx7Fkx2+yBh}_)6 zHz7!$yi>`k=~dHBGsQ&@E~K=l3B3qCSbsovuA2|reL460ec$=c`JMCoDyd%w)!w7b z!wlLy^sBRtFUm+RBdX|B)mdt5{A-z2LeX9M`5pRQtFqNxx`<96d9}Td`uZPV?&;}8 z+(#~5U;l$AuEc@dGDP3Bf>GuF*;MisFOF-7dcfkchuMs<*p8%;q* z1Mn$m0Kp&|d6PyvX+~cBVX+uU(xs8&F3-~>T$q8eGG}sFB6hhbw^Mwy#ig2P^Ik!g0 zY_jAes%@!LtDcJ*{GQr2s7}x{_#Xz!5!#?4p|ZhG`U1bP#H{?DD=hbqs8#;f^JjP)O`CL;0`jX( HTF?0p)5sO` delta 1094 zcmZ8f-%C?*6yN7Iotsk}lcaTcs@MVTP2xDfD0wq5nX3uDd?mdtc7|d_SLazUTWnXE<*9I$;_; zC`lNwmXJ&q=d*gq^+4k-W7CDEW+_+V5jOA0PjBPTIeH$!BdQt0eK|UYyjj>TlP>;i z7_%DX;kT$O7pu&M!*3JCc!Fa!|5j0M93I$de;hR&%oFg4PE~9bv|=Z@i8kGB{@lHUDY%>gF)H#E&kguR`Gq|QiM*`5sohHX zo{Sq1L#i7E-8@6I{+?Zr5mH<&Mq&ycS3wm!bU3=B0fF zdC9zV=t27uqagJzp-YTeioNLv5~Cd!I|?e@p_^C1B47D{Qi#6tV*a#I`$ix2Ec3jB zD!r|vgOpo_$B|cQYpFInUrv@ZPP=wh{<@AoI`1G`n%^8s!^fMPOrwkZX_S$D1p#GE zSNNg4rYpQmAwq^xh{Oz9Uu9Sn%&=1l8pyyy-FzVCP1-K@tVO&*E>5NG4BWit<}91o zM(tT%oo-4V2HBRwU2yS%k4%Q-oDvknKjVOJGOywV?^k3M=Y@QW^dQF|9LIN7x1a9%XTjB+CCoo%ONhIyrhCwoid^yHK~RKbMWsCyMHXx%C~71~ zI56OEsY4#3Jamu{M!ICShcP<{m2D<8{sU9Vg&;Z<_SX50IIo4r8$O@+`+avF^WNNe z@gNpY4O;Vd-44l;`8(mf9 z@f_^i-1$@;EHwN4Y@Al1-0dMB;=Cst|0I2Ye1!9XY`ioN5wCKd#mAUGjMq3HR2&QNJY9^^ru%Zt`B7Z>2z#PNdWF*(e)z=x zz0;vr`CR5|rvv+zSb9DA5zg1++a>Ud5z_BD9Z?*g;i@1`lGpOg?I&?G4h?Q!hK`4i zo3$?kcjItbl*rF;UQ(LAz)3+&kgv=)*C&*rWoWet5`OQwjWU`!0tR?HNeSBG&y z18?I1=?zXBe3!U!3M5*e;MPlcag}Y&WTu{SqQsoWUY+Sim2??tqidXafGacB*Kjx3Vu<|2Df7F8aDAO^Y?QR;v{^@S zbR+o*(ns*3)T}j>H=#kSH+JHTS=ZywP1x%nCV4`r{b eS{T9J9jLQguIaGdCi`3kIQADnS>1uoC;tF}MEw>3 delta 1648 zcmZXUPe>F|9LHx?*WdohRdBVPNo>@zJuIz}CL$Ah`y~Mvx0#f;^r{;R`g7Mn_X=&+Ztx6Nld1-}GV4 z^l**VXRFv+6M&V&d3k@SSE~d4Gq#5_Hj!0+EMQg0%Fe1tpRqxrso=z^kh&)a#iV|> z8P2rhhheyn^9V)Qg>YkZ9iiBkajLNfubz7X=gWIaUBcgATZu82iGt9`E*0WYj{Atm ziI>xSv(GJ#n|-=DPJQ$jFTv@Mk{%;nk&Myon$$l{!=7DUA>X1{{fY;F&BAdxOFqW= ztOuLsn9q^F!}**C6U<8vy1OCHJ1{*5ga6|1RsR>?{dQlx#(5S$nfGS=EazE#VR~PD zhVu@+H4URqDM}B$zRa2*MfXS8ky4~Tb2^1(OYH6!%++4&>ID~0F0pjMZSW-L1uR&G zpcEqgj?*E%bs4%uDNa69VQnAB^a_OKUDAnzR=w-Sz$#pnA_ojU!TE?junLDoNh9Cj zv#!_lH*3&t7bAEm17S8?&%mJMr@cn5Lf7Gg@nBK_$1?eq6tF!79E`EcsBv5$Zm{kjS z@;mJG_~`g4h80B7_z3xlhd5qOJi_q^@i@n0#CthTAFCc=gcH5AK;w9l_$Wp7oZhF4^ZC?=;#yQiI+`u?5GrpxHHb(|}j(YQ47#=YIp})!T6G@gIii B^0NQ{ diff --git a/TMessagesProj/jni/ffmpeg/arm64-v8a/libvpx.a b/TMessagesProj/jni/ffmpeg/arm64-v8a/libvpx.a index 32f07ddd9c06f0ff4dbb611131728159cbddafb5..0d8886b8b6285e67f49552c07e09ddf4e400b8e2 100644 GIT binary patch delta 4180 zcmZWse^3Ashg z|Mu~Izt8vc-rYH|=kS|*5@D^lxOnNZqQ#G#ng5ek>x1fo9yRbsd|_9-zqn=hSEQEfQa7G#UAt5JCC zVd-7eWjtH%Gb(ix+1SDi9V%ByeHrK=@h684MdebrV##FSyqK@e z8HAhjZ8Le68SvgcOWG!~+WVL-mt-Z(IxB2-^DHyw+aC%+`EFZsxh3mqvkiUU`ZDuQ zjo7|DfTyADn(Z)gE=t+_xy_EH0EgJR7toU!#o!*fosJ^c8-k@y`!S|iGf-%tjzJOjHN z^tTij(aURb1Yzr!iapf_2jMnhA zqwjv}(}G4Zyu3jDJwgMD7OONX!2**dY7GIhXzYQt>K4M!f-<{iJkQwRiA}16^#f0) z74u*m$wA0@PIaRUiVmtHWb&e<{3f*-hXg#25llgV{cNjxaW1JSrs;6JSB=o-82mSS zL0w4-%)6@gVT&2>O9*C0RX+wZN5M(_7SR)pc=U#P3SBYLhZ z3$-S)B?SR5TA}@aEo-%7xbuL!PmwbCqkS5dZq@#YnTn>D?$FMYri-rR9MHf4H$-MI z(omJF9x(tF+gu|Wsu*_@tlQ-p|G6cDqES~XS}=i{)OA-aL5+c8;3!TJJ%OZ`rd$)` zRfv6f^eY$LhkO$Hxs&cDIt}AC**M>Ar`yCxzV<X=lzN&;?gBCLI?w9}ao}}Vlaj?MerShh8h5Hmu4@`R;|neK zBB`=YPaPhb&_C!Qx0y+Cy+fY&2*ou_c-E0%97H;d|I5=(K=eNfrRNjRTZbjGH$`m+ zJu&-*HArkGd0?(N2!VJz1h!E46cv5}{|m5aY!%PR@*Dy)Tx*PA-!%_h&Ff0vJM zzAkUI-!e6Mvtz(}4VMaVTNg1KGme42Y46=1T4vC{-bYRf-b@bQjXrX<0}obD;)o}+ z^%uT#?^#Yv-d(gT>({?Snb5m@DJz%QHoO_u!S{Jq6L}C~%)K|W%JF6u13NU&H5=x+ z{L_Sw1iF@F`MV#r;y^m?uU%k$8f^%}!M*-AY=fB|-}sLs*vy|9oZ9A)feR3%&-qWH zOrR_IzW)=1yjTW@I+byT z=zTG)7vvC`K@HKA{=#~ci5XprhC1e>O!#Z53e^y{=06&y5b$ET<~M}mWEA2K=NIr0 zX@+3Z`m>>Ga>jC56Mi!B6k9(IJzIha2sG!(;Rpefcy`+|!_CW3Ph2m)vM@c!glv3$ z*j0#n0$jeja0Ka8R1kkY{O|*o8gL9ZZm~WYzX)2?oI zu~*aB`TZUroY)X4lGuyRa1ncQ-091R&oci?Wp>o-4zQQUoq4vyGV2<5ma+{U4vigp pU-o_D>P)CWva_OzZ~kTb+bov8Pg-iz?QHkBb1r+ODXdDf{tMZ2)Sv(W delta 4192 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 G(SHHrg4y%{ diff --git a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavcodec.a b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavcodec.a index 5f8dd2c628968f1c1b32ee99657306f1ee8e2bf7..4d4a948567d6f496166427634d5b3b3b31272786 100644 GIT binary patch delta 249840 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%0A>QuYhNt5PT&A^^evhW(iD2_IHB9YVq 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 Ay#N3J delta 8398 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 delta 4929 zcmcJR4NO#57RS$hGs8TdA7ua)6?FLO0FHbsSgA5f6)jrw*Cb+UUx9k%(*M$3&y)XMZQU zv&_+gcOQHCA4GR0^KJ+H!1?A~Rr>=kjY2T+;caR3zUNcvb{g>$h)kcyX z3j5ujkk0L(u(yv=*p18ox15h}Am?xQld~l(prdKzG}YzQi{I3RUF7Wkl$_T-A?Ltj zC;byRJNS-Z|gCQ^k-HDwD}zAchU=Qkg4PH9ko13`dE5%0qIIz`vW?k zP5QTW4aJTwbF74W95=_T@ZJ_+j($A%c5$qoH^%+BU4XG^1KpO{Zn+lZTJMK#Jh|5S zkRfy0wWyOHxGKZswR)2s))&b?wwBGwl6&^)X>lp|(4aYT z{U(JbkU{x{vp?!8JuuK^ot-mFG+Y0iGrgcD;=n+S8_GN|Ai8#6*J$_kYWS+*i=~DE zoASAL_O3@A7o!-I|&=Urezc&3j4|Tc`6@ieYO){!DSmf35XjpSGUO&q1^$-z`sPiS07u zpf=I^$vn#(##|Z+N`}1@oEKkGnuxxN1zI3pBtop>C5+YhX2vRhkggj8(jzv5FsLtl~$s2weRwP(Y7nWj-8jO`JbN#8|WE zUza6q!eu2FB>K;3H8LYnS_bx^_FfU>Md+)&j&M2pBTX%^20YB-8_`!=b0enaGr?*r zBdpF*l|I5J1Zi}{`fEXtb^gIG%@_=eO(ePq8XKl-wDWYXxgzgd1R!gDB5p5%ik+%-p6CHR`DMilSt|w|< zo7~VOCR>@l2vKhNd>*abCev?(d8{U%$1#L4rPf=%L`Q*>=pFgQDG~L2V?|wKh3IIk z(0ohl9IYB;gY1w43hQvRI%|eHe!5S8?dP_l!X53 zVBb3l(*<)f;m0}pTY=1S8&krI;3|enJIdTft}gec7{8LwrW#H;C)IeS zEsKneu6~?wpy^bNEo_zXi;WC1UY0F37K&Wiq^Lrkg>f|oUXe)G=@@c5r6@8Mnn~kA zQ~U|;n30l^)(x&@@%O=A#(x9%GX4W7_7g$r>x(0-c81Dkt%Ce;>KL7T6Q>XoKx3RQC;H!*}f(IG5frl8kgBxV`Qv5>J zvuWRhdzi6$37ld40r;3JRP7-63gb_}wTy?sJ&eBq7c$20Tkb42;$20Np-IE=AZE(5 z#m1V1F6K^wJ1HuZmJS|{l#7-bkGobge>wbXVth@N4rUc3F1 z1otd$kDBF0&3B9>;)JP@T2y7l~rM+y;j@)A7n-<7Cu- E0X!1&L;wH) diff --git a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavresample.a b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavresample.a index 677df6492592188c40fada8034896946ba3b031e..a4816891dde157c42cc440f94f1a8dca18b61202 100644 GIT binary patch delta 156 zcmeBs&wB1XYr_`C1y0On1}2l&E2}fQY(MS9I7gl(!^q5ZdT0{k1kU9Al++^I#Kh$3 zHHX!5>Jn=-7#I{-8Q_2s$^roC0VQbw diff --git a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavutil.a b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavutil.a index f7a03fba42f72cb3285361f4b1789b7a3244b097..5dde31d83b601f4a13f601138bccec5bba54743b 100644 GIT binary patch delta 397 zcmcaN&0*ejhYg=Nl}@oS@PqLAR}lPq9|J!sZWiHc7vW+AVkRJF24WTv1fWi}y_)$Q9$M*Y& z`R!R4Tc*pO;9tx%hjY4vBcl>i1@H6&)=Xm4{bsNTFwNtgo*>C2HhI-oFk8TeNsaOB a^z}1X)EOP7x1Z!!XHpQ_zTqVQI!6FRU0gl@ delta 374 zcmbO?-QnIehYg=Nl};XG;0NLJt04Gw9RoiqZWiHc7vW+AVkRJF24WT;r#JK4a8H-r&tErP?f^gA^lkh3 z)3zHP;NQ!{xM2GGL;U(qXE+$3fQ>-|$ohc9*9G#gAn}cW{5wc|b0Gf-$Ml55{CE{pg>nnyJDGLD#2O#mIfP9bb@<;gXSr}cW$DiO|%oM{p z-NBJjiOGU@`T=VuvFUy@SOl2jc&8^wGKo!I^%cw(uwhbT?47=T28%i)!}Q}P`PG>o M2yXvyl7F2e0M~L=X#fBK diff --git a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libswresample.a b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libswresample.a index 90e94947f1c6977c5743f970a4003c0f5b8f8b32..fb86241f98122e15ea36c9a1989508d94c16609e 100644 GIT binary patch delta 818 zcmYk#Pe@d85C`y?&Bgb6yVkbBo?>DBdk8Jf(oit);K9sDVhaTq*AU!ji-ZR$i*67I zne+~`!usc+AQ*zw`c9q_q*DqCN_r3kPn`?srNf(Zvcn67> z2c7*V!E}h-5c8*~=U%PTUR=R%-Hm5lQD4wkeYaK)Kl8ZR^D5r^rZE=lk$#75E8hEZ zz&;Dy9f!Xf9-k>=S*}bqm~>tS_2bo~oP?W|2jCXvcW|rnFx;;E0q#)#2uGD2qHENt zf(a~i%fm?yr)(9^A)Z%WfVY*G;DXC&`7+4GyrsMX_bGpeXO(}z>&icgQq*7}&6h!2 zm~rJ_@T&4Ye4u;?m-x`~WzcWTI^{obT=^KDRX(8_98`gqaloIyhGvijw<-tVPMMtI zsz6f3HxS#hH^q-`e^GH8;`hoO@PYDkcvHHjxhm39bn)p6#MhM*a9xosPIDzkWe@9Y zi+=_qD~%X|ziN3D%d76t46g;v#ABkQm&ord1;di~#VOe#h2roo;z3M wevTu&E?qe;=OcM-a7eN_zUnz@a>gQM-qHs|X=lSK=6U&dx|4BBm$}CJ51N&I9{>OV delta 796 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 Ac>n+a delta 4035 zcmZ8keQ;C77Uw26&CSitM@xI}MiGNZ_^Qwf6{IS)0^=wjQTbHVQj7YqLQ#u@4{byl ziq1%|*d3vc(c<_~oCaHaP(cb*fuTUPRqKQD`Vhv-h=%v7sGz>h-kCiM`EO6oIr}@m zbN07;YtNRhK3f{UOv}$NxNdy@xCz^?T2dz#G?65verug3EH$ZfR@1>Pi@j)x^;u1` zlD`%J_xPh2))eb|I3WISN}bz} zNIq;;x>WHWjc(8gG`p1fE@6A6Rk2{SS1E8`Y^usqPN5fN&_b|=C|4r5G!oc5Sa}Pf zK*h+5_Ny4`Cr~ySk-ITvBaY<5;{aGtzbxKV~81kZLl3#HnV`9?84?oxtuX`@4f!QIZ! zrGKNnY&_H+XFu9nPB?$WG3Hx)e{%jHal+}$?ss+!$E}m^Wz3_yI-OpaIY=FY*=k~a zCTt3;V}=S}=(t6lI0l!D;vIv^}85JxU!@x`l2f(!Dfd*=A_%T^|K=1y5PZ=c#(yaT%*dtgFVKaPHhHtV2ic&> z06U>Kyy1R$pvXj1ix|qbX7@tmo0c5VieX8c`!J>hR&We8F73h&d$+qSB2uw~%`*M% zF2g~9JWVUZ!nh7Yv!NBC3omwHjp3D4V$<}*cQyityyv|WkxHmYcsHUF z^9KrCeZ>2GsmKEC{s?13IGmraGj?NVDI0GlfHxWw9>*v)f>Dg36{CX$Vl74rnYL9h zzT4=>3e3Sz*OsZu9x2>No*YTYMCcKx=WlI}UKvG<(z&5+PBLEVm`1nk;dCDp^_))?h4LKlAe9=Xx~hD2=onF+bK`hUZ{ zDObR$clsp-Y?aWD7k9}86e#@T|5vAI<+2aTO z*Q0E3M%sJ)@8F)Sj|4V;?;nI6u=VrEul|2X`pI4dU3fq!YhefqNMIKBk>jd=Ag~hA z+nEX<2`s+kjDET%um@G1VX)x!y1;>#1bSf88eJlml*v>G{_{$(9?wx)aOT2^`rymb zhWx2m(-2&MPened`hnoI{g{ru4MMPdL*~CFiQ%EkKF!>Xp|Je4=*wD*CSYF`v!&ZMtzT<9hi5_O@PV(QKytV*j2}3+Tfj}{Z}DYs zmvXTeRX=u&6WAHa{&t;+vGu<_nH?*>#8&>l?5igW8^05h*XATw2op!}%)2?8Bo$>~ zYwwZn93M^yZ~ysJ&VorIQJOviPmDHyl#U#yx#~8v5+%^Sb+R8a7vhxLvGHd2y?|P^5=oyVYDPmYn(% zrDQd#DmSfuibTS~3)ro)5Dx<5foaV`_#StJ-UMWXqufQ?JxV0wR@=>3q+jKzb<(^= udc-kZrO~ralisZ>LAI!gH%1&!xN4{A5m&W3U_g={b!$VFiL`1vvHlOA#h8=; diff --git a/TMessagesProj/jni/ffmpeg/x86/libavcodec.a b/TMessagesProj/jni/ffmpeg/x86/libavcodec.a index 4eddf5040caf0bbc69b31fb74ff6a53a11f876c3..002a567a91878692cf7042807a4b716415f9cde6 100644 GIT binary patch delta 258579 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

I2x|4%1;~?80yT{v^Nk0nxV|V`*sx z&vFa8txDJ9Y13~tNND)2hE^&E&r9wx2G)s~xzaOYN_-PiF|m}L%9!R2(()66c{rOC zOmrO!la_yDCeIH^?xsk~o6YpHkaU~0e4UwmZ%A^uwEQVEc~MAmcZ_PycHs zSms9MDh0aZq9`*YVc0$HZngyIz8aQ5kvw0}S$)vp=R{w2DvCAp)}Qu}MI$rZgA5f% zqh1XI`8m2oH26C{(@DegkL;FxcxD{QRJcj-_qEraM9?~L9snBg<5IhBc~U~`y19o% zd#(8nevQCa?X?Cz{(#$njL33n4GJ7XJlW#?1LEB%Q^zvWsMcD`TRkmO?ndpkT_}Q$ zMVnE`oH&&bsn5P%dp+hLaPekWf9kpLB4ry5Q|Fn}^+*DIjG&wsNGp0m$s4sv?pfm5 zI}r`?^ux3E+5yy}6N`FQ9FS3)xJw8-p@cd&wm`v$dQO<6TRhw_5ifb)V<2WW=7{ztACj`U zR&am{X!$VN&4&wPE(`;t)C;^>$EB))X63FVt5mraEthJtj`}7jM%_l0>ULBL1b(yL z+c^jY2G*^?dhMtevzw=L8-NbT5OgM7KV!|*< z^0=t%X=tzto*b;X%M-w?&_7XXHJ`w6HpN?&h{s_K`>vE~nhoW!E{c3_O!%hKmjbid zLc+~!UtRBanLEoc2=^_B@STGTZ4R2u6OAQu;lAuBY3t4}8u$K;MLyXF4187O1c#8> zz>|VZ3fXZ4MA_Galq!l+xrizwgi^NdD3d@jpa?`(l0XRdVtR*b1-%o%5+;rI61bH8 zz99nfAylFeU@Fy{1%|x4oiV_WO$v4E@2NUb^3DmVy1m-OV6_%hh$aq@YQQ+7>hHiB zJc+5|b$|g~>s$&CJCa$uN(elPS>E;`p=)DL!TUfm(9Jg+o8YJ+rFV9I zCFr{ITk1w@izehp(yu4B@qt4CVVKs_m-jY;Ac;yR2w2`WA}p|y7C5*>_4ELK4S^4_ z_~*9}5am19kA+oc3+!hKpcDQb_8CFo z#6E()5W$?oA4%JGer-@`=XY4CfZ&%F`AVqxB}(cN@)EYz0#pX9fndc@NL|3N0Y-vg zEQAr2fCCUZNJRiaWFq?jk6ekiF2mcXHXr`jwW|m0Y7QdZ&=EU#k%BopTTp+Z*l?F1 zEMzFts(A)}xu?TTIjMo|$OQ%xuh%aFlVbBJNp&Waia!md;w5zwdh}FEDd1|8=PbzR`XP@XtLgc47K5W4OLA_V*MyZbKCvmGI0WAP%aDR~6+3iZ6qbzAo)xQ@c{ zO2q_|@3}&Z;ay)@J#Ff2B_`c@BUXlHZ_0?7Y{j-3uB`EmDd5JiBxYWp0liR9U4a}^ ze#SbQSZIlO-+EJDBUDZhY(aRA5$%%Nax+;HE-?Ix4^@ z>wm;oJSOTKHsK+*9Yh2W#L_t|qkt_2D{`x$Ko5(CVHUB`r#DjVW~!@!G2ua4wpE9P zVgCGDRBwrEQGWuM3?xh^+j9Jhx#e=@EVzVo6@Zp%dJNCT4o7-rSbpKzNG~S?p6DxF znn>9#XFHY|3*Mr~4m*sm)3G803+A>0Y>xT?cCjJGZ-|k()&)WPgq1g8d(OBBU#SJ= z?=D<<83f3nI?@-&o9rMgF537AUGZpK5bIxYfRbLi&{g4&-9|MD(( zgV&wLiX`t$q6vy*!{xwga7)UDrDAcVs}U_jnH)^YZ3+V~ljTwax54Zy>@$pJsAjiH z+1oqGeu0qv+)&xi6SALc$bO!X{Ujm#@ttHJ*h{KRw<0&Dz`B(+2=JY>90ksh|0GjN z03@iK0^9&>%D-x5GV$i^?R$!$-J#_~f#^J>4Vu2}p zu^vT1oA2Qe;ax71yA8+=DF&>41} z670Kw8pxf}cS~o04(-+uZe|Al+2Lvq;<}X#xSIKrX9%^dA$fjA;qYa)R!#h|R;h89 zjiJ_MJp_|@UIKCmt4f}g#IpLCg%>CFg8P{OdPy}6jF_GmbBeRMD7db{ml@$3MZylM zZoKs3e#(@cd(pXtV1ZFl*u$3HsAfh87ihA#iuJJz1n&cBaHMO4=nXh0+zf3D*pBSG z&16C=wvoleV(CiuK{0-std`PY9dr_#4pW;pE14L=%tbl=XNYN5T;^Rxq7$3!k9bj3AjlDwIiRv z)rQ%Kj8L)Z&9IL->UQ-I?Bf?byqneSs4Qpa7s9foA}q{(b=Zpx*pPqf3Cu5s0lN2I zh^4wY(2bmKa;w|m)&_8EN1tjo=p1w-=EfK?HT4V-N>?bz;8<(xb}TS96b|YywHU+L z|AA}EZaPDb4KnOY#7{B0p;Ip`or?AZEc|>r#gZo!OHQa_$rXwv$51S}zphwrHhKl~ zsmkd!iy(hjie&)FZHPTebN)KP%6+CuVx)8mUwGM_sXJTDZfs`}u`ovI0MxY#{Xe$! zZu$sf=D6#ID(y~7S1paFe_*;$ZP+}%9@93yI$D2f&@kLG3vHPm@FO`GX7#PNwX50z z&?K<;!df4L*)|P-G%^S++pD!r5%*$;PR;~wL#3F}@ef7m5vCF_?6$V@0mx)v7_n+U zyv^`jaxtDM6!M8BC!y|3W`r1!Qg&g{GQuOhnUTIQH4}48?rRoJK#11s;hsZZc7#tt z5Qq1!ck@N}1-e*}fdDq88v|h)o)g$3o{b&UR?(L12+7@i7Oel$$FQQwbu!5wIBTkc#UZ(Fl0J&n4yrdGygHkYo%U_}+fG7Y$fgYx-hfHz_EeJYkqr*T&w(+2p zz0DSe)4Vn!a)+t5F=*~$6fx(E7er7CD&4T>S_)O8CV&5ZnOM?L+Oh8y7An=4G zpds|=nE+@e3f&06!)?ykElVSZb|^Rm<+ocPirYl-a#8$Qv-la67VQrg*jJ#mvq%uo z&=X3C0Xc2UyNj|*SvE1G>~9qnrCcZlPK@D9)Fq~S2NtPW6)w6}$;Kk@Q@P1ECW?$F z>@jlCU$k2qViC5&gefet6>M>zphPo!g0YAY&kW)Wp#k%nVCWYz?sZ6j*%5032?G%2 zUIE4T`=N9Ll!XFF*6#qKn7G&grA$EKUDUs`LE!+hKmgf5{x}n=D5sL8JD|)56z6?s z1mRQwJpiDT0EYiI0OgdPL18Bf!>ZXuOxxX!<0=?Kj@)C!&ZBrJOFBQ%VcyNYF%bwf zY(0FTg%SSi$35vpm&7sIwR?Cp`f zi3}qBrO~<>xzz(X-f_LL6O3i3o!bkAmPtXJ@^KV!oxqy12=6$owTF2*qXOMfK=F=~ zoa4>}e7FD~RT}%-nMKaNpkS<;NkYaj`W8Wx0OuFdqvctXKg4pzst)f(o6HPfirlD0~&fJp1+ z%mEZ?tEBCc>wS@Cb7IkfMjga_jZ9No!?`?cHI)l9z9=$wcSa6hP0b;>9!G)*bTwsi z)uqL&d6;hM5AW(KyrG|Cd4$pdj`v~aaRh|qo&sFiSh1SG)z(d$(1x88x!dDD#6~s; zTa5PF74extM!R=)C1GLsHEc&peM=JRUA?h=#Y^jd@u8hu)tD{aQt@n zP!H|+LW~*g4S^oXEn2Zv%H0I$z&hUBD|ut-oAh-9e-~bG^|t(OSZBk)LgzUij8WQL zZ{-HJnw`cM?eJ>FPB55>`w_& z4{UG287)VY!`OXM;N2LunyK)Q4M)#;Jsh{AVcyl$SI$(vbc4ssm!W*Id4+y*Ud)$p z?`q*3_2Wx-uTV(N2uriqBRm+`Qb~kPq#AGtrx14Rg3V~@kuo7lQeXhK659z8-ptEha6c<=yC= zv7HDy#F$|sHr4Q^IE!p>G`%TmAUZ)1`o(m@=AA)lr86OW(D621uxmt*8Y7I~>I9>h zaK5smeCHrL2V_tcV7GX1yy0?T+gNk@ch2hl|X^y2~ljt7__3hQJ{z9zTr#?7`eL#&PV2z z>c;JR6?im4^ytxGS>u%;MSH|m440(kpP|d}7>l?m&$oul6f>;h26Z)^m!O^&Gps>p z3({jcTj)8Q|7Q%?;941eQeY=)=VD(#Qex6OnL@%!2#g)zXX*k)K~Nk?{uG z6j;Vw*okg{-}f9_(2h%Q;v(wxe;8IhL%#SLaYA9pE??Jvp8WU-FhgAWN&JKcbzU&0 zaiVa(qn3IccDBt|90e&U@a5T{SPOw2SL{#nM`!4 zU>Le7lWoLmoYMY00bnJbedX~uo)a{P#a=5|1v7PJI#NA5N~3YyVrY&krUS#rSroN` zaD|+>It$$=Tw9=%=o`o28iF0-(kJwd}Y2)LYtkNxLL#J7@y-h;IwPKD{%jjW)wn#C) z&Yy?oM2W1`);SU9R!>@Zes>(V$&KQIsd8rFS~SZ{Ysy40)I`GdmJ#H4HT0^(SjQs9eW6fQt6V(Fb$KJVTI~ zk*;0GCHJ#f((BqFk}!VYePtrUui#8qtF8li1ODl8kK3%SJ_UO#77+w|z)s7I#uj2@ zW3SQcYAU7(Z7rJ`aLy%0a3!4U^D%Nbu0Pt95!bBcSk-r}Teg4C^N-M%+UsHwwp!0w zGp*jn<6k@smrAbZz-d1`BdryQ(%My-;v<&c#~oA0=t|EBP}=6IPJukI|SqkLdKHqOlC_@-ZXEY zFEiEL*~lG^JA|tzt;IwXH#B0?^;*)HkM+04vha5^1f6NDafzCeJiri4KcBa+r3f2?w|cgz;rM zzDRB^wd8l~+a3+B#wPnF1qKKC783^Y%|t%u-N8I3j6Cr9LbA+emJDXmMjs!xgIVAV zYLQ9EGs*-rmwD{W46>A)9m4ga6n`UZ5?0SkX?Ze23g58_3l6xm=fY#^Yq#Q_of|yu{MIn2T2Mjj6 zL9?ZSZ;~-OckTld+2b0Mw=LN16Ud_K1lO@}96}4*uwa3DXdUQnxgsA6&vLeVw|iGP zc*Yn9<_Qe@p}y4E{LOB-tByJnOv2*HL+PrA4F~F65_XlL>v{y1KHTXrKCW9wH2opRu?yP?-8n!OyeL-5bcp6kh&lmPd_5PqO@{VkU-+OI5I@G_cwgoK9)or( zdyLyQ!glPUFL4Aud(z^8Ow}g9X=fV&inIk#V|g2j6^f9$nmNc9W=`A3s+^yXZ`}Kf zcbpQ5!)t`AhI3?$NeB`dSw$Z2xPB*RBldI)jcmuwZ2h&oFk=Z8r=Ecl zurS9^#BZl)z#%k1Ny49aX<4-)dG>N_P9wt?;w)7t^i7%Pgl)+sJXV z69FZ#ouoa8+b=MNVp9W`ljB-iR=mtU7pJxCdk7N5EqDcL>$U1p5QsFaiS8~~em0@u z?6t=mFtcrKMH~vUv@pWe5MfN82rM2Ny?%fa%VGMMO~@g78MD|4TIM9lGZlmrHYL?$ zVXbr!T4mGV4XB4;V8~eLV9}_imYsWqsqu7&^F+STR`YUq)XMcLHWa||Fs&^wnz?p? zGQM%swbC-hvqM}~INN#%?I}QJu1<&rh(a()qrup8Fm`;wI4ju{3;f13W)WTQ_%<9e zpHTX~Z=6#rUHp4MDW}3(9RbX>HwNJE?}69_z-R&R{H_2hzpJ^Kit2HLtuU8G>*w`& z@z>{}y%L9yK-WHj$uMvScZ?Q*lV^u4leLLif3;D|3Tsr%2{n57WY9wIC`GEIN;PL! zB#LoxT7=V9=Byq^1R}pyj?9v~@{EdfGm2CovvUG#P%v%yD^-xa3ccD==8ye#jEtNl zhfli@q*k>U{6*OK68w0zSSA@0Mxpg7m{<&LlT}Q*qDq30Dme=8L^-S?GL}r7z~Kbh zhs3}LR;1ADv9o}?oCN?83oIlou-Fs~>M^1hEYQs;a1jbPm79Mnx6R0XF>_z`Yq%Ks z*jh+WDvq3lfYSIvrm%7wnWrC{faO{uYygFC7%H)*VRkZ?Xxs5G*3@h`qplIE3mu?l7CLA7gwLvJ zDjJ0I7;mEr$CM0=IWC;xkOj^F(h~5Sj)<3-#zhsFjui@+29d`nq-vuPB{(=zP;?~q zS$YaK)0MuDE!e{K{}GmQu#dWF75p~Ch7 zA*_(XYy1wwrc2s342B4HB_kT~`Za|Z zEHD4fax@kl<%A#TyzSSkqP^%SVq;Y>A0Glc^{6kpy*)==jY=5f;*C<4@Q5(Wf|7^? zQC$k9MlJv$*!}oPXgR*a&~XXa5*?}%$u2BFU)!b$OB^gRbBj^r`1f6CI@teTQFUT$ zWU9IY9onQ6go{PYB&bfP?x3qOIC&GrbVG%wBP|ur8NZ@c6m;pCsFlErn6;rmLhd() z88VJnyR;b{E%u4Ei?}!Q93iej5$}+2Q)b1G<6I%#szTRZzcd+!KBYT&OTjj0G`IJ-=^G`G#-~AHx=OH%EvqEf+i^f`gtG#3R8P9`DOxmO%G! zgK@x)JxgZnh0|FbqrAWmz>LEqE?Wvb1}YjFjSYm-Qv^*!5{Jb}Y;)j6YT!_vB#up@ zG6HwSQz4nk$lg-&v7wCq27G)T;klNUrHF`_Z`5>#E+b)UysP)V3@m+_bG)nF_yRv#)d)oO^k#vznfIux>AfPB&=)^G&!-@Q>RH6Ro?YU(oDkP~ zzQPM~dH7c2`37%ZPnF2Ff!ygSU~y0&VP|8oGKn9c<3&i^ppF%=A50SpD`F{S%D#st|mL(v0)0ES@?H zpI!_OR@1YG>ZaqgI!3_@R*{G?!fK8YeB%^VWRYqnV4jyB+O2^QLolmp4eTvH|JzXQ zL$IMb)Ee;OFIoax1g;&Wz~a%~GV@K-7GQ64E!}RV9k^Y4LkyV_BvMmjTK;N+eh)bb zMa1OkO!GuOC!A;lB7wK`GoY$lp$!91qd@zbR`{sUufn~B(t{%hE`ZMFj>ccactmlv zN_2B2H%~xo+||w1+Cy4?7|+`3Cn3JjM+qnsi!-|5om2Cg<_bd_pD~bZAKJ8Xg9RW} zp#u`yGz~`B~Vm6~ggQE4b zVZ{pZHC8=v582RB$N6_%|Q2#C)5Z8p! zhoR0vUEc(oK8TW0_ZGrQ(sG20#qAS?tPKDQ0uOM;!6U}79%Bsa5&Y>Pe+H82c6J(j zxHd&}>e*Ifq=|hfAW0w&(4@66d+ql}OgItv2>}=$CSD&7W0$2|?_JH@C3pVi z77M18m>{{oy{!Ffw|Xm;&^pXqSn6W&M}0vspp>~CsBrR$MbHwC0?gLniGkf+_z+_0 zkwWz98R`{tJ5A{rTOe+j9%1|#vr*~BY}6V?bk&t&R!2!UC#BK{fFK4KU)e-X$1S=5 zl{fL;o9rB4cD|aO2VN?+VMViN5e^_QNrJ0t$|o&E&e<_#6-{>B(1b$|#mt^TG9a98 z!mVg}@-RMQcbQo>d{Q#nue!ytpb#fwfKOQTZ8WIIcPcnT&%nSH2OCVRgrUZ{#b^@=&VVqsa2TSCm_$$b2Z8pwk zhkJyST`asNvLF7U2Cdc-h1+$kDo+qiz-)}?dI);Z`->IN>;=iw6VK}QVGWIeFl++) z;cq+ut~*X$MTi&e$37u(0$g`*H1BO#R7bGTI`O!)4CRe;BqYxZV3Q#5qnH;mT}#g= zcs>pAlVCg16Kn|1gg|elH-6pQx=B%w2g!jNaTGIWkIn51=3I(6?jFR7L}4ciM!3E$ zSKAL*PsbIscx$T`UC)PjU7(<~4lVO$*Z}>NoI2_9}Q+(-(=v?CvaYH0cJctsxJhbvcR&I(=xe*YR z+->xK&?u>943<1pyHUov70Zpz#r_AJ=B2oO=xvb$Z!2<>!7oELOI2SYDAF;(7(6jm z+zTfTi^h!`^KG1LZNjIk=P)~(X4`Z;RU2k?(Pkyjj%TBHa^`o7*{i}0(y0IQn%H1d`SV7+l?V*7e z^<3LkJrjfVw4sZ;BHu~X*m#3y6-znq0C1P6qsq%VnsX%givmiN`ytUqnDa&#c?*Jd z%>T_gM2WuTECEi&4Xx8fh#Zh7V1k87no`SQO*p#_Y{x4Z_n>z0-1P8%SkcHKBpfxKC7Dp3jDGqV!%*ZR<7qY>7x`%! z)+p4KjsYd+ui^veqa(HGVrlJCPA@07N-M5nN|rUbv1Ed@_Bl>1Cm&aG5wk~1CQ>+w zjFjP8RyU+vjTFuqBPCYLvLWRnq;Q59DgCvqaHL4m+6Or!?Ap{l`It0%lUCg3I)Tx_ z2kd_=&CKEM+3CPJ2@@`ZF)>B`w5uBqcgx3FF<1*B)jUW-iG*k*6rd|o|A~hTH9iK+ zg4-Iz-z4isntpu9!%0NYKAKHM>&sD1N7Jb}NanVc=?V>2OE}NOB2CaI32jhO7#;(e zctmHkSGkac4%ciZr+2ruAS0~-A^5zMb1ayx+yI9H_c$Bv@(hL{HXNDIG5Ri)K-U^a zix^(!m0}?dIAL8LiC&ulMhJfr&#)^S#Bu(TCmzhgOWgMNt&aM(&mVE_a6YW=Dgyyb z`@wAxp}QAE3J$duo3aZk8k=$S43NzeJ)HxU$NR6rQXCe~z%f1Ib(yiA1Z@Jrj3ZA? zX2q0Oj^r9m{=ri^K2kD#3ie^+vd{tHCJtjbvK2Qdmv`2HIG=N0i}wOIUjwC zb8#Crc9=;XdYyEqJ%^o>ptmykj7xJ;7r^d3W6&mEPjFf-alC$zZL&74l-A z@=}n|iS-7r!JQH3~7pa9oDNo%viz_>YLdBddbt#QpNCfwcE z5Ne7>j}H;BgjcMK&qh_tkXXJUtQg#8l~y&NTsro*Cp7N1b%P*wGc=3W-HRErcqAq~ zgwlt6iir}IS&4HR(>culsT;c1WDxW<@Wj?x@ZLnSPWxMqi8m56Se>*sF-KaPn-iuU zh-<~>x8*$N9Ki^R8_ISgQ?{5W!jH;iC78F!Q=2O`607ig@F(tATq`asJYd~xZNb^V z;=ba*0rT-_~Vr}6nB;0Fu9IT0r#7=2ggIG-H zjqH)0++6YllmV3juSW%gM-hSW#km1TTXjX=B?FXQAmOQgxNyP6VwGR@!&eGF+$;R> zPHs4Dg>b5YZJ8F`U@9<#=&5rcOVQwkC@nHineicIIJv*7u{h{JE#ymsNM{70_%6RD>j1q$x@^XDw8@2jIWf6}c26+Zgc{Tt(L5z=}e1CF5nqsJiD6{|EY?t?{kEVdfQ=58$g3BWVV zPNC1VOq`?u(o!v?V>$iO6AZMFMT(~*Im5WRS@guxg>;#Cm5cjou%Ssv;L+wQ=OuJ# zIIRa%AvL6MP2epGswRj4X3!xq_%tWkuxMEGPLB=xD!Gc@lriN1U_@ymjqRVQ#Z3+p zxB5;p-@?V+gP^9UB%?h~44HuL9O}p8ba4$87eGy7lccphq_tykH6ZND+v3vbc*zyZ zI=KGDaMLhs&Vvn42P5WGG?DMM#2(gn#n~Hl7@lTdy+;}gwoqk5-V5x-d_#{r=Yqm zIM9+SSwp`yK#7)bNPF^r^dq*a!}%pH>A)om*_N^nfgf?YWji2mJQ*L)Jt%|@qNc}@ z5?w9D9^v)!RZ{G`Qfw3bKQl}L%t674ULG%CxP#vs9yq$8 z5FaA&4_%0EA%EwS`FX?AP0c_lx)zzx54Vf4wdNk~EJLLR7O2Z~GovDuk!V+WIqV^7 zkYe{ru^{g4Er0-m_g%9{jOp+A2x&;~JMov~ttDFk8RLe0$YAVuQtao5;vO*7V)++V zT!o`*eS7|cg4&%>o!fLqDt0P_o^SkO(0`g;^^w_-YT;&;0=1U)pdS-Stv z4C#6v!C!kbyD1wJZLUpViou(c-$hQ6o-6?{6Ze)pWY7lBvG^x$bOAj+L(PH(L6|uhMLJL1QIcq^Qm=Qb=5>fO@oQk^&bhkPb_$ zi8a}P%TW$(LEsC-#<8fGrWd>wDBw)Mb*{ZOSCcKU5?%`~n!?YA=|;2IyN0o#wj&ipe?x~VF3V1h-Kh0BpWs}a64Klt&QSv4hsNz0R2rT0v{Z~ zVtV#;x;W-UsySO*LI2-dO??`8nR}^>h@h*MQ!dyKF^{(1^byNN+}3EFRP(wB(`yf; z)3hMQpgllLk(cpLBt&a@11g$!FZ{SUpL;xLgpV)o2G!ng^XtB6n)elU+6E zBr*^2qCrO0fh}O8X-z1EJIcW@0UHm#4<4_)SKN302b_`Iaf>4F0?VFqB5>#%WCY8u zNi!=j9kP)|7Kd!nEUQqqu#}}Wi1YV)LgJRw5+OR;jqNxJLG7A?t22zMcXLR>`eG0lK z0&g<0rkv9QbqWf5d#J72D^|SXCdj~}_!^vc!m-Qn=*{sWE)#$`Pz;5CNQ&aw5M)&z z?~^CR2Bg^Cuw$?q|GCoOvEiEH^&xQJ!4A7CN1a_t=>KsDvHw| z@5078W}7|YTlIkOgt5a;h#(Y!GHeUoVAL7E54(XZ+DfY9ieutz^s3<`JY&_=YmK|k znI_GJ%DNSoh4oFFCJhk^LaL$+VmE+e_6Qg@(>;QsiBDN(9=XR&2)@;f<)ByNvGwd> z)PyFZJX|*}{%LN3Sq!Zk2xTld7uhpdwZH-OGZppYuh@MMV?`<4y6Aq>4%o)!VtwHS z-HHpbP2?&I4F@I<8-K911N5C_g#NH52Ujhyej!U}k%(U6vNYVKYuxtOcXmt;o-s%f zGmFsClYlg!G+{tfE<-~a0Z&mRs*o2%Mu{R(C=%FD?w4ZW(i`SLhy(g88~QiB0o4lo zsbG9uS%9p*Os9xKr{l^?lFLvEM#yRP>$EtCZ283e1v^XgJc_hH4zgApDe zLSx`bBmq)l#oHWO2PVSlX-c1nES7+G_sO~URh?A&D!A?^L*!Y2CuLho_Q;-|8NxV; z3CV9um95>{8O4`wuup>IzOy4$#2p|&dl+{B?+QN}O!=vA4TG%OE3fki18rq8Ef1#P zdZVaRbAJJ1$hFWgmblGY8My?HQl$pIagf!hwwDd-NfT-}3#dX{&#r^~b_#k{F2oPoZ7LJiB zNoA?>Zu-IgK#eh z6 z+7#{D$P?}3VSy7Q*G?l8w+9$Er6V{7iGLQ$z=O_QUIO>AUxa~#tCofjOHQT_Y;%1R z>1v9k)y`#c_({}%SZ_k>Wk@F^HOchW%$Xv_d<>7OqOsvw_A^d#JnEOKFmGZBr`iN%|6`bWittBp zil7mb;u^J^mZ+Oer=SuZZ@YkPS=3ka^4>mifz!?}ApBcFP%&_w?*JZo!rH?4BHjjc zh0R5F$TDMpnCOfUwiT^M2FSk)AE^iM6@LYsEPxTSf9Ri&F^r{>MmHgLBCevp1<``O z<&UGA04@Q3!O+<$M!ZXMHFH>2Mf!v09xKgc&BG)B>Jv42m1e{B@RA@vFrxy)T~*t1IrL-4O=r=8za3OM zRlWqdyR3XFKA55{I33qvt^_!Yw;Mvp z@0M;|BQoia1`Hl2tGTchKiCqx04HE10LCDE59>fg>C~Ers|+A90*D361cT%d@MI#A z4j}RPesKqoPB79hHem1san02*s2xVb`Fs>G@&F?h-v`-XJWe5N7>XgvGc!zeWe6aX zI)FSV9tRSUNdS_I@7zb-6^wMmQwbwqz_4_{xT*t2F)=Cl6(APaWdbP_K+@0aXpMMe zYbwjpD*!VaS@OcFm5mYo(JB@v2pdwT0$ZdCk=faFAfN zlB@kR*DKwDX(c1Hnv1=xR&oX#!pRm?a#0@0P`&%?ZvE#7R4X=h)TEl%i@V;62C1%} zJAd-*8HM(_cg~qS&pEYZxc$fHIK`2vKCm7*DQ(Gq)_!=7L%p6r}5 z-9Dvg?mTBn=@jRTqPg~IlV{AHibm!a71`%Zp1aU4@=Tp)U^8~=ys0Jgrxx089y!)N zwahtn?mQHlXW?sR@YP;49~G2Lom@Dim*r%VC?y~TsWQx->aY*X#LO?~bY)uMWas4D zrcA$m2#_Rc&9!+qIvT~9i$%`UO2VPe%I86MR=K9QZjj= z{jQ=?5Y|8$ojz{vywc+0q7o+%SLRJdk4&|fpi}JAib~j$_KaOr<_yx|rcqh;d8K!W zE(;d;wfurYbLUT;T~s`ky<^Y1ej@&_*qsZDrwaN_E15iJssZYM0yKWaSp5G?;jq)q zKIgCEoM(3y*(clQ%qT1b9Rw$VU?qjD0MX*dYQwh^g48&$xTK(dwI>lS`ak z<_gJ#{%hw&1KDY_i_mZLrc4I<5CLaViP_bsP|<#+eahsyK+rz9xERQyPeA`7`_$P} z=S-dJG)PF1#(#N}*&S?_{bmTr)FS)58F$Y`9fd4$7b)euvbY2SfP#0GI_(Q4&jSO2 z(b&19SUZb??Jbtfvf`;z$Z;r5S)iDT`tMrk1VaGt(#f-dlle`Qv5;w41*jtAaESfp z1v4O{Gv?kcSO&0)OG~EOON#{?GkFfwjVRoyQFCU@neX&?ge6P#<1*`TtJYY=|{8*JtlEgd^{%vk$y5GW`hCS3@* zg9ikiXI)=Le5TzgIO;y~LOdWYzAfSQA@+=^B{Qg8I?9M#^Xv=IAEZAJzI*E2sg&Kq zA=TE0Z2d=En|h7RnCPHwuggcn`sJ}JEtYh7+O%nM&hC5hjsG2x-$_xX{rSnm@}OPM z$``&`E&n)Sg>12gg>|d0c>SXDAF@BzU3uWcsJd7G_=mcbe_HDj9&20o;`NrgXD_kU z?GEc%r;L*7`hOT*cj-3+>#lgqUN`&ROY4f}T~RmYg<*AfwO&)#_*6>W+e6dp#z=px z(+V=`-YvMkZdLgWb$NG=s@s0>#=43Ja_gR6np^kH9XHlZ>6ugab75xPr2oow&tK}O zTYSqkbwkDvQR-?Pm({KN?|F5O|MsoB<;(7MkrfBmZF%j3b;nk$UH6wSs@HAnUa+q9 z*>l!?KEI;&^67V7=UDnx(vIZu$=^TySn}xeb|#YUGpuUv9qc%VmE%F4e-ruaVUpYq*Z7p06?t6Y(? z`|sDLR9!S8W$Vv3ru?*Ge98?EOiuau=UFLxi|41TT3DWP&PGqlhl}q|`Q^qHDVt(e zrHre6Bt?&UBIWUJe@$6$|69rv^VX#N`J3lca<6+iMXP=_rC|GODR*yvBjvi>wJA3y z*QWG7QJeD0rrMO^JMlYwZOXD`Z=}34^R<-evtCIVs?@)bvg(dCDJ$}xPPy!FPo!-8 z^x>4}s#c^-iLXkzw8x^9BJ1>&^qa<})Xy27vh>gPl-Zx#QvS4O+we=jUOxQUF9!_2 zcI7wM4NjBllAf%tn_aTMF8}q5*B{TmX}vV4V*Swi$JQt1zp?&55!=_VJoN4Q=WN|K z{N>4h8}40q=?44cYd1XdboK_NPsuH*C*Gcw+Wf?lRP}5%wdMGOsSgZ!B6W`TkJR+b z{+W8o(G97Yw#})F(s!ozdE@icmv7mddhCkBsV90^9m#!rIP9^#9o@(M!Ewwp&@tex z3mpf0T;>>&8}EpD@+!xPZ<8Fol4M8yl1#^obvHU@9K6Xf;DU*c+=M$Ed#)>VUHF9K z)t4T3Xx7IaPYw8!BW?eqj!!EdaeUGIuw(y+s~r0tRUULq?YGh~GEH;bA9KIs`&TO+ zH~+NMA#Gjk$O|iVT(o+YW8Z?wj-=ILz?%r_!7f)?SxPRw{ zoZVsd5nBe;|1j&i`iqp$#?~L~S5&`0yt4kSU90NDFMOu{t=iY>%U*r6zJJg6>c3jI zr~dDoeyU%!x|@G`Nu>Xqd;9srU%J5G5E1M5-#^S>l9=Lus#~W2)1#yPf0AzTe|EzZ zzvt;W{_oE(^Y^>0!tZ~h(*OAR%lxYze8B(IAFBOHPd@I?xb7+co)7-vf4=-hzw(Ex zUh}^ns7>>(@u$5z>#ejwS8q*w{P??R|NPhcX}3Q1pR~(o>`ps7>6^5S@Nd&{nh&LI zdbl-BpLil|z*%8(_E$Fftqnconiaj|n{MwdAG|b5KJm@ja?vyW^W-`@$%a_6Xf+rCde5NPLv-VaEpAM?-sdF%PsOV z3Af5$7b>^PueolOA75_#eqDI0_`nRz$O0@#00cyU1k4Ip5i4ZHM1Y78AtFWui6{{! z;%opL!UnNnY#!8ie1L8V;8b3*`@4Sb}_qJVV|?_!2^Es0-1u$K_(%ykZH&~WFj&XnTpIsCL^BxL!LNX(nlFUgaC9{%g$-HD@GBcT)%uOZ-vnzt@$^Ddqiy#dY3yKHDgyKT6q4-dY zC{7eBiWkL<;zqHf_)!cgjucCZC&iTFO0lK*Qj96i6l;n%#r*qMl}aJ^lz-}heUCmU z6ay6m6$KRr6$cdv6$upz6$=#%6%7>*6%Q2<6%iE@6%!Q{6%`d06&Dp46&V#86&n>C z72VwmG#)h{H6S%1RH9IgRFPDbRGCzrRH0O*RH;<0RIyaGRJl~WRKZlmRLNA$RMAw` zRM}MBRN++RROwXhRPj{x3UxkpKWzYPfiMa*4m1)p7Bm_(9yB5}CNwHEE;KSUHZ(dk zJ~To!Ml?z^PBc<9Ry0~PUNmAfW;ALvZZvW*c8aiiw0^XLLtzbR7HJ-7CTT8(*@XF| z8KpU;S*3ZUnWed<*`@iV8Kya=S*CfWnWnj>*{1oX8K*g?S*LlYng3~pGG5qy+JE{1 zBi3Fa90NKCbQFZc0LOt21RV)F6m%@;V9?Q^!$HS`4hS6)IwW*V=%CP1p~FJQg$@iI z89Fp{Z0O+7(YZx|$3xGD9uPetxJ1G=qKiaVi7pdeC%RB{rRY-8wW5nfSBoweT`#&| zbj9eB(KVxsMpun48(lZLaCGJ9($Te}i$_;aq0dL(k3JxM!S0_cdhhH3de-A*^5Xx- z>-}DhN_%haJpHWa5BRM^b^m`K8!fNdS)I0Rb(4Se=&ADg-uMkS%)CO+e`bb$*YSPz zNrjQ}A09}Tzx(LlX?KoXtl#^rqDQTntjjB$`jK_h<*&})>wkP$UwznX!}Zs{zE{!X z9vLA=c*mzXHm`K}@^bXg-bj-@g){VCU(VMXy(N15raz_CU3lCtO&=`(u=G+{^UsuH zCtjV_d+0U#^_AV_ukx?f`^B{Qd)6$`t5#3b`;EF!9x*ygf8eLH^z6rXY&d7;{To)z zN=?bWr$Ep7_~W#S!He~#qm%Sx#U@`ePPsyEj#Bjd8l&}Z_bK|uo%hMP_w|<5gaL9| zpI6ha+*2a|d6r#XUzVo7SDvXKzwbr=R|{wA^ZK0Qn190`^|HVWz5mEuxu0*Ye($`q z8s*OO_6cgj?m&_k5qW>EAQt-482z@*nT1 zzkT2}a^18C(!Lt|YFgo^^W+~YBlY1IU9Ugt9HIXysZ<|w@lF0?tz+c}ix$Y=|MxQe z_P8l}R$Y-k_IX8qz4uJ{xxd_}yRS{u&-V0}|FWSrMVW5DKz_kmC=ayvke9zVRDb5P z(Q>vwNsbvkOkXqLB7Oe-XQj2|JeoFb^FDv_;hFl;GKW4rafy7{&&_FHemYjp@H+H6 zhb_`S|5nil`bzahkxTSnt z_}Xjrzb+Z1$cyhfkT#>>P}-%3eExs@I9*;Wuzh|^l&K{8#qbfB02$_Lqu$>$%74 zUpzloubeki-}jIC@(t4#$fN#|tLHr*BNzO4fBmy}Jeaoq?tlB6T8m|6;PZ>+!7t6y zAFX~ctuAtgo;6~ezUKCLePpUr{!7izX`i0su74~h+_5yUM8Blx$7%1qbh$qJrkmwJ zSe`y-uuYc-DEitPC(6$}otjd$?NWKzKdzRi6yM}u_wszXcvf@Tvl9~ZuXoOnFIxFe zf4|mi<-TRJc33-m2}F41p@U8wh} zIPSRgml^Vh)1&2S?<)G>W7o(hrrn`0+%m>L;g(AOr%K}xJ$vOMzvK2v`mqCVr{)g# zr7amSR=#-WE&BAA?vf{!P1T<|XShG+Ymfh#M|H=jyCdZ#Kb)l>exp=g_*#8h%^d^v zUa^V#k^5)J2QPos|NR3?^s}N8^uO2vwo89nvvbeZw|&!Je}Cpb{Rhwa z!2jIym!(N>DDt&^_c->1_tn=vcej4yiDG%}Gq0y5{AYwdXJSuTyJc*et??fHk{=W~ zV{)#1-|kgurNI(3{efo1FC#0n|XDey85%=g1&vNQl zHQy&^_b!r?ORv#)Uwy0o-N(<>Yx3=SY1v+XMO0JT+u;l4SD%_Cd)~WHUooOke)fe( zxuSZ5Kk(grxuu|3e)gtmdT;v@x!}uz^~LWL>lglIXIkSpMZS1qygz!|TK~Cke&?U* z9`6{R?ebr^e|_5H-@NUA@2|>CdHbLKA93#i6-5&Dj}|#2K~NMKM3R7#lQ4aoU``lN z%qWTpkt_!2CgbXwUCd%yU2|G9(__wI%~{N#VnoG6y<5YmtlxhB^UnF7cV6q|*SG4{ zt*Tq8yDQ8R#o*OmFy`tgIP>zTqW|7(SaEp1;^}UQ(==})Rk{oY7(P*2`aT0%WekJA zgDm05+um}=v;DZd_xe(s*O?I2@SEazzsb;|U6wS|@|zo&YDf z9J$$YBdI}A55?kKb47Y_ONibW3@rs3BQ@%KDAesuoU}-Y1Mj?am@y#|*1Ly7yD2th z=EW-&{+LU}n$3!}_s?><2dlZW*H0=2u9*z)$g0riMavY1O@kFqUj%413*YrJ5~cjj zlcgJH1;}&jD#ddJ3cs1*Qqvo|6qd`|a(BuEDYX%R?H_}H_AmvZ#CQXDdF4RZG$9LC z<%P-*9dMIoE*>KpJ!k>lczbU8lWZ8X_ZgQm%t2axqc3N9b!l0n-XkP3dR?qDDvEOkpi$;~l8r3le?m*&o#1cmv*(!?&Ql1qmX z5a`gFv;JlzK=`9b$+B;Tbf~WYI!kVH*L$Qva<5F#e~}HTd4^Kqx|v)?VSj0NSbxy# z>?B>7p&?zLehuXulOaUh5 z#KYEsmJoqGVw(0muI=;;_^5H6i!b=VHF%u}H!AKbJf~$!W~T+v(Fk{V;gbcYzhq07S3FX*_38;am$KpBvn&B>V}qd5-bHG(PzR30B*F0gAdOi) z0d8*|1x5?v6z4)MVDJ0;ikTh8NezY$kX(}E;MIpQP!Ut5c&!Kq4}~Co2^XXy9V?i8 zupJ!ANCpj)W%7t-*6`1i2GT!ay6n7x$9S47U!ex6`=(szCyKE`w%H1x5 zWMy_tk&>VVH~ny6aGN02#_LNiMq{LQ#R7<;Eu8w3NIoOuBtcviYUR-%VlN8NMwSBO zx!z!slT-G<-CCMcIRS)fUq!#A9~44KH24hEQB0nlDxa+1lN-M_3WkkHk&@d#QS=%5 z563Gs&^{>w92Hl%tJ^qfu8;y(8#%+N)t9*aQ)N)u zJ5jQ8y3Pf?Us|?g#+}g9PX?8JINJpp_ZtJ+j-91_aeEcR^IAaKgg@oc@p`aguMK=Q z=D_J&pnUa~EU<0eUZH!dt2Ac8FsX2qlVpE62!zhcm-2S4`begIQl+VGnNn0YnbiM5 zFBoV4A@o6SL3(<9l2oL%pUeCxNRYTkF+(;SJ};gmZFRXK_cLe*sTR7!`w~G4jmv<_ zT6abIs4U66%}~i>S)jBr@Buey>UinUy+rUjE=VV{lBCp8W>U>HfWK#zDLOnIEM=tZQG6V~jq7YV zUYZ^rBL%y;NZiFxMgH4rxq(7}xpB$R~PeFQk`h%kI z;soiH`|sSnCf3koldDv)%o>Vxv!KgY0orBuQrH|a0(T>s^rDxI^x86ta~wTb(vF!V zIpt))*7*2d{R7ZC&)hx%Wh<*j%i5_c04x-kM9-=0(E3hY?cK zsvc5VXs9%3Uk@1AMgZG>{S}G?Qkzj*vq7H7o1$%tsPsixeXbmX@tbyviMh z9ijVk21>!*vfzwh;{p3y8!9ra{UwVJ5mJ|fNzm!m9{HY%o>KPlUGnw5s};3_2!thB z!m9pRlKk6VMc3E`^2oOW?AT_eplJ!xu1k}og1ASDZdVPZ>ZAwU&IJKb7H=)Ly5ay^ zXY0WFrTwM8<5Q$AOXnZ3xim%EzYbs9t_*>jw}*p}?=W6EbLA2@;YB)pj7u-8LUSeveWA$EBmGp`}~L2@L9{ z%fA0TCp#~@Ap1vlQFcjoS$0KsRd!8wU3NouQ+7*sTXsiwS9VWUF1s&#AbTi#Bzr7- zB6})(tM`p?#FXG73|yaLN4}C8tuwL;S*7fm?78fP?5wOx_EPpr_FDEv_Ez>zRxNuk z`yl%$tFe@Ql6{tak$shYlhw*@$3Uuka0+G81;0ni}crX=9#sbPbG=V;8Pxv+De> zl*not)am=42d3}W#HsX|m>8ozmNs33I)^%a!fV{p^9JcH(mSMTr1wZ4RJ<16>yej8 zuaG_8K9pcz(J6JypOm<3rcU~1aH%=}kLfrUU*X`!jK&{SGzDlIgX7Me;6O{ImV z(n3>dk>^NtsjoBlE96A^ewv3>B385C zA+cKiy>flT`x>NANS~3uAbmyphE%H}W{Hw*IUY@Lc3xY+3R3?vGdDH**_Mrr8<^Gi zWu{{$tam-a3_V7Ag7g%r0;v+|8Pap47f4k|FOgm$y+(S2^cLwI#Ts3WHxH0hEr?kI z>jblg9TMv(*u^>^W*wC^5LL|-8^mjYU`Y_nd|jPk*8Sej4K#=b8bkvP zg4Rd+hEz*&CmUL0#Z_H90c*i8m$8w7o(}dx+PeD85_OmPj|&r0|N7oqE@D%?gmf9{ z3er`iYe?6TZekt0p~42_7UFHBTj+L&HV}|uH+tAK8>s5mJ;ZXP`$(+0K0thk^azPH z-N%Tm`LcS)ns7NHtADRBXRKbnK&(P~iNvgo=2n^iqkz^zVl9@n)=x;EF@92mCjEp( z@P&11SPY+$zF-!oAcZ2~N=?Ex0O6uWf?leNEoa2zs0c16C32+CNUU@G!os7T8r1ih z=|uX3`oAF6V1%s6v+ja5dsTf9D62FYSZOpcH(IJz##$0$waD*7$M;U|`w-&7#t=46u&$YP$Nx(=jN@7} z><85SunJY(s|C6+4jBvVnXz9sXB|s}2BtWgvF_PGUr$#@TMO65;8Te{>!pp1jE&jg zsqUy*OH-*(Yr=a}`Xee;jA&WB1gunASgEwIQfXm@(!z?Rg%wE)e*bAq*F+zk|~ST*d@nLAr``4e2`44J6hq zSu_0E0`>lngJb-Ej*h5+4UY8(tpB_5>epWS`+)UdXl{YS6{~RgFu-aYdmgA)-}JD) zu_rSe)Xe@X`2XgH#?>ccG}=-O+pvB;H*fGF?$XF1oc68f@*T07SW+T%e-X+2+an2! z7TN%bI^6!mom1#G3Q37FJoCrSTMR{g>>h#ml}yWPX4|+n*L_5LD^@Mo^;+Pk|DD-v zi&bPvk33_Kl9%V~95oux6_z#8PSP^gEV;kJ*2Zuk3fkkCuuijNmZerx&3w(0ZRhQ* zOqlj1NNnNq?UGjsZjE&#Oue*@Ym_9fky)AW=ye;3Eo3ezx!1+Hsg}0Z!;*t}#tkjo z8=(i==V^~siN}KgZ|RhnUDCJFzO1c9O8)WEZ>Sw+q&2A|`K^XEu4J#Ped<1NAt|vJ zO>A6v&32|Dt^{ORK<0Wg$&1_kZPJCx*D-Pe^}*x#BV#tt72} zB?sLctxb8dfDk_Y8!59A8zUxZt5Ct>Je`0)xp%SmuXPAX=u19 z-`+Gb+_XcuX_qk5sGk2N+4X-&M*dGpL8bKnmFWK`k^;-q|9{bY3I7>=`~PXE|0VY- zNwbkygMU;o!iqf>d*h>6tn9}I>J=&0&|#*wn(;r1HQv-CjH$M5`@_l9qrJ+dy{Y{` zQ?s%4RJ)?CJ*fB;R%1WBuctV|)OMh$ebi539=#u-tbKp%T$+Bbm`8t9YUb~X&3jfl zAs1a#%|HiR+M>oK=CP($CDIpnJypjY z8fL-{)L;v7S`95;tArhh)l^-#JbjA=U zvz3_qRK_>|DZh&GEq=Nl$B~bv5jZ;uMT%XdJY?XoIX%lAT_y?A_8>l?>-43FKQDno_HvmI4QOkThg z%|-{M?au%k7>`}>_WdE{eJ9^+IgtU{h`qCycBZ>WV4pmn~>vx7C+ zWA}G?U*y?_DJCy46Gt%tRL`6(~HT|Fxvv^aVl5VFpO$BqJg{>L?t1ly> z|C2#CBVzI|-k4Y*&zeWwWkebw&m#WL+allaJB#7jhBvmgvhFe>uE=Aa>Mj8VTA_pE zcL(Iz*>^uL6B3Mk;SUFW0?4Cf)t3=rzcX$BoyG8-kstSi*C#!YUs8|ni+qBb7YH#R zgV4dNoNjmb8-&xc*8Tsu$czu$C{JDC35%RbRj9nN% z2KXHv9;tZt$AHX5{%48}$U@{*zi_IOF(Av4ulOOaPu3vMo)GFT1F`{m*LwUmGIXe^3#}43jC{*_0Zt-6yq?1I$cNSQzk>YrAG`s%h5XKX{C(s} zz3@+wcVrb*6+b4R3LS!eB*2KgLq4<~{|WgH^>~W>5_Jt{8PLI@=0rW-2zkDqygBlb z_4r1}dmvvIKUSJ%=nz#;pat@5Ag#NMNK52@))6D(iM(nIR0$Xnf8@J-7e{>|$Y=eq zfIbOBKB-;;+ar&yKpj86Ky^ijpUudG^g`aXp2B{}52&Y*9g{J>9zO#4$a)csMgHfd zPm=$|V<)7#N@iWx*Dom@YiiMBLOlTsO;hrFJ)R|O)i3<|U-&J*@ViP}%5}m(4 zTv`xaa^V-ThrjSIk^lbW!sIpCAf~=pG8+8C+x^0~LjL;$3WgU*_%8z8kgt0x!7q$h zDdT_fANLEN_X|H4`MRf;y6~mH_-{l$7M})qOszS=v5(Ykg~V-tY?slf_#vZlZ&3={ zzBoDoH(IG&Gl$^59@Sk!{Eu4{9h#atVjONgQ+bUWIu--f?Ho!NJ&x4vo}4f=B?)%} z1^EVe5tW3>Srs68T)Z$Obz&lJ&PpAf+InS0BCk#nX{ncf7Dv294 zB5v%E@7q4>$6mJ)v`&|IfXZild_3;hB5Whq5SB&NE;Y4;;6pMJ;+XSK|L=RN)FR$L zeMY8?9eu-k((1ia(0@S_&rtjZs{C`QruWJ6Cke|N)))Meb zVtj{q{ih{_j3ISi{|+AbOCstA|91lZD|FB=k+VeB*HEvJ1T3YW-v3TS@Gpt@DOXpb z|4ztH-+yWG^{SVcx^2PrlOp^~OMTCOtML9GDt<=xYvrob^3z|XY1jnTDq9Encm?8y z-*F>{j!r}dxAu-`nwjKN=jZJgL|S)=@MV9z*&m;h!QmQByaQGDb${z5yi_87DtFbr zPcXaptqT=U(ygIgBWzbph04iSrPJ4+x%kz&)G1Oa^;4QLHK%h!Rph{hUDw-fw1VO6% z09B{}l}wOIX`m`u0jjXri=pNKm9_v?sK7cI)qQ|U5^eTJA7>w7+=y|k<4GDnA)XA) zV0{H)G!%E+rjdB;J%_4#9_(;Ot9XV(RNYb1Q0#!2NK)z#-|y0KX_-IV#tn~4`@x`W zeZSOB!%~K)CjIcPA3iQ&e4T!kf)R zA~N@AMCSe(Uwl|jqVXlpK%0!545#7| z63jgsiw2P?xPs5227T}g0Yl93H#O?x#}3AasPTXruOl)`-9==U(g{F0ZFc;H`bH-h z9s1%EIwFgBBr0J7lhg=Mr=Tq&Q}7!i^IxgPGit0pvV@4J#9%NX%MqDe2UKP- z1TBQf`2DDiRkmA*td4wQJk}BKSVW{KBqrB~@k7y~YF>XBy3Z5vw>c8g1DO~^CO9z_ z`8YymB5KdaIaJ0E$3&&o`S)P>2fj+Aqx%R#To75f2*$@_vtl?BA3+(8BIGYbmZ2?( zEJJn~=sp_z14L~B113*E2W^}Qo`{GhHJpSv25T`x{2FG*5Z|5$GDQE0YX2Oy|6#Rz zx!S!#?d~?YPQE=u)YqLM>ib>oz8+Cv9^2I($}AKZhdD-MIl7XAJX(dF7{vI?m

Z3D%$-3pzW1upo*~M+GDP`cwR=0Yd$)Yn{?TKI+9N^jk;V|+3)Jqq zSgtJRLm6Vl9L+F=kiW6M7+~=nRpS$eSUl%{t8>4l#-|L?{IjMbqS>Q=uj4~zVEMCJ z*=YtM7DIoAy$MM~WI0Y{h)UCDA}+wUz1irWiLaduvAAj(qPe*_b$lU1Oz0wp=>8ay z>2aKkJX(3({5tmzSbtbXIAI~)prSDhQL)~lIsqR<7LaE=3U*WDdWI<fmLWzIuow{) z&t8H!1^ae}SbTa*5%D{hGa}PtM(Qe|H6p8o&WKE}&<Ss}3+qNLR!di@1-3H*w9Y|> zBEH`tGDUX~ncPD}rsxAAtGu;p#5Dsd-jE?C&`OQX)$VSH+S9NfspAFGR_(#QkFo%L z)X2V%GR29AEI^K$XWvDcJNt<_m8sSEm)d<hB9lL==Fh6}5<}Fl8jcaGRPLBV_G7Os zfPrS6VskY%Vu*qcYV=mSv+<kBcUAMzY8=22<>S?uu6EBxWb*8DC`<T4H7;i;V1V`P z263<2;}9YXa7E4EQR72~DECs0?B{}*LS3yoc^gE=H&>$zLzMSXBl}dr{JSDD{jrDw za~P%eNMwisCaQ6o+I=1(3$RA*zFF<gzK3dKlRAsY>ck~PRwrUmr#7~n6g9GsaoX5| zW-^>b$b3X*?bX`ES9P;h?SMaOqT(+jGKDu0nZg%{+Srt;RakPMiIzj6BNiL`q%AVU zAz7*Bwb707kqnXcsIf+kp)9d@&oag2h9faNpvDS@=<lIhhe-^fB&U<Eo5tn2_x^08 z(-5nA-dx!VndY#ibNLkxx(QFQ;pvuajd5_$T)DI)+1<&y#BRT~nXVFBpIG!qKZh1N zcvq`kQaazoLD%>tKGSKIMD=rU&{eF&&O)PPdZeC%Zp>=@imP41A24yy71v=gIF}@a zI61g|Jy$pTiqWbrGy-9S9T~w);}?~>EB1WJtYjzaHu=A}C!MeVH5dmj^k;;9mnyt2 z=9XQ>=jWFHW?gbFO;6v@tIml`KR=hBX>G9!Sr*mzYx{XsF59wRfw`+SkewLS6g1fP zizSm?$B+z=cqDdRevO?mA~U6V$@1;ZZMCoB5MI*biZgC__s}vkF}{X2#UNHFkvEsF zY-+c$oDiv=?(gZrcL015EaBT~x#{@(`UiQHyt>`oRpZ=TuQWU}&|BG8VwvsZ{h|ID zdw6OYR%q4Xn^@0qOx(c!K5sGg5dQYi!3UbZcj5K(?l%a2o5hZBJsJE-h03Ytr(VUN zz5gcDRKb65Sir*Z@{O1pJTDN>8#HfdSm(#&nwK$G{B;j>O<%1#EAW?}t0<Y_=;BeL z|6bRWGaki?bre<^p6+03)knn{j}nnVcV&HdJkQ(kyA0mzm3*nzb<)tDJGs(P5aICp z0ys2(8eBR&8(s%40H62E;9Bh(fS672PWx|ItzQOiBagy#$8+#4@*3PbQx3<K&mha` zJ%rCQBPA{!h?|s7hOgT~*0{YQ0RwzBUU!|OQG5Q7Mwc%}nrYv9Yfgz?s+p$qSaV&N zhnBuas#fvoy;>DMMEkW+*iJk1%5?1@y-WBjMK(HShX(6JwO_5XXLF^FXzZz5Iw4J0 z*<_#Y0vn=NF1FKC4*p#)=)z^a*EP2KTWdz>mzQtRkJ|QG|3X4L12dbs23t3k8}Qbi zhOZ;C4P#rLGZeSk8Eri>-Y6>SppjX7OJn=hBaHdDJ;txIj7*}c2b&17r?;Dk8hWO$ zXAdy77q*&~UeIY^KXpKZsK2%~;9KJaSi>P^_A$H6#E&NC_HRa*mq#efOJ7=BD4&hD zAnqqE?EiGIR7Ov+EN^nvl0WI$u)O2chNZthXecfUvEno4S@DgltYQn>TH8NgYORd> zV6Cj_*2sRv+D6JSoOZboBQ)kaZfnf1FtD*dG1SI>*IpZOxOtP(gQJ>|GO0;yck8BN zdO}ls??X+?#YVPdP=amwEv0R#k5#kSjM2^PH<mRMx0~CE14h`1%l6pWPcV{+R|m<I zo43et#hE>SxQD&cZKb`~_N~3rGQ2rIdv<fOqrAD8?&&~oWI2e}h0_koM4J|5aeNDL z(2f?$U9^RAZD&WNcZnnE`@oU6Y30Okp6A3ryX!>CT%ASd6ldOLzcVjsxhP+Db|Jgw zx)7^dF2vZuRa`vERe5ByD=Dsa6`usR6w9+)l8nPG`L%j(%CydI;@uf;<ncdlVsS%v z{$w9_e(eHxUU0bSF1BgvA-)>mLBf`Jh^=pXkUdRXiMRW=5*IIQMc!X)MJlXXleAu~ zl?!II=A+NHCVv@tD(AHI<jr$D`4$H}mB&ALinU%|%41`^MA>RDrQRJcWtNq<Qt0X} z8W(sg9S-1c8Nc=BD_ni}`Gb9w$LIR+*(ZF+p07RvpX%kS+#Ki2kN(4#Uva`$jQ;Ga z%y;)wwi@UscAxG?D);*-KRxpkMH_#T)!v_fndZ-5TH&vBKj*Lf@X25FbqWygcMssn zqyTZ|ssQDTGXY|4b%1!+Hc)IG8Ax7@2_*Kj1IeLXf#m9~Kr)B~@iC4;;)(V_;+8Q& zkZAgQ5P7;eNEvb=h?u<zA|uU%`AF|zvLPy1TsA&f=`bUh58W6nzC9VN?D8~N?5W*` zH)`HSnJsT4?(Bz@-iAz_-9{O@sSUYxqK$Iwqc-Ae+J+z1G(>qZAVjq386xV93n9ac zLX_2|A^ga_Axim$5OKug5anIrLkK_AI8^zURjAmvNvQIIEL2(L6spYh2o-~TLzVA> zL&<DDlr(D}Dz5Ds%0ur^v7&z{Sw1wB3>g)wbQ&KjzD*BR9-9)XT$vZDEcz`}nLay| zj9U;&5|@XHnSX}z(>H~Rf9(t<7xsrL>7h_Q_*5vL^-rjH`g*7+IF^U<MNcuJm!V|L zhfwnDTc|QkN6s6X$oUNo<)p8zoR~Pu`LphFWr?p`nGhl;T_fbmpw4ooXD_+vJwUFM z$H|qw#>z=rs+=sJEa$J}$wlkwax!e5T-?0`@7KtQuu0Cp`CG0Wr;v-)$K-s$dAU+{ zT`rKr<#J_WrJQf^R<11nEGO%<I6l*u6MI;3N*_B;+0=z2#$FuJ4n_*+c;n8TXxp1p z`VQihJ>oereLSaJp2>+9ayU_c8b{jC<H+=-oOtz5jyP}S#7TQOa`_O)`<~&%1y?wt zb&nHMDme1w4aX1qB5>k$ZQx@}L3z6okoe}nzjFgV-w*i49PnG(1L@QQ_=^5OrVR() zI}ymO3BVWS0121|;?sG+FIfg+?{y%WZ3pG~{Xpg%1!bS}plo&n_$Lp5-}(ah$+(iQ z(0~`CEqUV7j3=L+dGVYVFRl{W@MK~nPr7&GiDL{;J`Lr`*|EG>n$C-90#7<l<%!)~ zUVOWRC&&Ke$%3uCIC>v1wmHHRqjNmDb&V$*?(^cr=R9fmo)^t1FW%4(BP%Sz$SB(| zv6XX}_}Vi}+!h=rCPsvbExU%1`+dSlNo<(dX-pUqzNChcby;B~swj+9&k7^+7KIV7 z)nVd^O<`ov?lAEMc9auNg^@3p!o-Pp!o;^v!btq<F!A!IFe29qC(Dh)#ZOk@q^m5P zEOZSQ?|O%mW+CAuIx?ITbPXq)`h<&ThJ=d`M}?EO$>HSFq;Rn&FI;>zJ)GQ~A1;W8 zmW7K;*M^hvTf<4v-f&WLFkIYnDqI|NDV%8B4kwErg^O-g;o{c!;bN=WaB+ohglOC# zLLAp9LOddiAm*+Sq_<auI3p+mN8Jeg>4^yZU=%@Q{USv7p%KJ$bOdRc93eKD7$Iuq zM36_t5#+$E2r_L!gxI50h#(Etp`tAjV)E_?v5^!(b{~r%J<dglkFP|K<U0}Kt49&y zfEN+szIPF#?Ux8LPcu?%Z5SzDFpnfbHj$#EeWV!U94W4Kj}!}AMUpkHk)owzBspyx zNi-Tp5(|_~p%LQf>ImXf89^xOynQi(Y&;%8Itm9+;noN-YjuS9tt3L!n-(E1&WaE( zjgJt|V(QoRiXiE2BgD|a2%^(6f?RGAA+9uzAhBo(@;Y2hy&q1NT|{dg4kvSVgp2m8 z!pYa!;lxG^7srhY7eDk1CuMEJ#ZzA4q-E1^QlX8-^D<1lb2Us1mBK`!-P$lwcV-wV z&Ilv_3<@KUBEv+<J&X*;3UsE1C(rKkWE)nthU<BvKa&^pQh70}FE2iC!;1%-@%&o~ z%B1_C^f?4#z)Ik!<bYB$7L<48Aci#seozg^$6ew0l<ge9WF|+d6F6l~CysCK%83hg zI6>V0Ku*FWIUlfCPNrob_K@>I?s9Rlwwxb(CzR~`JCvXKd#GqX0(-L1P_f!FR7`&! zqI5YNB04V)AxWtr;?d3_{IwP#e4j6Ec-xC@#K3iJ_ybvOM5$*R67SMRS^g!MA9^8J zX}TtuJe(NJOWlH%g)M?bhZ-SBIrU7Ca(8JEzcvjAh7Li>f0_pIO<x5nLk|Ti<?{oT zPNM?FuWbUwlO}=uyz&5Lvz-B?d0~L~sBZwD(lS82^x2<Sobgu%EcNF*C;E#q;4h9e z^A{)F_v3T7`=QDFl<~d&cpE1_G3C9lvhz`2e!)CnF)z+n>?rv75+@B`G4cWqi_3kK zr^ov!NAW(&@#Z))_yB)gc8524nCs0y=;5twY40swsPZBo_j!@CMP8(^x0l$bxtDUp zOHcmPeot}XR8QrTzMlNw&Yt3@_pQnLqpg)&=C>9Pj%dwK_HWH+YPS|sFSg<nmbVfo zjBTa-GoTeOwA5%N_BriAew*(hHjVY*1Kd57_dd8Q?GC$>_cPu3=t1tp&D~ub{K-wc zbKFgw`G*@nXoMT_^m9{IXu6S+|Fq-_m$wvKjBClev}sB5bzAc87hQR)rLJPnk*=bK zw=03qE~4jQ7p4Am7o|?Li!#>Eg><fP7Av+p3(A4n&iu(v&U~B3&f@wfPD-m?PU6@? zCw^>SC$i7gNl8CBD({_g<lirH6mO1p6kP%x@kP;5DV=GdoHD-!?>(pm>FL;lh|e9A z19v#^6Q?-v&DuNgqbwcx-22VNLED-uvvQl0cD<XErq0bt;YWMIov_Dm?Dk|vykJk> z`P!2-VqZS|jLiO@5}AFA;j;3Mo-%&jXFJjVxSe=?o*f>?X&1Y~$F6jMrX7j6*eup` zWix(aa<kZUz8P=dpqX<19b58#gDpRLk}cn&qpjGdv8}RkMblW=)71X=;->tun5O(8 z*QVvkHBDkq9&bXVKbpjj9nmCKOYm!AU#8hadF&q>-gAYGSe<0UTZh?@S>`sS(GMDz z#_VWpKP|s8UydL4ySX$jKUvdA>~yLTe{ON3*#6@hk!r3{`Es*Hu|pnM^FBMR#m0r! z_7*YLN_#hJ`*vTg?DNlAmEJD3Quau-5+Ap<DqYyvN}2e)VQHMAA(=G0VY#qqc*EGF zz=p~T1`X}^-?A)^*<=~3Ay|rMqAZnr94uo`Ra=y6AGatSwa`NOeym0LCeDJ)HMfZU z^O1RM#cp%H-!${mn!)Den2&ksL0xm@i<@So;})~hYk6j5NsJj;)XJ><A5Al5`1J<j z-AxUm7UeY{6Z$nM&+u%Jv_hwWp!{^p)JxcIdckX|X_85-X_Qr<X;ep3)2I!PP3+}m zCT6wsOt!vAFtOKcYw|j%nTglz_r_kv=Zwv^{Anys7L3i3VvJ*_dK;5NhQ=2fKQb!) zz09cGvBXIEB*`f0Mkk}!nodSuqp4w(#Z5ym?Y|8#M9wnwx;fVHbybKVuV^e7dOdz` z@Ot1SgV(Zc2D4me8rUa~Ga%KS4a5y@2K*cY1N%QK^rI?{>(A=9R=@mnq5kVL@%l*@ z+Uc9=y67h*>gk^_tk8?SeL|0a^p{?T7Sr@DEKJaA+@YIZRBJE2#$7G+yw+6fW(Ho< zE!N(rTWq{kcT{&#xBN_;u4_Si-O^0KUAJOw1KmBA)jB~3uIsq2DAS2Kv{ENlR;*LJ zXPi##j9xlPD}r?zzm@6mqOQ)Y&Q;nAdR^AGU$9@h*k+Y>?DgNYU9Y5Qziu!<JGMAN zyF%`v&3jpCcNtQvwczwqEiwHct>J_AYgOc~(JFpCQ)^!SB&{<;Mre(i5T&*AbcmL# zFvvwq>29fI97r|iWk1)f(73K?d+><nfdkt#Gv6=MTsL;QroC*EX72{0G&hFy(LAv# zQnR$ZucnuagXWTObIqWI__4j^YmLos?rFrlKCf}YQK?ZqW2?r^)+;o&YR}OKGSAZ} zj!x4!ba8~nAHVh0_$qYNNZJ*m5$oMrqum>O4PnY#OATXhJq?4uK9d!FU*bot2V_8x zt7O8$Q^deZB3+N~AjLb@5&5m9<ZZ}Y;&HK<BrVD&{paG$reX{k*lZ}N+18h&W_Kft z3)+%DPK6Sm?zkAi%!8!rJCc3gwgd_rl4-TZL~pJRSrk%B8-M&jyPkbTtB+L()U4`0 z?c3!R&9A;pZ@)iBjR&2i-CU2*hTSB(`RG0xo41R0NZ(EsMVqPb+VwR1*q=1){z__G zy^K12T|{F@37yhlF6|pMlai^^XsuB(eReXRmYvR_n;Hr9*rqA8+w@8F?6yq$&SnDD zEla1X=cG|-PAVn4gcN%0eKJkyoJ^~>CQ%=UBsy!!c>2<IJe93Xq)S>S(niO|QG<kW z)X8xi9r-qap1PSpqwgosJcDs`f1h!*%b9WXLP8?-2^vq2cqGx*9h2#U-%@B?RVtk_ zHl5m%3G~LAOggvEB+464p<xHJ==wB)PHUM%?+Ooc>D^VB+N44n-mRD#hy6x{F4O7P zq#3mF=2<jbYc91IKc5!9D4~uM7SW}KOX;&!%V~DlO1km>YU-1>miBjEPo2+fq%+dD z(912hQ{5XosdLG0+AVe;UFKIt*O@En#p**e_tsH5<j4tnW%Fq|ZqYe<tPpqLtWUj6 zAIDy!(cNy+3n6!?d&_d#*7_l(nosD*mlZVg#&aqid`UglzM-|n)pTn7N9qBeX<LhL z)b}2x8?h%J|3s4n{-r~LN9mIt4o2kWH52lp(2Rt7S`v*5R-|N9W74sv3E7q1j3{u! zR@it4QgPjpqy@PMB=`50Wc@XFa@o2y`OwLW=%)D)tvP<gdUXJqyDo^7E^R}Saze?T zUL09u#S`ljVPsB11o6;rOWw|GM|90QklLb-B)+;6Ss2}gJX+tCOn=*r9BCOv7Ip1G z`VQzxKKAHEW_kA}5ubY#&yCR}sAC`U@lqcW+Fj^Nu9fvAu?{iBRfr+muEvnimi<VR zw0<OIXFn49v>(a9xw@pr{YfHDyE(q?M~3h1N6y9fBM&~skcyNTqIbD3$(8jbTl@AQ zXS1V;cS&#3c~vhmW=&6WY<UloJ1>f?F6d5Prgb9?hjk^FI(H#mygTFS<xb>;P|<;W z{JTAI&S*zwIkzP`M<R&OIh<(k<4G@5eCg>RC(}oTkX?zv<jbHyvc8Q!*{JVJww>`J zZ>F~<SGs$Uil%O)u-b)~+;Ad2PqZK*2b+@?l8k)a*Nhz7)RY9ww!!1G8<E1MR^*=p z7UZ8uGjd^%35k#y5n*b!K6!9UhuDSS2Giv@Z){Ra&*y!i?Q!o~fAIrdq=CCabKlVI z^d;Sw`GR(RQAxWEcuHl*AJHK12lUCJdo)ew4h>DYNjp8bMn^_pp^8%%>CmtXbk?4; zbd1+&I`FR(RM+ts<yRc0#mx`W@HGm0$m0OLxO=Za-?rUNH(uRIYe#LTDPOnHidmZ| z=e&XLIk1jq_x_Vku3AO+6|JB>S}dp0$|dx`;6*gQwuI&{pHJI`&81lnXVKpZW>BT` zbh_-=RGK%uh(4nE)O|rN-Q^+D^9Qo%&i0e(g)^Bnp>qbkbtsj(_$1Te3leEkwJ?_U zYCD>m{1#9DJQzp)Uc}O6ri1AvuK{%WfEapmel)##zb7r_qp0nUt~8`gXPSMr1C1(f zN6n)mX;rIm`l&fj`*?7)rb{Tjm)C~AxDZ57`UcX58~tfqupc$J<%7TU?oAiOcu~2J zC*9t(H63l)iq<stpl(7dcX~g{jaKKkq?spOsfL{^ZJX;t55IS&{WG1ZWZ+Cs{N+R& z#yHUrmQM7@ZAbd&Hb=T`jw78bI#Q!4j`Uc8Bi*vpk@h?6NP|B(Qk?)NYLVweuiSB> zPun?DCxtT|9_~Uv{NqAx#=25V<CfH9M@t$s*o_KhM(%XwUUz!&ua@+7FE`rX(49t{ zb*C9iJg9zVEBbjzYucr^Cv}bXq6>$4)AA`k)MvFX-FMxO&S(-qYeogq_lJULzDpb0 z;*StoZ7Qb|=5Vyio~I4>h0!wuBj`81wlsfVJGwEo1AXSxiSGZ{nF<HH($bmT1v+wQ z585oC7oBJlO<z9kL+Q~N+I3xj8a87feULtwb{!N;cZCn5dmM*Txn?|#yg8Cy-7uQA z%NR>5g2vGf?-J>`)k(BL*AzPcc`BtsI&Eb*f!hC;Nk7nu^y%2iwCA}g^pQ(8{hBGz z-wum(foU$yjLW0zPYL;SR>wkGeXodmO`l3{c9}*e+5b+@=**;xzs#Zw$Xq(Zaz1V4 zTSDCiFQnb(E~eA}SxO%^Dy2~)R????R%7?NmTpe`i+(+~fu8Z+OvOL8(%i4xY5%yt zY0p!;={m1{blv;|bajn_UWhqJ`~H2Hjx{+(!(va+-NMFG^z@rEbYScAv|{K#bmsI+ zw0QFss(<1db-Hnbp16ODzPo>i4!?1aE<S#rp4sq_x)nU8VZEMGPwPq=eeM~xn(~6i z$zIaR-LI&;?Hl^-*ju_Tw3=RC^PWD__(*p~)zIQOpJ=ZWpXrsiU+5F;x@WhnrH=y9 zSkE|I>A-1_b^)5CD=vC2(bFc=?`jjjwK`<O5M44;SC8Z_!JY69`Xp(wKKWD6fM|>{ zAi75lNMKV#(m2tO$P|WTqY<v-?~5yomm85o4~z(v8Dn>BOcv!Dlc9ealNhBjalK$n z<X4SJqf5pl__#3{x5HQ<$_2*6H`AEh>uF5#TN;y3UyaDKvqt3O5+hPF#)yzWBeGP} zh)g_dNU}=|Nd~T74RXb;EH4d6)(!)5D8qns3o;<qHTuM2mp<u~qED`P=#z@axZ89o z?t<>EM}`^U&eVgtWK5<m+2^TCG;rpsbcGJNKTyyiUu<+p&2??E2iLKC4b&#Qy*4@V zSc~k~s73CjX_0=M7V$ICB3U@e*kP3>*@df--bQE=bDZ_$UTBa>hc(FIB^tylQ-hR7 zYmkQi_{+c68sy0*LR#D-r1deJgWgO?CeB;0z&Vg{I17J!7_La~g$w<Kc7zOTL&!g# zIBn~Uv*>oXSg8>qC(UuT)tHbbIIlx-nr$0S!D->t5l;0Gccd$nQY8{YWL0xN4B5rz zf!M|TPN`*Bm@`NZaq?v{>ROIE6ZLUYvl=ZNVuo{j7%H(Tj^z$Gf8vJggM0~@E62Iv z4um*G6Y?jfI64_O1?FIh%)$HBglyQ2vt_8Y>^|nM26JPkL2_DZkV6q@jUgIj*JKUS zVIf*#w+2bRra=yT)F3-?FH|_r3x^EUB&FG!0*P9oN%$k0B>AZ(sWQ|eJ6q!p<eq4D z+;Y+d7twD#s6{$I#Uz_(ljT0z<ZfSWvSf-j$t%?+gAZ#HO<W5Wp`$}y;F|cSybf_6 zs6&+LI^-{0A^r$gg%{$Uux+Px$cQ^S<aCt|`TSLfd^OZ1`i*tT*A{{<Iow*8bPUoZ zoq1idv7Iil#9y2Y?5azycF`r1JL;07xI}v}`oC_eOX3^pl2W2evL5RY?wAg7zz9mF z;Fc#`4{z?GL&oERwCAU^$=Ai&<c|bxvOiRtfU!2&a1-m$T0Bhw7umN8)FP3eG|A;% zm}z0WCi&u^Nh~gEkbGQ`@8zsPZnA<(!D6w-vfM}MszH>_CX~)ySxZMo)Y6*|zR~64 zH=1MnjgHy%mCow+m2!{2(9%g?s9}RI^yJFV)FR+B^*s5Bwi@_}R==#FQ*vtPVapoq z6F$<%fgfq3Qy=KEfgh-F;MIFNEAKt^YW$ua*i=pZBdh76Tkq)A)OYlo@jGg}_ATuY z{+2Gk`-VnNc|-d&eM6t^e@z<=eob{XU(*|FU(to#U(rFIUeY#ekb1qOgSB4Lt$$b1 z&@ol?y?qs}z43xZ&woL6dcB}FmM`e+E6-`(qUZF}P&^5w*8MqMQuB;HJN}GbT=<M; zCqARE+CHOg?4QxnZ<X}S-Aa1*a3$@tv64<LsicGRE9v}{N@_E#l0NHMN#8|QQs1CT zy4<6Z202vH+Qyaii&-UYV^~R#X;;!x+)jS$TLsPgT0vJMh1OQk1dU2+r&~$WjD<>? z(6Ex4+f~vvEi0*aU?o+yLxnMwG<$3%%@r|1jP%<U#8Z`Y#*<2#qy3D!J3gZ`Fp={{ zJ)=E;e@0L2ct(wHKclre&*@t4=k)I2=XB-o&uMkpb6WQ5IhD0|K{aDu(7`iaP}^fj z^aZsGuA;_5S{2>4rHbBvUPZH9U(#+PUQ$^3lA5o~Z_~Q_tdL&W&qIc<^9)_%Ha>Lm zriGz3&Sjx=<o(b~wVLulU?m?C?IIr(7AzlQ)>*E3dZ7G4N}_y_t|-5Ip;*3U(QNtC z*hTVE`&IJr>l@_Hig(Jd`IpIO-9IX?o^ehd6LC#0_-d8QZ7)>FuWxuG*IV>iKJ&Z= zH*JV6XIg8>S#4;*osDnE&Gxq8ZW-Ef!{0b?@W_Sx<ADd)__;UN`D*~DV-?CJ`-O4g z{o8SVg`K&3yQ8?aucEnK9s{_>NwJ)4?+EU#-dN6XP!cz1PdYch$z(1iOyo*ya=C-s z3k2@K_+oCV=QK|C_IECQ_bjfDFqezz_y^~0wUFEVU@>=X>oTrW_6n|hr`6oJhHJUY zxBud{uiD5R8nuP<_1Mn!d$p6Z+p(KFHenxUATQ%gHI<xr>=4)Kx1*e4*ArZr>1l4; z*|VJEv<sX`yGvZfw=3M_?bo@Daksds=E7Z0??5?MG3+6CPxlEo|E~&eN9X6<(5fnK z-tVuu+ivf;>Lc&Dy#s2voi9Ig8Cl=B7g_{N+H1guVok6<sRiBjb)aoKT{x4g2UpAV zVfaS_80KjN`$rf<!XgvMIBN>GY8$}v*5+`0pal$^Y6&BDHiW%Bt>G_WawDi-*%%g` zuz{s7n!q<xTiEZ}46b*xgWd@;@G7>4#Ffp#a=!!EUu*%3o;pJA7bm!G;sQ(UT;Woy zmM|&A4d%6X2Zx>>;4}b_h8@-#rjGK2X9-@Q81D_*$v&_z$rs8K{UBwmKP1Knz~v!< zP}&zy)w|F&7~;a)K(v1dtac8C&en2htIYvs9%Q!wJ|D(2<2Hmr_N;J_rA5HU=t!Xc zZNaBuJDB#m9q65I4=Yx6fapmbLDsz!d}`hq%HMW|vj@At{uy0iO}}nX;LsiVRCWi; z%~7yBsRwZ0Jz@2$p73--F99^;dqZ`zXxMux8oCzsfh|FO;nvf>aBf}<6hc4HsOSgW zjQ$YfGXOqc8UT}02f{wHL2zKhAP^%5gZ{0-5Ho%Vq-n&$(AlxzAR7vb^+TbJ-!NFR ze;B;t<A6UB2TR%x2lJ!DVPp6Rn4}m1(}LpR%~l~EPPvQ(-=!m=lldrUl|Kr;ydMP@ z<442AtE0iO-57Yca||T37z<lwkA*{YEUXxp0G)3oKzxUBV7GG|%xabhm+}%}>ElHB z$d89V=8uQTx5h((cM`1alLUiDCqaaO=g*cT!NYAy@Zd}moPU}Gk($YnCfFv!vVdgx z7L^Pu$0oy+LZlVRP;wv{PF+iertgwrnrRBi+*06L+Z5P2GzIo#rND!QDd4>;1^&F4 z0{p8Kphl_i*fka2w@roCaj7szOoe94QsMmmR9JTd>0>HfvPy%Nerd3&XBrGlP6NML zX(0G-NrNHh(qKmwI+&!xLyvTjx}?Lg1UzMJdOCF9lnxipro)t%=@8uj&lUE{fZ`q* za5n|-=Vidxzcb+IwG7z(DFZGxod8xGo-G+W0gUq|!2UH8;P(>~An*AEC^gN5``($* zE;<uVXJ*29Jhk0Ri3gaPJ<0?#{fXf1F%eRtCc^o&iO_!GL~KeEL3l6`!u2MBgU2MW z?J)_wGA2R)#gkxxauPgyJPD$VCc{~;$uO+XWH6pG8BVR33=57=hV&|Qvz!7$gQr01 zkSVaBU<#bwFa^vnqFc=rD6`7~*S1-(Vyut_9&@tb=$<S{xR(XZbhF{QM>Z_$l?}<0 zvZ3dSYzRM*4e%-(I#>%ZKrX<9;Q}n2Ccr^FX|L*r0LGRgY;YE#TN@FoyNa-Ms0i)T zMR;2*!m=eIbl8gbhecR)O@y%LA|3}R!W@en2zAbZ$3k!pOz)ZlUPE)>Qd$nA7w3TW zk{sBzB?tN(&VhGV(f?TvG_TEp9p<?Z?vx7`f^uO%mt43%Bp2dRbKy>5F7#TI3x_u4 zLhFOMF#mEce0Z7*QD1V=?0HbpJP%y`^B}fE9?Tw)2m2E9;6_d!yquQ@!iTka@NQoo zJU*KTXUg;7uXlMcNjD!jn|yfZo)3$-eDLX!4`p%r&?X}v))(i4;o^MgzbPLUO8Id7 zpL}@qFdyE&&xbd91#r)%01mhpK!LmfLb?~g-Pi(1N-2QXc?B?JegW+Nvj8;r6hOeq z0*Jm@fX8k=FMt7G3n0Rz5NzxU;a2NHn2IgmA*vA8#TG)d<U$a03gP1HLa<m_2;BBU z=zFLT245_Mo(~Ga|7{`YX%@i=^CHM>UIf<OMX-u50=uXpm^!2g9wrunXLb=J{$2zt zmlVP24Mp%^UlH6pSp>VU3q_Frv<QMf6oIQwF$`*03@cg`Ly}K1bmWWitjJ>M-nSS` z1{6c59>w6&p&0%ME(T54VsJ#+$F)UpsiFvmUo3*!{Y9{MO%cS*EP^?isBdTyeCdGX zSp*HNiy-hzA*{Vu2#XIFLe$zqc=lT%OcW9e!LTRh)V~ng+7yBkEum3f08bAUK<FAY zS78A-jx2z%b_Gz=q5ynI0o=No4^=zzVbZjGm_IZhdIsdf1p_Re+j+2mQyxsr&V%2( z<$;M^9+*|-!pi-*aAImM2z?P9b78@o9JpMT1H-1~fZ*CY2h8kpK<}vtUp9+y4Qp;* zhzKX~c;CZVJg4;qxLKSHZ*;Q3NX&xCAE$usxG9i+e=__YJsD1(oCL|-B)G6+BIvnI zgo4sch_}v!Q@>3B?Qa=yBOwDkZsPgDk?C-MV;Uq{U<Z_*3Ky=XfIJ{YfZTb>;QclU zE_P3XtDDBda^vx^C?OG)XUBoH=QtQNGXeTljfLb6W8rS;7<ltxG}Lw)4GWfzg1lEF zp&)D|gv^VF=}$+%w>Bf7>5Sp<TX`I~_{71z++ncv;!qgcd?>UZ9}D9S41st0L*QfY z!BA2<2;M#y27+_oK<JS>047}M5BZJz!<-@g;N+SZ==QuXbnwE#D6J2)+8YhSzV(J> zVZGsQK`$^k)e|&Kd&1%#Jz&JVC^&VcJ9t`khoL>Yfhmr9&L_LTJnb%E5!M-GLMQN) zI>IWAjv%$|0N1Cs2RPFXrW>_`sY3g<uvUzO@ZAw``*}F{$-<#=&oJm;z(dJifR?W~ zh<D~-@eny&SriISu7$ul>kyFov;p0cV5qth1ozE@;9SQ**p?LlcQ^UN;+uZ3M%xei zxAFzoK0c5rdc%#4ULf4^gvrKurZBXI==4^wZlebXlODT6hRhwf{%(*yza<>F;0mjZ zTyeN`0h?@Rn6c9dmR2}|SrbRt)S(4Lr#V2UrOiS2h&_C*kb%Nj1}(hopi%E;kT=m5 zJXSP?m8Y9P>L(j;a<_rX*v7DaQ6uPk-5NIASi`14R#36BA<(CmAh=r!aAm9oj9F_A z%Wj)NxuF?Qp9b(Q+7ynanLvlx#y~b3LF!pUc>Kly(rpc3MOS?=DAa?Dqq^|XKo=VK z(1C;n_*+7EwV=jc3rMUc1TE5lGv^6h&>-LvSIbRReC2GKf8o0SKTO>RP}I)<H}IwR zj(~{Ld+*%kvKyKe6a}SOuy;fh1q3g2?5K!cQ4mq2iULW{Q&H@qU{}P3R7J&J_Mfl( zo|%W4Ov16bTkeueCfV2fll%kv-Twwp3BJOnl0m36f=|^}+4T`V*B*cdJKn=pn*H$l zre0Vk(*vcGx?n|LCoG-y7LIRy4GqWffu$Ea;1%ix{B_|uTpaKWx?On!wMRdO+b%tX z6W{~*{Y)E-wr_<a3h%=1VJ*;W>us2<bPE>e+<-NT*CD<6DlFILBjWd6hLILcP+DAh z5ylBGz)4rm!>}pmV0=3VTbHn~@LL1Knf36Ob{*Vt<P2<bsfF7mHBf$XHFSMd2~Ag5 zz_;?{aO=J@=-_-3-fAj^Yod?Ck)MyjmQBU*p+ynQV2{A;iG}d-^Fy$C$w8>{eLtL+ zy$@dD&#XgBc0+5Q0w@l=kq;|o?Sw17Y=?U`=RtSNZP5Sx7I-~sGrat5BXlX)0M)#5 z;ev<RaBOlGY#fydJDSpA%d#}MO^=2SnW?brc``gENQ7~_6JYGOc&Hy02M?TI4nJEj zg=#w&!G~Z0oVs!@-1Q~~o{5?X@3lt5my;sljoZ`2&@3bjZfl(kbs{IhOC3S*<C5{P z{@WNRl@kaH4E&+VDGF}!h49HE0#1w<z-8**aCf-}bPjQYJHI+Z%Oj4^Kg1pe%i6-C zMl1N@oH=~6$rOgpG=_IPM?$PM0&e(Z0JR_LLF&9NtUsv@E%s`{IUChs)_Soj+?${b zD^@7NJImyu!g5(SJ5CzDTLWOE)E{#5h#zFG=nJ`c-bYfnv!9f?)=gfQ>m-ZDy&_BU z+sO}|Psr`mLvs6(R<d8Ig*=dSlRP$XmDF8vnfx<&fn1w@j?B?#Nz2+gazaEc*(Xy? zYSopKH&>qIv*(YK{^Gwyq+&}U8Gqs+xoYD+Qg+pD(sgb=sT#eVJQlT;{5yLSsk$<k zY|P0b6-&~|*4<*V^HUNTGh;Ow`7oAbViuEge#|8;kIW=Lhewi6Muw67pC*#yAC4mj zt_P5pZXxp63n7^dyvQ*wuB7t{2XbbkHQ8fmPF~F!MT+ms7?QnPhmoIbw8*Zzs^rZL zisbPSS#qKkAQ|27qKDr<h#bDZ6V21^5G9X!BwD_^MHC@@O>`jlf~d)k5zX$d5ly&U zCi;86Smg8cps31Vx2PyFPXvE#5M}Sl5GkEV799zX6)6#OMA4I{iPr8NFH#zYM8VDO zqTJIqViEatr05f&BXYQ>D0<=Xhd5)^O}t3CPt*%95+CPQ5}m&f5MC;qh$y>N#5K`m z;-0Syann?jxU=P@@P})$@NCy4VP{N@pwsPDea2QzX7{c%X71GnCVlq+Q+!*S{pjex zZnX(u?`?`=ug+Y-KAM}x7OmdM`u^C##tjqiXR`*5viqt}va+jc*!3jCcIjVa&njGJ zC*!-U!pq0(lx;6r@V<+c>-xYtF8j)6FZ#`fb^%T}MTV<cCC9l>RN&M)6}g{&%G~tj zDxB|fRSt|-<AloU+}2ukPG^z^cl)^p7dKav(|)bVy_})N&AY3`bqln)Z{nTW+|#Gp z++H;u&dXAVD;uT5rGC}s0#9gjweH%S%T6uscC#iYYSrNGomJ;XC8%)+wN<&yd}Zzp zR^+Us6u9Ll<T%M^8ICUk!A;u)xSmsgSbyP9*1w+b?5NM|y15_NuGC&udf_`(Vbp8( zPEk86_v119)bu_p9<*v<>$GmLS9&h94)qdNHkD;dMQ7QAKdRW^(`D@Gg(d83-6L#7 z{eJdKZ~<F;H;<i%HnEoqve=moVz%C4HT!e>A~xgwboNxhWHz`UknMgWV5hk{vCC4- z*s?2ntVC0VJ$d#o^Dy`wquh0e8IxPj_<I~-6h3VbGd^49GsEM&nb_S*%vQtth6k}k z!!b9Rx|`L~-k0_Z1l?9=1UoY1g<ke<!o#UEgfqM|g>RDf3gzhvVMD+r;kb(rg*9J# zg&&_|p-iI^Q8-tJxc$<IQ1-GSN@qF~lcRlzC-%OCLCZKob?g)(Dldu%Iy#3)TeF0? zASaF|UQSFRJnU)0F)xEKf1FK(D{ds-7;hm|&GLvp8as&_UAqXkvOPre)cu6P+k-@I zXd&Ub|0q#$wwQQdR6>}}EhVxCPY^RB%80lfr-=8*%Za2z6-33lO5#F56%q2cikMSg zO(agKAw0Wkh}Vlw6G^vE6aCt?#0#-YE%Dr}mKgWuG;uBdG;#1&4RPsnHF5WC6`@{Q zNywlIVs_;zV&9*W#2lv+M8W9eMC<rt#3ock$k`qt#;F`8o^~G~tef@`CA;?!d*&1n zre^uXw!7Pj_e-}C!F`(vli-bna&8Xsw;+>HTAfA&2~r4qvjoEV=yF2*gqctDuAM=Y z_Jk1?W<kVdH-F-iyO0P)u0-Jq8^Yk8G2uB+pBQbbLG;Ng5W{}_5x#iXFLa50F09^g zQ<$O53LT%73UfMl2{&1#3uU)N3!MgCg}b{HgnlWkAgOtxpt;}J#|ZtXH_YDFVEXMv z!;GK$%&bnt+<vi8%q*AAW!!}anB51fm~EDq8TsbN47KJxvm{@Nb?#ANHN5rMM{7*j zxhL&drTZRi%1_8%7&(re21D6xQ8U=i6$@GEbt~ESq;+h{nRGU_B!``zx0y9sy`7H_ zFJNVz_OnI`g{*6PF`IGv1iL-Ef|UzD%_>{gvzrIR9KRJ`V5f<%up9htu-~Oy*zb}y zHX-#fD=%ng`v+gKX*KWI%kh2ePp^-xH~7k)yz`UIFTt#<zcd$AFUz^OD{%R>N}MIB z%00fN&K+2&#pS8!a^;L3_c>uW7X^*Dn>xnaoR6lQ;~fibb+I+)y~K{Q8s*5vh|fE7 zZ-U&o%a=X4bX#w(YOR3#P)Tq)_ef5m9dRdHeL2O`{+ww_AgAj*hV#BTmg@^0&mFun zf%|3=%<Wq-ky~_p5_joV2siP~WNvrg6i)G7DEHuA7-w8Ll~Y|ejmz~4=kUvLj!li= zNaaYbBqx&d{Tj*nOpD^geaE9X<-RCRWFE~$O^oIyEsy4wi=(+O8PS|DIhvb1Cz?Ah zisqV?qPbt!qPX`dQJlS56gRvfl6&eK$sK5n;FO&rxOe&CT>s~3+~=Ta+|?sfIsd^h zZszDP&S}~-&f?TmuH;J?*XS0;ZJZm*eb1S~$rn!MYRf{z+@q6|xP=ENawZwU-0kQf zZnX6TF8=K}PI32GPK6x9r92Aco-YpIR6qK08<zWWIxi5{7YI3zA`vI^UC5;b3b?S% z-kjboPcBf=gG+;MTuht`xA%|}_xhRxm-ESv(>Ac>q=eSo>2OQ#{7Q3f)J9Y8^igAO ze4}_IH}>fW?$V#(9A|03*@fwG%m!V~pjn%%SJmR&qBXdWHEP^aT~$tsR_0p2C~_SM z3Y;>K=Z5FYauu#JoY5mGj^}<{U*cc(&Z}Rnmf#0lw&W}OV%cYQI5of?e%HrNSkTR? zo`1_O9DK=MS8QkR{C&*6eRQ8K5%0armigae=RUs5zMI~}3R}*zF`g{zw)HGq{j8cT zGAn15=9IDv4-~QZ-XZpn{602Vu#26sG>@%3w27^1%Vz7<)7kR}lG$T+E7`E?3)$c6 zXR;Q-Q`uIZAa?s`e|C1FkiB%vm3<Lt%f5JF!Y<!$z`jV-WIYlUS@DW}fVH~xktsa# ziaGV5mH9RQGP7x79TTzT1QTt1fa#Up#?({kjMu59jAvdbv(8h*a7QhfSuZu1l<qGL zUn*`j6n!aan0_p+VdrR~VWoF(y})Q}eR}CSZ<jfTeUi4T37mDt37&kS1?hM93sO33 z1+%~05WKtFA#ln2EEeo{mKJ_Lt0bJAtSKB;s3(jFF%qsgZ7NKAX(jyl(q4F#aS>|7 zc?wT`76?rops)w~3b#iF3Xj>26%Jc4UYIHuButeK7T%m2EL`gvEZn>*NO;3*g7DX- zaYFBmF~U!dfkJAJpK$9PB;3<360W!-5GI`P63WK83)^hPF2ZdO9fa*`ZG{UItb~af zW<t%LQNlLw5kiAy`oc$<I>JS18p4sYRfI<^6oiv*NeeOeTX3`Cvp}-HN8r2crGWE! zBnVKuBN+YdvcL*73VyoR3ak#431U!@02uEVV6UA5`Rq*sHN{MUQGAl1)?ulj&3lHx zzF?9-UmWZw7(2^TV06z$P*`px*zsFa5Yi+ka4`PrbB%lHvv&4vpFw@j$GqjFkL<>M zK6?W<`D}cf<fCOi%O}`rw9n;_PCnj=!+n+<k@Jx}>GXE3zwGT^b=;eJwAuU9hQ;1T z{E+u88AI>>eV@Hn?Bu*c1GjqJoH5C3a-o*j^7rRG#TJ5Po{^7%=dSb9Jl5W{cju?m zk&o%q|IPW^Q1sfHWp4cZ-_QS+`N!-}^X>n&`EQ+D(m@_MyFYr^-J0pC_T;qZhS&05 z{0n=jK27r~Gb!_Oh=1x;(WvBYe8|?DdK&C)JbsP$!;Ra$d&iv=d*2PZ>@9ubl{e)q z<x}jX?c*`k!pEk}+h>eH5dRL$_F0>l=+oqx>*FiQ_tAQJ#K&V#rBC0JMxW<JH+|$j zKlK@3-|OSn{>ukA$_rBR)CDc-`hwrbjRl`VZ3Hr!t^((00)Z9lCwO;ig5d7iFoDN| z83JRSg@RX0;sodKiIW6>52p$GL$d|Vzcvc8cWx8JYUT@?m+ldG6dn+Smlg^VQ;P*X zMx}zVtTKT{eT887nQFo6lv=@U%{qb8ng&7sDOND6p;15{J}=0gbwThEToSAiHwhL# zx-8I9Y8I?ex+++C|EgftoNI#Cl52u<`>qLQI$skUj<_ngBvxq_sKLvEJAD@g(z+7C zp-N6r(_Al@Ft1i{e@CT&i#aJUdsQrW<ak&xYsOwdl6a?}Wyco5yxlp1`#EWXizn9z z)Nd^oIK$}z%NxN0rO8krcg9hGo{bQcol_JHSL*g@zHrXR#9*h-md8Op`@tLU;}5F6 zwmjHWw|Tl*z4&FUxW4XeMg8QU_WDiZ6dHmb88<wA;nT2l{*(r#>B|~~5g852r}7#a zMjdK+RZ`Y)hiqstd~&5>X>wb`D$`dDxh)?W%5wfR@Pj6qiZoSb_e>qe%*&7&BWudY zHd`}NsZNa0!jq}w2xj(ZKj!$wv5c+DBu2D#DwF#(TFfZx&0)?Fi<l$hW0`2*)y%F@ z$;{ywVurYo&Uj~JF$SKwjN5~ajLU*8jON>IOzM;!j9EoKGxd7`qwTVniJrQjd9v^z zBUpHtSsQwU>9H?jgagHlc3}xKk|<>=Bqx}7*D^+P^C>2`rJQm3TfxZaR53+L)r|T} zaWxZku!dp$Pcz!jPcz|5YZ<Q(wM_Y<Gt81lXPBk%ETgdhECb)4Wi);280*A3#<8M~ zx%s$`k^NQ2*lN`?og?a*H-`0$g?c?xJXptQ+^J*c9jIf9rq?lRH0qcqHD{Tm(Px?8 z*Um5t;2B1>xRx3Cb(+x%Jk1#L<L?>O@@i(=jVk8X(@N%8dj+$lwVav7o?_y5l`-dL zpJWajpI~%ajx$%{OBi*fV@&^!B4)PcQARJlkWqPei0MNI8I3Lb8RI*9nUM;67!B_N z=FqHsCMkUf^Sv;S8NqF3w%^~($i3glFd5!F4W0q4UTp-XCK4c)HTVTeU4&Ad-Rq>5 z*`Ak@b(4{H2pJ<?^<<;;qFuM7=@S|<5^}Q4>i8Wp9dlb{C?{Q6Nq?B^*v4J5F@+Cg zA7$&yjh!DM*X6lauIle&xx(9q^7Pqgd2scB{D4lo{Mh5h3iPJg3Z>0O3Wdu%`Qf>? zih1*wD^i`+iXk@N#EK@aq*91nrV?FxLup``u5y*{4CNM+<I066J}SrE7O6<q=c;I) zYEy|DZ>s7tIaW1<VO3qyl+>uB;c794C2A&}gK8~O0qO&bcdB=ce60>l+%@Qx85)J! zZ5lDsmYODLjb_Z1X3dyg!?nQ4rCLDtoR;K>rZ$~6SG(ho_^fuvXC)m;@(dk`W3^5p zmer-6N9dZ=ozgW)1H)q6!iL2(9Um6s`fHd;!bCmE&Leu%?m<11oH6<)3-{@pc=zka z3?c)Q13L_W{aXWYz<W68-Y~pS_1SP*+Q|?!i4DQ{yM~gjW+Mu>t{OoFHjOAO*EOOq z%`>7hYmH3AgEAw5QRv7RsiPxfN(M&8D56o6`Ib@C=O?2&5^RjY@dV?Jw2Q{Hj0P_m zqfO`^B_<&LlL;swP3if$rc}p0Q%ZiMndHF&GkS8B8J+OMjP~<0r|UPG(+}^NQ-y{W z5}i2~!2N^;jXzjW>%1%_i&j|Do@XrSV?Qm$R0Fc2<1(!zH?CTN8>-e+Y{-ymJo>;| z;x^odUKDKu0uI_pF1OoA-W%J}=VNRo-bZXf#7kRXVroa{#n{m&4%<;n+wH&uBYV&j z^-ng^Y7gusMmi4vMkso1b^z$A12rJyC>e|RDcO<wQ0qvEK8PJ9PPR^<d5#m1J>W#Y zZF7<=QTwMG>FKG?k}I{&)ZJcZYMq%2Xo_&5%C@>tE=?|A@(&lF=HyDvnd3@@6u3(6 zUvs5C{dT2`o!vm+?0>?M_PXpwdw+G4T(fcqebd~*!EAT>=^1x${EfThkG2Q(g7Top zi(@?~xZeXX%^q~)XAj93V^1n#{6FOgln#4RrB^-a8y`I-D-FHqeSTha;1Vx7emf6P z>b>a6?Ov3OthdCAKdSWwdsF7|-qf>Q-n4$hKj|nj`0Gt~81qq4zCN_{93N^{x(^k2 z)Q3KM!AEkYgI~rzK)h(AKw?4&==cbMWLAQJ?%gh+4J-a>M>^@P0GtIvP%%OX7I_IJ z-629sxKt>K$r4fv4hun8gHYnuDx~H6h4dYHg4$w2&`?OwH$wl3NBUA0A!#{CP`$N; zgt<=8o$Umz_mQA<r9_f_`XVsNNF=6Cnu_RLYZ1*jiYP4)5j|7*Pdw7KqeYVYK_Xfz zR3s5aiX@q{MAQS`068raQJdmL^!r2+6(JT;*Rn*E-)0egX@^J>v{yv652;6qVY!I9 zd|Ct&8Ii>8f{6OsETS*o7J)tYMUpko_}6*Occ4csl8pH%;ztLIs8B4DERZKb=Ktj5 zvk|0Zm^n#D*pXDRD+zx1kaRdjQj#$waGyj{mD5PzIg_L>%_k*M%Sr0jYLYsZLW0Q5 zA^rG#CrO{;QB!6S3FeiNbkJ#DO0qm|x<pEd8>D1RD=CQ<KPBn4uSu}KmjqWnlhlu2 zq{Kt^pMaEH(uI`XNJy`+gw!2JNPBugPz0ewe+;B|PJ%!$0#b)!Amy+a(&tw~Dk2$D z-_m(zHKZWvZwDYKKL#ZWDj=||gY>)e5L8};^t!tc1V4e4`D;jt|MWu1lR+q9|3Iox z9!YXF5S3u?PeRiCC3!H#9Z^9dM2!pNr-_IT3P)5Z@4IF!M$}UN-tW3~NU|jpQAf8R zs-XaZ*29Pz_@9P!XOSeb2}#m!AxYT-L_d6iXxVN=yM01n_Af*qmZijWiy8%F^(orN zgaRvUDNy1@fp&tT^#X@fWDbwb&c#sR%VLVQ=keK`6pG%PMS;6pd62e;0_X?@5>8U| ziPIGQoTF&1D-;O4LxIFcLo)JN4@IjE@?!E21s2Ntf}I+^bfbYUcxUQMYuJl@X-^Md zI)dbN<7i)c_atBXbc8QY?|kXEJdgZON2;az(j&5cfz>u&+F_3`?R<n6k|+7))4sGN z=L-xk`vRrgzToo%U-0OKFJ0foE6R_)^wOV0LQ+Z958To916xP>(W9++E$QS(mw5Zp z!IU3(FCObh=S=nkhEaZW@f<&3v(yh1ukxdZr})vinL|u+(k_05gMQ%4F+ZB9@B_(b z{Xq3OKf2?JAFXi5kG6W~2ShLY=&|qo=%5e${F@&w!hW=k!apeqy7c@3Gs>UNu=1w^ zoczHbPk*|C^al}v{8;awK|DYV^9PpG{ps?#{=jLeKR6!m4-At1LHhr=B;vW`j@|y? z`5}MWq{N?|UhYqCul1+Tv;Ls#qCZf%?oZp^^{4$F`GYAh{K3>te=xS+pLQAiCno6; z(g8rI6hP0@3;+xD1AywN05HlTfL>)Az*md044|cWF8SFw0KDcoCDIN634C-}H}(hb zzW9T~z5W2b^ar0F_|uIy{XynMf7-g9_nUkt4jknTC$A<8c{Q2FQ_eqp$L$yR(-x8b zeDIGyxCQx+y844q3xA-m?@vEb@&`MA`vK1ne&Fm&KU%s??8hfw_<@~uJS;8cKZd=$ zQqA=PrinbOT;NA93iAWGzJ9c<lOK3H+>iE>^P`n`{Tlbg7p!aY1zr`tblGlRP13&f zyT!hMo#IQ+Bz)<+=DxJ9sxL4dq(J{uie7e!0tNg=I%_)xF07^Kni&-B;7`$(VjGIy zp-M>>4Is(ERwS`Mi-7hXMDqg?=y#Dw(kno8HeZV3CC?}=9zl9p9i*-mKrn6%q<>6> z;D#rZ<ndD4=nDz_+DNLih6K{vNos2>NoP(VL8mndI2lr+@j^uRHi)P>`67CItO)EL zD*}0DB8hm{Zvr$vAZWvCg1)ecknCSTfF-^J-8+JyUVae*_d7!R!*L;PO$+JXa3LMx zETjtLh19L*0*S>L0d;J%0Qk%kP?z~*h^LM~lHB7%<?#oYm3w$axxxo*4fFvmBYfz0 zAHBiTW^cOcpf?@6${UOr=Pltzd5h`DK`*f2nipt2<VDM@_LAVSUeukDULg6CC#}%z zNsIS;O1f8gN`eDC=^6u1YIwf~NV(u4Y1`#Nja=dZ{GkVBqwN7I-n!Fu_3o13P43|E z40rI%*`4x`cBgK(xzXHlH)`ZMH;L>dH+qV>8>s%~DrvsqO8FiZyHdYax>AY(u7FQ0 zpkq5-sNZK@=n$S)7KHQE(%OaE{@q!!=9)8Izt5RoxXhW(fzG_0a0cIBJJB9>PSl=_ zPE_j*C&^A1C&@->C%T~3k!~t-q|H}3f+k-_(5m4m+4tOmT2STy#7Pd6+E@pEV|0)d zcG}Yw;<NS=L5@9ei?9dTw)Vi{mmT%<rXBcl$PP%Yw38_N+ev=t+DWQ9Z7J<~TS{t! zEm$0B3!tqnNce6;$u!$YKIGd_ljqn_l(UWG{x7~t=v8aU)_iM9d$u+G!O>b0^vjAK zbInTfd$$#xyU>dI=50j<Dp^UEKeeR9ODimCy>v^7^)yS#R69$0+FuLm>0JxSwqgs) zc#Va`d$a|(rfWe-zcQ!vE6gQCk~z5PZ!Q_HZcd9Hn*obs{CQuz8U2Pbll;&$qsm^H zN}A7@O73kirGjUgf(AEJnvpl9hCeZ(51ulSXstJqtet2=D~>WL{M%<N?#O42f!s!8 zsx{Ks<dn5>Ov=|$)Wj>JB!3D<fq9EYfhgf9x<YkShvkcrF`3mPP4Y5Ec6d!4NpH0p z8B_7isIcOy5vbg2Wb$Z<5j{m@1OnBKV#+#3m`po80_bLsplc&W07Lr`62TwCLZv%~ z61vdPq-v#M;YB|~lQ%kILkW629Q2+YZqk`MJjNw@c;QvY;f1AOct=yKL5J3HgN}@3 zgAUD!1~FBp1|aH-J}q}mA5<UEFN}%Prws!1O`hxP(^b8CF+0xdb)@gqlcX)wqqh-y z9pxH&RQu~;CT8`+I+8aJqkCe8QSqL`fUfc|la_W}s^qk8;VyBmuH@hh-Ht{#UFwU1 zF75wZC#JMUC&nUIhpwNYQ#jvUN8+HQ6Qlk@yHNRzwu$K`Z7^lFcHu#9ZHcV9wn;9} zFl|^Z(79cUmMqdLtV3GV4Lz;GU;Ub3{AJC;x&xXqfvYu51}A8CTr$@LXMSnqHMeSX z{3_GPo06$PiEmEVh+FKb5o4#WQKkM)T~kk@PEmW+L$<`L5B!;+F4<wJ9v6hw2J9ZI z6*`_)>j>SVHgI5}8m;K3Mi&^Vfid4y2ZrBMtx_*n4Y9~oEsUJ2npX~0X=6iGs`87< z!1TK+aW>^Dl<o!<7t8r7CNaJ$F4sq@XfFDx+yNgdi{nCTl_e*)D_4zMp*(OrSlMK~ zgR*9kin57zuTsaA>q>FlNhRw2My0~=rT<uF;W-DTjv6(kf!psDV{}>+HPfmUs|<E3 zf~Tt$>8sNet6usjx>%1;EZzG@!A97jP^xrEK~t$j!9cL#AI;3O4^fDF@2>FumA*o~ z(r>YR;@l4T`hh0-tJNpu3rn`j8{AnXZ(tuO-@-uomh~3$^jc;4xMKry^@<Pw@k~0l zSS~SclN@zCUd}})O72muuiT!^wsN`qwB$nCf5;Ywzmj#4zaa~HPRl0B9F$cI&6YKI zyh65gSL8pU*;3^wTc~az+j2x&mRln3m#JU;NXF*yC7A)`N}0k_`($b}vSlRO;$^B@ zX38{;o*)zU$y=td)k3DKN9!NcoL=82?GgJ#x-{adv`OMwX`5Tc(k2l*rA>yXOP|tM zDIG?{NZ0P4B)!=MNq7BllD_(Flr&|hA-y#ZOZ`VRH-7Gr%J07`^+4~E)J*Y;S}Bun z$E0j3c1!i-Z;%Q*wN7gEm*r9waWPVfCZSR>3ZtbwYy?upSq@Uk#wJq#am{7F6r}!m z{Ra1s4uHwzTc9EL1Z@6(8!R?x0>%p)K-jwqK<_UGnHl>)$pJn)>P<FyJuMY%9bEN~ zY_^}74dy?K0JZKRK<sjE3~*VG!0<KRpsm;$yqB{9H}XwDeb8_)%|;tcH&p>+U1h<* z<UhDDW5{hfdv)W~%dhbCtY^3>{Q+*f-hv&L+`!!2D|kiK1^jYsBaX9dz+u8O_`up~ z>~pIe``MqwQ*(#tri1%od|=&v>~wy&7{5}=$FCOV;c0I-<AF^Zu>9O?+_EwQ&pl6L zX5xB$a#RYIbxOu#)+J(EddP2nD_V_fs#am?=ka*Gc|1P1ekBg-j>D0&;_#C871(Ot z3QWC^#VV<>I8rAT%hWE%-)Aq!VJ1U_bIsFbm~CH%$6)a?d<`wf@<q#Wx_vCxc@m44 zm#@Hcc~Eq)aV4JfH6GLBSL3EL30TQvEiRD^InHMT>oB`96-$|m`J1pb4vR>~(|%^) z>Bq9L*^C^#$8rOnA-xHUzHG*Wf41VWM%(eVNjq^u!4T#2oVbtIZwK&AvDIOGd+!mv zTB8`JWS8KYzoob%u?#nVDaX{BDqQ%h1|Q8igMW>v$D<hrd(9d0oJm(M;>`7zalX%0 zY&duw*H_)b`mrten|&+x>A8<Dl|I7r7CyzlEZgzQHyya<=xdx4(}_z)cK;)tlXvn% z^v8e1;;(-{<NV66Se1tY%`(4nWXWHg6(I$>Kgobq8|A^4QA$8up#she)Iq^{O^}Fm zKvVrN@W##nMC>vIHQ$Ut$7EwrTVx6>`^~{8M=Nl7z71HM&u0@fIDnIFPC%j41?2X- z0q0&1VBYQpWG?%FphH4XvPdKb&&?rt+JZnvoG;iU;}2eJ3;>kEXmB8D45)cE7F7C; z2fy}A04i^TK$z7;Fe7>rxRe$G^mb1MCVQuVmh4b~V!}WguT*Y6m<l2ic-JWt4r<fG z!Pzh2VD!ugu;^R_!1|Hk&9X=!;Ua-hE(*N&j{+5I#8JR|e-!Yki~`A3QQ*UYC@^kS z6tHoR0?N-KLDlj|@U|-g?3ok+Bt_xC=iM~WH)0xi;Xf6q%nk!EArwqZp8~#am<;;1 zgaFC5NuXuhL}0Zg7(C1l0?H{9fcw(%Krm$-P<I~7m&qFqq%H;m?^OZdrY4_nBHqKF zyed+_bq)kE#Uilrju0fj^#N(!Uf^fD2bgfp4O}_p0&2H9fhnu`w{wmiIL}{^c{0-q zSS+;w2gGLJ9iOB?RF485E*gQoR}BGq&H(H=q6g;3>4M$-E`0fh29TMh29n<?gDFcC z!H!-zFg{iWtpCFMAKlEqIMMJoX3ze>kEeaZE#C+6^L?Li4l#g(9{2Oqq8HmMbYsIk zojBU+4OTz>65FE}_|T1KcxU7jtlIMs$E4oJ(mJi!`eY0C_q&a$r#JAfglqVyRx>_W z*@R0bUBvAl&*QxXjW__Z_<mPC9^7>nn+4X2vGvz#JWyJRx6dfY%DQFP=w>O-%PPSO zsA63B`v`Vn4rA%0gIG_nA20v8hxgkB_$-}|-2!)D3*|iQduI!F&)<YIBR1gH5jl9{ z^Gxh<Fdh3x(b!RUJzjZz9nMHe!mn-DV%dAE@#NL<c$8)w-dVgH-*w^r=iuo@*wt|X zzPo=eR>CpZVcJaGQ51~@?<268Xd3>UABso)3Bh|4CSo@{0k`cNhn2^T!CuONxUSs~ z-?>8Ja~C1rdrySZz6$XYCjlOx?2W%Y_QV0f9=NO34HqnT#gB)(VBsSt>|E-I&*wVe z+C+PP|6gN=Gt+Ew-X0sA%2{L6_g2`($qGM9vBZOqEwDwP1s-<J9Onj@<0+5K@R%es zOj?`adoNA#%2HFDlx&K}hMVH+&=enXHO13iOmQV)iZ6zmV*5l>yn}DE_KhiiVsD16 z#Adj$-3%*DFvt0q%<;%E7FcZGW`U<Kw!}ViR(MJY|Kby@vEwIep5oZxgh*Rl{>c_U zEZ~7^pgn$#?J?8jfFtr9aeM5L3#|)q!5)+={yEwWkBW519cw&rOra<CxbKCx>H6Tx z83No^Da2QmMfgE1iNl^joE}QyFRlM<s2FSX2jJF>(U>+Fi+5ifhszdEz+;95<1bAU z@yNswY~nNp@8}H0GmcEf`m@5ZnMovWe-njkPYwCdw=f1f%g@1O*XQD?o95%?V-{kq zzl(5T#S*+XVj0f<wH&`ISb^u;t;C1V#AAD()ws1f0k1Lp&xnc>@!PH>JOJ0>J)2YT zxO=I1v!)o!j-|1BY8oD2mySFCWZ*gB{P+5mY%Du27vF8)fJbL<!a;DziC%e{hwaYq zz_OM3*y>~f-dDK?k3F{!``<r+FMK|Pdkl`?KmJA7eDyJ$S9%<0cAUVjBTn%ih_|9* z9*dejsKJSPXRvH|9q;xVaNq+LKh!ygttLtEzMP9Vo@>Gu{a5g7gKM}R-oQ6!+`{7$ z?%+q6LteCa^L-qg^$_Q;d5mLYp5nWH&vEHU-ir=&V8Fh@zA10;757dY^70+_$m+(m z#=Tg*x(^2k-ed89X!M-JM?7cuC%oa?XM8T`3*J@m71y_Y!($bG;I~dcu_%bI{u}cf z4=nkEpDh22>lb4@VHW@8F>%O^*7D`0T6<-{_&Qmzc8wf(Wi1bsuFLbhQUMgaQ~*;W z6~VO2e5oUAB@mjX1k&y+fpeC88Ld@(@vr~z=o@(zP#vrSer{I*3+}1#vFoZJ)=w4u zTA>Q6cBz7IHT>^982t~9j^P2R_^v9jzpM&+s#X8_(K*SgpgCL><nTEpa}-s<qh~50 ztx^Rv(<-1ZgfE9<q5`hGR|Ylwjr)5Wl!4qdWuRxO41V>9hY;z(WF_E2DFI4W2{c?$ z1Qj`oKy?fcO63&6*9&|t=u`y|B~Sp-gYsZur93#dL>`>A;&trnAxJuEwjA&<llzAe zXPl4)qgTj+?OuFlD__M_?V1cQ<|9<c@FB7X9A&_$-#m1@!Pj0tC=Iy({NI0=^ucgx zkou7?cY0k4z!E7iH$w_cn<EAEcuKj=QVQHqk^(0`0ARucP@x2X8z=dA-U2=hIdce< zw$9~=CeJimc&^D`9|d3eo3_tv`7Ci$-h3MJLAZQ;=u-_oVVmck0!08e@cxsxh(P>a zY6z8j@ppJTcr5z=Q0W(bnQsgJ|LMQS?(@@ssPw<K|E=>MNWINJ2Ol5suL@DQ0-xBb z%t!aC^Hr#H0GMgO7ZKx8Yl0<zMaYq_5yr3d0P(hTJm1l2e5kcH-}Cl3J|SPsC!%lT zA!;E2el>g`{bjy-*keAjm5+c`m6ZZIBc#9xcV0*aNdeIUDKMT-Ii7S-3V1S7;2n=k z1Nm^`fML?$5??%^Axs*`B}jwgyQIN-o>?AwC=FzJa#>?20}4fawe6WQU}KsL$SM}| zC6AkBKs>+os%yyp1E!r*Wq~A77JS$z3#M?g;KVZ?o&J&qmw6}b=_LmoC(D6~C34_M zx*V|HD+j0wIer_F15?}NKs@h4mw%B1qh<Lz_uBkkV9Y~PdwD*@ULN!!d9ZgZ??@-f zgJV<WK|!QESRv-`lzoqq2i@WFplz}|$mAPT5c0sCUrC<Frhop*fdGCZlWmd%yN<{K z-xN8pDohSsw3FjcCS-vopa1*zxGW!7E(-(`d34I-Wkvqf?d1g-uy&ga(2kM;)}}IG z%^PX3p-39o&Xfkrb*1^3ekqW?Mhb|JnDZs9`PAHRi99wo;~_Ht;kxmPe$)tzLofct z+ZX-CNBK;M>D7Pm&d@(td+;}Yz2i4_bNP*JZ~nr%3x8o9sb4sH-%srA{u8&|_<=*_ z{lKSwf5*@AzvD*^-*IWvH@tlMH#~FjE6&{f6$8t!xU2CCjtc)G#z`Ls@x0B0Skq<@ z=Qe%D4`+YIihPY};o(m>5q-jsIzHm)jE~sP`Xe5Fa{%9oAHXe!19)-M2VA`311>W9 zfRk^$$Hpn|agEb^Oup{N7xwn!aZ~znyJ|n)a;*=K%k9G+<NC0VY9CIx+lzbm^y1<< zy|~;-+>3|*;qmFM9&CH02j5)Ng9j(};KQ~(_^o^ozRi2j)N9?Ct?0&+3%c<G-ix*_ z;k{@$|2Pj%hq-s-+dMig)ak~#a@{!Rdl%l>*M%><?85Soy71aNU0CmG7w)~l7uRm= z!V4R^uv1+Z4nEt3AMw*OaXqh5xh}ksZ$R-4i(9(*fSE3QsIv>(4R+xunQm;)1Jy#S zZd@nq#tTBaas9$>T+YK(;r?zMR>ybdem9OD?8a`xdhl-V9=svC2P>xaV0^p>C$;q8 zsXu%0A<JGIHl-KOrhD<T%3fU2(Ti_u_hGT~=sx^Bxepgr_2Jd;`mmdEKRzDbk8AS! z@!0GA*iQC64u|jY)<iyFKz%0hPKhC`UMY)AO(>D9!8%cx!9mgI!A8;9{1>9Mn}Ael z(;`ouH6x?uyOS|J{$$*wF!JDmdF1y;tI4Zb>16%EjpT{C9i(d8KJw|nQ89T!wTx`E zI!!)6EZG)$iELSOg9Lk9$@LeXlHG%^$vD?O@=M|%S$pd@d2p{ZjC>#u=Z#W<S@9ZB zyHy8H<%1$~86!B$*A$LuvxI8#c5t7eGkkZ`9roq;zzgF^cwE;H>bxBdkFgV=&Ylox zkvtWa%#MO{CW>dlk<>hR*lRItca4R>Z51@|PK0*8sZhrz4gRRkfbK9Gmfg&SAu~2X zlYuQzJu45Y8tsJNYIniIllH&|z58J7hJ)~rbs_AzauhbqKL(X#OX1EVC!skkhnpT( z!V{}%;33sBkSVT%0uciRtsHDvd>$5w@dfxYzX?XzHp33?8XP<6CY;}K8|ud0g(iPn zVaUb@aE<O`m~h}Jv@>gm%a3(HBdgcYtoSWFV%!Bg_Vhp%9xb?MeSrSoKSIOBgK*!& zudvep2lOfb1vPa4LUj>9Wy_>c=YDB)^_mQd_$rGEOyyD91O+4>zFHAQ?^i;jFDRo2 zZ&i@8k{Wttr;cV$&_HQRG|{A7Ep)S38~r`6!)rHPRMa>OJ!sQI1wHz_elkE8wG5H7 z`3U6TZiE_qhu~^%lrg$7&jcM^Zi+M$%#i*%bHs`*(BE`R^di#=#bj9{I@1RErQ3>8 z$$C3fo@9?ARym;3r9*nvE5aGA3UWbV$Q3<uaYMgN+|dOM4`lv_pSnF!W2+bX$ay2S z*asPH5+KbuAu0$ZP?_ftV2%Gmq7khS1y&-|zkx!UbA3^{&<|bE^hW`2{gFp~0NSu2 z5cx)mN274-G3eUoF=)rRv8XC%NU=WAoq*aOO+eQBgHTm;Fj{Rm5yd{7hz{(SguYD( zL8&s6kzK=N^kdl+)HNy;eZ3uuj8ntVY}+BoYLPMx9We_>PR-${d2s|<q8y3zPDG;X zfxI#5h(e>2qLG^Bbo5kQJRMbg&)}Kl474(QCYt$XNVCrUJ`1Ib`TRQB*+@BeHcC~R zgNALGgPzFGMGw>GqG5mLqQZoED5Gy4x;}e865pSXD#k28OX`O}Yv-<o=#lgyR3Ezt z6+T{sj{7f0-KQ3#jA2XA-qa;1<n0o4BWNiS8`dsGaKtj?nZ6AD>{^DLCJm`pb^Tc6 zzcv<?x5lDgJDy~%TY;jQR-nnUacJqxI3!vbhfZY2A+tkqsOM}P3T%l($=yS$^`7BM z6z;wf$p@`OpXaSaI_p=W$lWVZL)A*;czq>eUav&6|Exro`n>;Aa*apo6XKEk{CJ+j z4awG}wee`!op{vI9gl9vu0oHES0QC$6^fa*3O!x93MFq@g+wP-A>+%dkj2YYDEQAR zw14<&r0F%JTjN%&M&X-Rqd6y5qwQB#^FVPmnkkilq>K~LO;G}Bj7mUli3v!3w>SYU zJ(Ga?TNBW(PYGzA){t;rJ!uW9iCu#<x2{2X<!g}Jtu^Rd-x~B%buIefuof8yuSF}C zuSM-!)}mz<Ymvd7wdn1KwWw8dNV#f+CZfpIiRj#}L`2plq6d!>(dM6tXqHhDnh29n zL`)J&N>4)7;^HLq_ev6)-JOJ<tMHW0X-K-ZuS!O>1<7cCLo&*LmW&SJWW<@RL+=CE zA&<p8z1zGFeW_fBmbR`#AHJ?bX@)7t9HyZAvxl_nk`pOt?5z~!`Y{Dr4ogLrf>h)- zBNYXwrJ}XRQc?M}RMg*}ip1X9>(K_U_2_NXdK4sHk1iAqiPt-Q>(N3jF;egnqsk~T znkg0|?P4*yepQSz`^5+;(dfts8Yw!_XeC9X_9-+9nolEcEsY#E4#`*bN*bkJpixgN zjlw%=boo1t+*Q)h(UH74bV)<&{nEs!hX;tE3)2vrl!nYVr=g99($GNFkbZ5rpN58a z@hbLb8oI5Tj;xH+(K^?3blX228Ba?`OBbc1>g06vd2>2)KAesgR;Tm4G9BHxKO|rc zf2JdE)eIEGOUOu<3^dCxgTGY7FE7YI6B09!$3}4m(ms%ZI(ar(bv^^FyvtMB*BR*H z;E;mVHpoPWY%`G&k%_hh@gjCcCJJ7WiT2Z(=-Kv6q*0WKJZdx1xXYO+<UuAH`z{l? zf6qi(N<$L%kX;rECbCe^ge<gndKMa7mWAe|W}ypPvXI6h{%_)nER=XI3vIuhh4!}d z^Y>XO>2DUAtUjb+TO6~|YLXYO!Muu{o{fGk%|<iUWuqz{j}Gq5Mm8t1(fImo6y2PS zra#C=6W?Ydm%(f#D>Ecw*PG-Z3m%{{WDfET;(=;Z4l-YygT!ldP)im+*UQgAp+|F2 zR#grvK9_?|-poOHPjb*~UbX(GV!dT^(Q55nbj>6e-FC`F2BKUf;uY+>DY>YALN1cw zmpf4|y5gRT#1^@zhi`ii=b+oYIS4+?LF+H(pf}|?Xx-i%q{zSEq&S}FM)S`d$TMB1 z95M3M&p|Sn|IhfIPrI3o#?@pauqPYsOU*{+bF)#&*lgs)o8U7#*~scg7Fxo;OUo{0 zA-U2l1U6?Os};N*o}7g|+_KOctt{j>kcmXMGSS`AOr)8SiIk>iqU-LNXt{DG(&2&g z%i0X|H8%q-o1THfo%zrIs#FHL)0&Rf97{)yYtm8Cm~>=oz*B2}!+TPfh8}09A&04H z=)74PO8-Ek`7DhhvuQLTghrObX;gH9H{lccz2p&Z#AEoq=WQxFv@jJ_zDq%d3sO+# z>vd>*%sN!_JeiMYNJbWqlTc@P5^{K$i2TLV649!*wMcRDTD14Z8l)Jo1__u1r0tY| z_8eY~2Gmz0l(Gs{yo*O0CdZ@E%t|!fY$c*L#-Z>}E6`xn3bdpt7Rfuuq80m=qf)u$ zsA9!3l=W~a|4p|Pojbe)9Rf>G#jM3>PU9jJX}Ab^u3d<Bwk<%r+!i2lN8Wri?87|t zAZQ-yJuw&g@&}ma*>iX*I~)1v%|;Z@W)C&bLd%S2p^Ix~BIec%w9H}#`kXu+Ew~$v z_E<)vpmkA5y(JQ1^GHOljX+)3!qF(BaP)WiG<5v@ROGES6<wbb#;0C{q5-*36dFDS zC6rD^sy{-+=*ZX*R9`R&wZEE(yd5W^lr_O9?tBoss~Ch_Lnok5hsL9XzHvxLG!Bj5 zG8Q$pk3q)HV~||xXw=^vh)gvD(I6j6!R+-%AD{Xmzma|@Vx}*8c9=qeuMm1_iO{Ph z5FM%}(WsyNNSXi<>exo0d(VVuww+jrg4YVrq>DbtUfBmlP4q_E+q}@$o1REh!4m}` z543cRJK9^$pM<=1MV=<EX!>*)l(EklF;AS(J0mA_HO3JclsKTgK6}*dZjaj5*&*2` zTV$_li{6FWpiBF#(YOvPBxhlTisxIR@5L6V?WH+VGcrf##i3>>aDyq5YBWLNAB@p` z6Jtb78HL7Wjzs6`jF5Z(2sFxa1o}M7kU!K8N6%jvpkbB<sBXDFDsRw3QHpx#aKtba zenJ;T{m?<n$LJtFT>zy%(n2o`w2(!pCQ{<Z6wRntM<3p(Ar}obWG_%fpXRBcynJOO z9(_#-?T}GI@B9@}`9=j~{7@cEu$D)jNpk4Tby?J7D2wJVl0j=~q|un~Qs{+13YjGW z^kpH2$DjRyHX*;^zS}?HZ1M+uefk@Wcl!$8*9}4w|Ie`H-bc84{s46T@gACQ?uThc zeX#CC4_xih4Ocb3g9(A1VwiaA4ZJYzHOznY657Ofz-YM_uzKHfSm^Q$7GHh>TOuCA z+uaXgaN+|fFMA)RZE1zW^zK2^!!7Wy?Hw3VcMH0Xxd}5KUx$IQ*I=OBRcL+a3f$&% z85*};f;n*)VTRfT*mCkbbQpUM=Dy{iTm}o9Oc>aGPFxQ&XVk%+zt2GZ1GW6A@@bgz ztQxLJt%9FMRYI)`<?!L$Q!q@S4DKj90SiM)VcORc=yvcJEDtD#@B5Cz54(=Qlc*3H z^&Eo!yADEg-vh9ze;;(*zZWhTw+F8JUI3?-?t)5@`7lp;C+z38L#wzv=xf1CTk+#9 z&}G|ZC_8!+Z2YqUMxD)t&sXHY5W8&H_%;*TAI*SAW~D>pQE4!Q6~iP^Dm-^S8QKOW z!ls)EaQC!Tu;f)7?2U_sv!#|n+5E-uzRg1T;`}`55IF}n56*&>J7&NqZqX3lkAQcQ zromj3Fu3U2WEi)45)>ac4Tilf<6&U>Sh&w~G<@9S55FJrg@aKD-Wf*1oO?nTu-ylS zPVs`$dLFRonJY{yafa_#IYRG1dw9yw7VaOkg5oC@@Kv)JbY)DSS@kFwd&&qlml?u0 z6$UW*%n-fpxuFf6o@&Amed^FlN)2imsEFYvS0z{#tN?SD$-xm@W#FnBDd>5c53*DE zO?uA$PMTd9B+add_-(vg4|zMalbrSY73rP!f?T2cjMP8$h!l9;C)?WYlCP6)lXER^ zkWmkt$tT;I$bpF$$O_$ar2b3hAHi+eQcG&YR+C*}732cHGIGC{xRl)KdW@Xxew4gU z93}_HA0V&9>?Ntx0&+#+PIC73JktEv7V?bS5W_V*n?<%sWst%!nyidkN5&eiA+NuS zBe{!9Nt?0-WPjmoa-e8B=};R^R^OdM?)n`}c6p2=PbCjgTzw~k+_K+`w9|7V6%RR* z<Hhc_q~Ze$a%{E<+3Rma-d8su`#W_=^P3uE@;MdqQ=<ZzcU^`Ya}|sJ<G7cT21M7t zc8Qj5dMT>(ej>{Ibx)-G@P;VidXvcRL8GYX=UGv>PnAfNcS2MpQzSCXKOnm2S0HNC z7$Ui6|73{%c%_K$AB_`DCg+R98gfyh&EF@A78?YJj28+-Vegzo^nMFbW`?1t<bbA# zzcwqnQvQ<|+5PSx%Vn2dBCgk06N?uX60=ga5$C_B5_2ETASUjFM7_QV;SefKoS%PP zc-n8fkQ?SE{9%(V_>*DZAa_OoAI;64c$P72>t?p~sIi|0EyZk2n}`hwpTerIT)+mx zBo@YIvBqb%uo0VfvCWzX*}VD1Y|4o;cG`y_o?E*20(({Q8e5ds!V-NCS&_>NHq5h= zHR<YO2L+$m*+xHDVcK7IbhQ*W?WGL&`>q_<kg34Ye};&z(sUJW;v`k>ubCQ`{!FaK z`K76IwR#%d@j?x*z*LiavR{*vXlZd@(zUqbeOla~3EG_EA#Lu|iy@}F(L#p{G}Yl6 zfDY#^(dK?m*XGu@X>t9QTHMYln%qI&jLr2^=ME{Uar7A#PBdPb`*uT-i$X(G*Fr;< z3rvva@H4;-h;#n3;gf!`VJhF*ac2hE#=wv4o!WkO^sjDq!>~?PU-lKdviUh18}pde zYi(oy<GKZNZ?H4+uCNPhF0k`%a;(A2I#%Ix4SP_!g7sBD!N%(rvuQeqS&8C4ws9bz zRld57UA<`|n@<dp-4UIu+4piw*qV{ESn(d`FxG?|#}<!)tVM`BYZh+9ex5#(jh&;- z>Ml}X6P|r%;(A^&&A)CkceU&Ox!t7so0#umOPS-E6jLuhjEP_0)&SMT4Y{qS>ht|h z`Ghbjf`t?B3T||12|vFR3P0|jE3EvTB|QIYuh8^LxzIfPg0S&qn=rreomlv1>rY|J zR(WD)tp?FtXF%xgHYJKC+Y$TUx)H~x5X6W*{)Fk-2?Tp8l-QgYO{nV5C0vr05c`g< zBvx%pB$oS&3Hg`lgq}h+ac<ZKB29fW;q!SbG5_**VrEu8@zr%Vp?7^RaXjb%!JIur zWXl{O9G!{?<aUfGR1+U3)=NqW=?N!^J>_LYWzQ)hNxp(uC|5}=?X4s>aaBZ1N;UD< zxrS(dTtkSHP7|w@d9s^ROU&r6C1SnK5G!Y%A-=?%A=(9Jh#j4^#H0nagiifwV%F0d z;`-fc!ufC&kv681SaG|Yc<6nKIG1yh(7RYltm`Qu4v1xs5q&yE#N!c12-^5Cam4r_ z5p1}hs8HKW=zcFC7Cgu&;){0>Ml<t>T)c&l&fG-AcIFa$OtXnsE*Zo%Et<HLn?$5< zk0-3*QsUjNxrA&<G|{~-lyJ11Kp33%Bkl-=#JIbzMCnFb;#aIGv2fjRBJY$IvGT7H zAwD=)ns~C|i*T)er|?R^1L3=mmxYb0XN1-nMZ&WI+l66ViqLyts_^JqC!xtPd7&u2 zQ7~smw7_V6f=|<z#(JqaNe!ho*BX}YP-cF{yD)B3rZL;bq%a3Pw=+>oi<z=3b&M0b z!PwnuXSOf=#7vcuVK?4YWzX!@WAB8Uh*?_Mj{SDpot+m>vR}TAX2H%7w%j&~O>CIU zZuVWyF1oOW4K$+J+xIfrwHX`OX-->NgSH)PW5RB>M&|%)Qc=jZ2OML2AD&>F7gn$@ z25VS%aUFX>o@0+}lCZzkF0-v$uCZ1sx7oq0du;yS2kgOwr)+)i3wHf%@f&vE!!Gvw z#C|sF>PNOW;48cL@=rE-0%lu#rMPXLvRrD0JU8-zBKO--g{$18#=ZKW!7Y#0=A7^7 za;ic4+?{*FIp=vs+&5s%wVg2KOr~3K&05x6`z2dWZK=cm(e@>9QC02#cNt~|L}pM_ zRFn&j3W^GdI)nBChFh<%p^{>nqT(7V3Yztr7emt#DGckjy=7*$Sz21iFeNUjxs+>K zS>lrWf{KcY`u{%X-pdSR{g(g#fBBsGp65BwIp;asbDneW9mah^=;WTTIL7@07w3)| z*VTRVYrA{rjd*vzut(f6vLnIW^N}R?gbt6oW#3-z*Y@>xf4!iu+qcbQZugh}bO%TM z%RTv(0q(Y^A9rtSJJ7vv=pc8}GlSjz7pA)7oKLvt%pKy+nlRLz_h_2?Sl}@Ck$uD5 zw!A0Z{%wZ4kGh7tFC>j{&n_L|{=Dr|?vfXua&I~El)Gcgk?xm=j&v_vFw!k=_-LfN z>!y+JF+YrSul#YOd*IfQ?tiQv={~e@q<boaoXtnN+Z=q#{Y&ms?nlF(a^G4%!kyV; zg!|-%;qF82hr3t4_N05qonh|JhoSQIY3>8{)7%}$4|V6S8sZ*Ye~3GB6264&N_Ds3 zQr*3~4|ad_^dNWmQuf_ncfZodW%url1Kh@vf4NVr>hG4E|8y@O^_Y8iyMFHJ7y7sd zuITNKO6ldc-+0vBZfQ^V>Q+haxvLZ0^`g}8|6Xm--Q8i1!<~Dqn|snDUENQ-7UwQG zAM38yJ;r@<VJCO_z7FoGO{3iJk8I~Yw>-lA`>{6e@aC=E{RgYx0dBrY4t4Ll-NOAu zmk{@-InCTf8-m?e_$Kc3fsNb~K5XcI&d|W!bduHm)}a9RX#7uyL)+`QI}Gr1FaAya z9&qy}Mz?j7!96isbQgCJ+&Nb`ch$59rGNO`E6rSbr?j)7s<ivS8>OY$*Gg|qxl%f^ z=f%>T>t{<R<f-2Uo+<bJy>#`wUrMXq`>AyOr~6CyEdQZ&dfv{`=bqSBIyZQ8Y19wj zlp1H3l)9RHReJ36wWU@6SY7(g_aBy4KmI=ZKJd4L-z*J0@M`I;flEuj+P9>1*5E~@ zgO22tPTn%N^o`>)OS=Y4DV_GujMD74hnGq|gG=`=daU%fc0Eg%Uv#kV1j|$RM3(M8 zA6EKB>t>~W<~ArTt@JA$;}lEV{JY9k-S)iec8jB~J)?hc&An0P8u8OQ*I400SK%{n zx=wa^iG43vikss4!#Tt?ZDFD-EUvw4?Q4x)|6VV+sv93G8Pv*E^8D=AO49J$qeXJ- zl1>f3-_X8q;|&L2`?lN6gb(Sv!Lq|NrI+KQ%I6&2&%Nd-|KW2-zv`_HThh;t=5Jqc zY>KUR40+Wje(V$e@%3jmi0{%UIKEL@i}>>4;qmKZ+p_Nm_n8_UAM|Tn{M(_9_z7(u ziNEu6V*K$o$?=~*=pBFW$$s&ZI{h>L%&h+GyTQ+7{44%ulYhm3Jg9&Cik9>pVYy#? z$f`c^v*z@QpBnsVeDI5j@ws~*i4UlXkDujlk1q@85`RsIjh}F_V|?hY_VL00iHPr? z-a39vV0irJYt-)vANsgSydVa}`y^ZAolpD6pM1_7|815bzU4p;|JbL>(P-lpN8k2m z9OLtUcO1QV$Wc6Wk7NB$TOG%zyB&9Ad|CLbR;wM;d#_|)IDN1EtB$YF7C4&hf6;Mp zx9muLbcSQKX`JK7z%)n5gnv3-F(o(>?#4P^=+oBWd!;%1zVN?i8XY~qt+G#^{fB*5 z%LDfDUu?4f+U^T``~3IpuWx_F{=y&g?QefP&2E>5+Fx@d+PCg(XP^6fW4n2>!7kI6 zhC^0u@Al3=KkYVf`O<FBwwT%Nm&5<;wryJ5Zeue{-TvL^aMx|qKJ0q-)91VT7RGnY zUnF)#;azUG7}4dzjhk`wy<vpT!+z#!zBi2T1b>MTTPF~YeQ%g#DG!1i2L<9Dd@-QQ zbB#afGU%NfU6N-<b;UQAyT+}4z3YPOo4X#UxZc&WzfreUF<rU^O-buEVVK;lXPZ~M zeN(WyTVbnh-S91G@E&xVvCv{aIaacpddAw{jOt}C4<2TJEpV#+fzJ!}r=11%wFPh3 zI|Q$?w{E%4esg7+z2}EN*#Ff`{>?t@`UU$x!|&Qpr1&^~imvZS>Db7ToYcbc#iZ7b z{C7JzI-Tv}xSaS8$1|&YJ3=BJcf^+rb<7)+?nnxo<Y-ql-I06rImhPX>UW60bT4+) z3x3&g;i)3WKNl;GkXPSweDUvh9iQ0WcYM5UmE-f)pEydM_{`Bfb*<x9+d4;;y!|W3 zu77NBe7e}>=<~VT@xf=`I<_w=bA0*eW=G@WTO8NZzjM4%w$1V6z3uoK{r3**{qG%b zuHWg{8oSG}f66Y0Wz;T5(7m0GS@Am^xz_I;yJl{83>^QRqqKap<Ktr+9djnS9fi3Y z94lhiJAxOjag2QF6GuYY2add|cOAFpz3GrYtX}50FzIDS&~~R|XM_2UtMleK2F%WK zeD&K{$HMtT9KZJK>v+9|!_n<T1X|R@5!>9yu~|N8k4q}Guh_fP9(iwoed?vF-5QTK zckAR%EzaBHzoE&Aj16!8^v;Hr#k)3eoo;Vv^l`(I{>|H$6y5Dv;^;HH<b~_mB|ks+ zVu{?MNG|#Gw|7fEUcb7e;Tt6-`3ts{_|7^|^3vq;k{KD7O6rZfQ}V)BqASwj=L&aO zU1i;xxE`!&;aU`CbEPeA=X&~VwCh_(H&-?OZ_jhZkGcv@^m8qI@VIM&{}7jK9^rcS z+GrR4BZ6y8!4%hf-LqZR1G8Pi;JL1nqw`!xUzqPY(@b9I>bTPBGKVg4%~<@BtI6p? z*UgwBSLu{jT>)<>uD8~`;rjZUw_KyX{*Np1op)Wsa^7=cEL}&>uXMe!c$KSblaE~M z3O{z0-2B9~yx(e9#-h($#&w^&e%-OgwdDJ?uHf}wxY{rN(lzs6>s*iX>s^ySUhkUO z=POsUqhGm(Px#ukL_YVmOB`G5+H|1UwXORG*Mzq=xb9rt;M$*1;_5xW#Fe_S#PwlC ziR)Ywm+QMYm#Y9TfxhuCm+O&!E?1bt<$62B<yw8c#8v%GiL3m%64z&uC9e9rHn>)g z+~A7)qu8}-WU))!^|h;CyRTh8&iTrfuz9`fjXUdHo!hK)jp_BJOaAxJFI?@OTI-rN zWR2^wM?ZJDT7Bj!yY;EdT=t2p`yBiahz=jQ8Xj2X8Z+es*Ny7;U7_<<xR%^m?s{d? zyRJn){KwTe68|IOxi?);ZGGL9X;fT0dcNwK{#=pko6nZI*8cvot6%+>Tm{{ixO{#6 z0%|V2GZHGbZi&}I@X`leph82{SZH`eyUrauwrkg}ZCl2v`M{eEoIie^I|#oV8p7GQ zC@zlc!S&_RxJ(XjFL1TfB`$)C{+o0)znsYR=SKXg0JV5Km&~Pb>0H*IidPFyL{6$$ zzx<(?O{+8&`ADt#`0?Jixz(H-|9<@_caf{+{CSCw<NNX>_#A$T%&+9j_@jI^FA2#) zrtrG3L#P(w#4K^GScX?>YF}owKA2N0w{wYTdkR{g0R`u9i@0Una#XZ|+sYl}PH~l- zfe+@R_(VR9&*GQxAMrc*i+qsKLzswKb_)hEQOp(P+LhGpLK`|!?dD|kQ!3h<fmY>s zRj0PA0+ofJRVjQXs#?n*M1vxPG+~KQCUC4GwVpqfpTb7T(-u#sE$7yvB}cdl&dl4; zigZ4gUyi;i=Q%+V5`}ajS6GhX%Ta-ZD$>!K<zksKZ+%z`yi)Y1n*P63gz5XRilQ(H z;y6#M)Dc?3CPEo&lRqDgammG~?B%O4_I-scj7phsR<Me8v}IAv`2TJBvNi=g-KNg9 zgXp#(bXqPtj6-MT))@!yX;r&|+RG{zf`2!w<-eHLe>1DmVRf$B3e;Y=q`=?Idij4j z?J*m@)Tph1+5@^>AO&itOIYLjs*uS*jKB|0&*qkJE4ebR96$0c)t;??Tfl!KKVH`Q zO9f<DsQ>GAiJo|P1?nX3QDbP*(NNvgtmM{nJGj6<wO4uXCu5Voe^;Jvwmfr|mU<bC z)<sy6+MTBa=CufxA68nl*Yc`e(*MF}h~;cPc<QNT{{=2f8GWHeqax`|zg`|0+JyAE zP<y$1^zp1lD;9hT3~?c>V>xwF^WJ|~R1dF#^>q0LZZA5?A6C6TGqkJu-8^+sv-F3R z_5ZSql$c^$Fgn2e(82hBWABdC83cW&qir@9tB76l-_F%P&n?dg{G~ngvIJCx)hbz| zt%=qYYq~YdnrkhzF1N0=mRa{&%dHhwys*k!1Enx2MoN+fN~5Le(mZLY^q%yEv`N}0 z9hdN<df|e#ffO#qN<F1P(imxm^n&z?v_kq)+AQstPDs}zAzZXJlv+uhrAMW~(pV{5 z%9Dzu_oa2x7U_U=Qo1gQ;Rb7vWRv2gWGPk3kaDE?(lTkKv|g6BN(ZG=Ql(@F_pvsT zT1#D|UeXiNIBBM|KzddBK>AAhPC6w0A>ELC!j0C(QX8qO)LR-NjhALgFG{aTtE8`` zZPHKDY3Zh93^!SuNNuHVQXgrkG(mbsS|};fhf=Y$T{<kCk#0$*aI-a7ijeG5UnxzR zD9N*>MbhiiN74pqhjc_bD^*G6aQyVV6e&5Re$p^$lJu<Pl-`g&mP(}WrJtp9(rw8% z+|SxfYA3}@k4aBTlcndR#nPM7Cz4CrDg7dym+nY@;q|P|rS?*H>7UYY>1pZTQoi(- z^r=)T?UH_#E=YH!dg1=o5GhKQdPx1H5mKf!M_MAiEv=T^(r)RfbWy67{KM;8TSy(G zN2GsAPf1gx=cNMaKhkH?H_{&IH|dgePpTgtU~MUNl>Q+NkVZ;VrMc2e(mT@U(zntN z((lq`>An;YZn1_+oumZmacPt^O_HUTrFW$@(nje=>6mmyYV$y{gmZz`FexlLEHNx4 zEIlkMEH|t$Y<bw)u(GhdVdY^J`1!S>O^0l9ZbERcutZnR;=~)Bb|pT(+nn^$^o~h| z2}6=N4nNMj_0^;UPp(cn@YR;22RnXEy5g)%+H=d;({Q_CPs~DC!f0$HDR6wUu#XqQ z`B{tIoDU2X!h{$hNf;=M7N!gHgr&lJ!WY6OK?rOhgbT4kPhpTSMwlVIAPcVuD}*nF z&4L)%P-rD|79JG_3uA?BAx|h0-WS#hTLeR3kYE$y;CrSD8A6UQUsxur6xIt{1)so1 zLTjOm&`Wqi7$?jW76`8j9|&Iw-wDRR#zGsRtI%5*B8(Si2`>t-39E#!g>8ZfzlqdV z=qB_Lh6)n|`59rMpa>rd#lm*M92hJ_2zEF+X>dSi3ya|Hd?ajuyXza+REQKDLO)@c zFiCh;a0+h-9}6YI_kv$wGohUjFFYnZDNGig6BY|^3ZDorVW&_pu({A)z-@bBxbU>_ zZy{fJOZZeM6?O^!fgwT^oZSAx2pRtL9Jruw3#$b;JYLm+cs^@)aovus+nsg$ux`)Q z?Jr}XT)UfUcg{0V$BO+UnoHEq7`YtJ1#)3r441?W<VJJTxp^FZ7>En!V!58&AZ`qP z6X*p_<Qj6VxXv8@sRB2a%jWW64};*5#9_log?FBV6Ne9e0;)CF1^<VGdx9Is&Eytv zMy@f}hU?1p=7w<NxmnzcoQZ3~wdJ~TeYm0A1nwDbA^fahI5u{6q9TuGQBmNVp{+1= z%P@t@FqO+NZ8xg@S8Hl3fus0PIdNX@JZn<Q=EBWVQu^lQn+;*fE9S2V8k2f**-6`& zjFT%*n#208ShON|OxnrUPezQHc=Dr@d|=Wm^Ii!YH1NRE17U+kA9(M8Pi(Js3)VHt zexmZ#%GTNADnF?7jqSJ2xvpvUu*x?oBeN$}eq1R8_I%}qR~if&bl{Z(;e*B;SaHA@ z+go1u;=0D!Ln>dZY?D2{a#f{Y>|^T|uWOe5WaXQc?Xo9Veo{%Ad-PY^p?~HkP>hx< zAuU-#TDF9=bO~ws5~@p>V!4c_rHrEh$I*Ibh&4?}>za_(HX*HVLUoN(EElv|xr!85 zJC{&ZBsW1-BsW1-BsW1-BsW2`C6q@-1-S{N38AV8kSUUzpemA^pemA^pemA^pen*D z?Wwn3MO6ukQy@hMNfAO)gpd>=EKHDxum~z=NQzJbDZ&tn5RxK<qzEA?LP&}bB7aZ4 z`}NlAl@scL6rngNLimylO(;TLLP&}bk|Knp2tz1BNQw}WB7~#}At^#gis<97cfa0x zy>dc5$fOAo)Fp(Z2q7s#NQw}WA`GDjAt^#giV%__gro=|DWZ<MJ`vS<K)t269w@WS z#LxpNLUB@rkQ5;#MF>d|hERl%6d@!<2uTq_QiPBcQ74|h64Z%Eio7&kR=Zzsy<Rz? z9!L?2lOlwq2q7uL5Q-3zB7~#}At^#giV%__R2GLzMXUrF4AO)cG=7BCeT1YvA!R1i z11UmrQiPBcVF*PCNfAO)gpd>=Bt-~G5h{Ze!TP5NTS`n3qP2;{6d_vcMy3eSS|OB= z1yY3KqzFSOLP&}bk|Knp2q7s#h#>b=Gvg~(Y9Y)PP>&EziV#wd5RxK<)FXtX2q6_l zs0UJn;$%k%NfAO)gpd>=G~AXOY6|4`RJGTwp=yjs5#o~~gro=|DMCn!5RxK<qzEAu zPFNG52*pVeLQ;fqj|@#HLR~_L0(z>}4~nSW$gCk#1T<3w$P@uGMSx5ZAX5a$6ag|t zfK)b>rw678Xqjn(2z3c1GDU!-h&q1yexRCTQiS-V2q7s#NQw}WB7~#}At^#giV%__ z3{eMAW&|-v5kgXgkQ5;#MJSDCtBUG=K#CAeiV%__gro=|DMCn!5RxK<qzEA?a>Xel z0!@gaD?xDzqzEA?LP&}bj}%c+-H=ETqDc`#QiPBcAtXfzNfAO)gpd@e8GmAsB7}M` z=t>Ze0x3dBicp*sQBmCyNfDw+5kgXgkQ5;#MF>d|LQ+Jg2x&q{UBVEG5bDFA_kykj zrBNV7)Ih4}K0$7s9Z}zq^!-3L$IKe`W8F%cPywU}At}NTiV)VG2l_DRy`U-qx34kI zE~E){1R-?<A$0^Hbp#=G1R-?<A*x`gR<BzCeF1vrzb4Ck9pqu>Bto?w_&YMI=x-e! zRP^`$j;_3l|1*C^rWR=#8B&XgrVeF@4ke@x)q6+Ro{-WA^*}vGaq2lj>N!HHhmd-X zkm>=-9%G4$D1j={yI)1sEu@O{!U^?26;YfjBBY84sUkwEh>#k@5cLpJJ&*5})$vuw z`Jw&>6Q*=MP(>7{inM$TsUo7OB8I4lkSfyWkBVOIgznAh+UtcA>VYbvIJJn7Dk7wc z7@{IVs)%H1(y6FA&eU^6Q|}T|>j_CYHvW{E7<!<JC{7g-Qbi0=5g}DXGE|X@|7&l6 zdGo9yDu^m#h>8fQB2t2?QBhq9)FPtwi9{_Tnp#9i4I<PVL1huG2danS2fmU$+r3)3 zzLx(#?&hp<nyrwrw#kZ9iwLPjg!)X?Cz3wS`Y`Cdq_*PWyR|w@9%Do_)kCPSv}Dgx z@XS;a@E&KPsUkw^C5BLvki!4kkgCQPZTV{hiIJsr>IXvV2SQSh+CnpfA$250^gs=y zIJJ+E3LvBc2&n*)p#oG?tumz%tq00aamr6f`3WgMrBQxDa*NsVl?u=^5$b^opg0vk zNCl{^(zluax%p9hgKbahu~=`NuBBcXAyr1G2U36nwLnErw-W8$N}?%0A>}8efQFQ* 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 delta 7485 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 diff --git a/TMessagesProj/jni/ffmpeg/x86/libavformat.a b/TMessagesProj/jni/ffmpeg/x86/libavformat.a index a6743018d4655fb7952b0fb194ab53a9ddee13f4..00c5ac2ef37333869dbf106d552d190f614a99f0 100644 GIT binary patch delta 15057 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 delta 3819 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 T>v*n~c3z>y>g(7q|D5(;!jF8P diff --git a/TMessagesProj/jni/ffmpeg/x86/libavresample.a b/TMessagesProj/jni/ffmpeg/x86/libavresample.a index 5c8bc6263ba1d6299cc4e0576d2a7f4119062092..81563020cf8fbe4cce9cf851edba67236d39e097 100644 GIT binary patch delta 227 zcmeDA&35KD+XiDs(GCX2wLrY-4+QVXU|`&lF?}H~quAv4Oq|W>jN8*08Q)|vS(r=? zWLIZ0vD;pk!+2kXCBw+fbh`IM#tEFs`6;PIwuy<!)6Y+2tl&;b%`L5f2yC~V#CTYO ziN#_%(`v>=Oe;7i@2gf~%$a_2HKRJKkOl(-%Vfvv!qYj{Fbc4W!MO$?t`v}~HaYOI z@bm~Em&rk6vfXvD=?y?Oqr>!xYZ%qpme?{dOkkM&uSSWnX8J>*2vCA^Es#2}-Eb{q Gv;Y9`H%YPp delta 200 zcmX@}o2}<J+XiDsQ4a>jwLrXS4+QVfU|`&#F?}H~quAv4Oq|W>jN8*08Q)|v85v9t zWLIbUV!ORAhw;A3^x}z(b<^1<G3IP<pTxLRg6W9)bf?vfi<mMvC-19PV$_+=xrR}l z^^!UR1IuK`>%!AL)-VdNUW0QBK-^nEuG-|l$HLQR0J%&I8k6m=i%mZOWHT~MzX;UN imSW4mFo9w6zZxY*o9T*c8P$Ojo*=4Wd*NEfXaN8=&OrYF diff --git a/TMessagesProj/jni/ffmpeg/x86/libavutil.a b/TMessagesProj/jni/ffmpeg/x86/libavutil.a index 0b72b41459d51377af15a1b22f58dc37dfab3ea0..f03fd350b8cdd80ce9487349d5bc8baaf317103b 100644 GIT binary patch delta 328 zcmdnD%lh9g>kaJOp=Atw)ll3V#lQ!{-CYcPAUxq41W!w1-~-{=_aJzo9RnW-@0o-R zH^*?d$8a+OF%u9o12GE_vjQ<25VHd@2M}`tF&7Yn)bao^@AepOK8^6{4_sKZ7#D0` zpTu{7izUOz%yfEeF5d*s<ouM>BHP5o<mnG{`6{?mQgcfyAOhR{^Z33qGwE<__bB2E zV`JhFnZBTc?-WxQ$8-TDRwc%Y>HU>_>P!-%(|1(zsWGmYejmhL!!vzDB9j{9hUxlM zK<+i3=?1=xV$<`g_yiblOs@xuu{ww{FeFTmc41OxQsJ9^p$e$^%k=L+8OD(9^3{Cu FNdU=&WQ70# delta 303 zcmeyj%X;4~>kaJOp=Jzx)ll3l#lQ!{-ChiQAUt6k1W!|9-~-{=^B{P^KL$P!-V=lk zH^*?d$8a+OF%u9o12GE_vjQ<25VHd@2M}`tF&7Yn)bao^@AepOK8<ij!|4lUSTq?E zwy#g(JHR!)HJ7h$x<npd&i0vkd~cbV-mq`)DB=raV>%%`{XqraDJC(F=>kfuN{klM z&sXxPGu;rG{-csljWJ`od=-$J!!vzDB9j_p!Ss9(cN))h17Ak5>FcWa1Q=&b-wzaH lWe{axNSGe&!lcafgm=0?HBj@G>E_jZ>Wm`W<E#1PlK@PsS7rbJ diff --git a/TMessagesProj/jni/ffmpeg/x86/libswresample.a b/TMessagesProj/jni/ffmpeg/x86/libswresample.a index 45ee7954dba4d4d55b0149643899483b489d8fa4..00a5203be87be8052d2558e3dd8667c7a17c18c4 100644 GIT binary patch delta 600 zcmeydn|;R~_6h%GUobEpgyQo#42&Rr<qZSljT0a|J#iDGShEr1b|Xec`(P#ugURv1 znv83<&kbSJac0RdGBcgNeLCX=&gA@*)FRu&#N_GLGZ-tlQ&MwFD<A^fSI%H87G%=l zm@c=9@th(D4+9i%F<b?*43PM@f&7T+ysH`Y89S!i0x7{YNV2Sq3=9{h*RE#tuh-y3 z7@`Rj{(+=SAIOj4K**Z{`8`N{Yao9Q65kQXe}Tkz2l7QY5&C_Bd><r!Fe8HzLkE&T zBv8Q?Bz`=QufT;cAQi~>m|nXE=$#cv!nHu*6VvyuVU#!I;6|wK2MU`Y@uvd$B}n|) zK>n8PylWY|1sV5DpSh25K9fz_bgTW0L5!)>d-pRcGk%=DaX+IvD~A^Y1JC4*fx^>2 z>}M2Ul>l-DCO3W;o-T2KQGm(7Yx+GSMzQG*Kn`QT^uPm*>Wm>EN__eRkWj?*g+L*u zI<LufwqnyCfP@;Re*~#|GF|c@(0G+#28QpG6_+V9$%IVLI>@NTn6rK2LB@0$093_& A=Kufz delta 580 zcmYk&ODIHP6bJC{e>28o7BkV91)+&aO<^J=uPi(=iLqcq7G7m(A<Yc3nX)jt=}bvd zk{Am%S21SpZZ=*;5qXq_g#}S8h%=?;yLCF>@89`O_ul<O<JW;P_?x#Wp#RsYQy@_n zVS%eaqG)Xo);Sk67tr8Isj8`{RtG%}jB6`Ba5mFD!A}n%q|#&v!`gcYV;1GbNc~$l zDU4@||0hFS^66Fb4ckWUZIq&weB3PKrsT8%LIf$Yjn3(3DK6o7UveosH!XRslHDP> zmhF|?#NL$L!oHB~W}DKJ`#caX(JBRfJTM`7fc+qOh@D1}Fn`WyMskmj;{g4HkzXE{ z;suUBBrmZmq<^%`p3vMon76=7*GE`YzK3Wkif$CqaTIp!(pwY`L%faOTixx-qOusw zhAXC7o&C(BUZ(QeMt3e)X@&taEymzLcB19bSt7F0BS%VoyXvpAQi0A<BbDnswN8E9 a3{Txce5!>TcIDPXTRMv2)XsH`<o*F+6nudI diff --git a/TMessagesProj/jni/ffmpeg/x86/libswscale.a b/TMessagesProj/jni/ffmpeg/x86/libswscale.a index efdf8fce0ae6e64e6c532c96e0305f7de34e46fe..fb56c176cb76259a2d96296c7f34839ab04acf44 100644 GIT binary patch delta 594 zcma*gJxD@P7zW^Tj`w<wno$T9L5orn8HJb>QC83t4HD50M2ZOxMc_pc5*iX}kP?JG z8~RzAOwy(65(pVI1QoOf(cctJjYWNz0`Jh!ftQ!(<#0|i@2KP*g?Tn}L<Ikhy+DK( zSJVH~|3QTB`md~&*m{XkjMfH>gpn~uwZwSyw88D^&J?XqT2?=2c{(CR+}<8oIpb+l zXn7$V9S8<P@O8%HmWA+AEdDd7OBLQB=##p0$r~GJ8Hx{li)Pi~M}ACKUj_L+X41z9 z@tCUip#wUPqEkALp({H3(eFA>q2uQ2dvoYpokNTmNVf%|&wS5+VX0m`#EYb+>KwXP z=OTJhXBF+zJ$#BzsKFPWYoQxpmBc=shP)&un86C(lx(K~XqAPN-ov<7LlDy{0=qxs zITj-dyvd?XmJ~vyOufSfE~BVpLV-ae&NVo<Wr8>-wArn|CeF;GzzH_Z!ktk#<#dve Y+RV*}ZM$8rqX*E*@t=S?$wk-IH$FvpHUIzs delta 566 zcmX@IR=H)Z@`iY($Q%X^b|_XVVBi2@?Hj~n>pct{_7kw-<{eD!JD3=O7(_DzF$)m0 z0x{e69Zc*}5zL0>W|KGasxvlh{~N_VA!GXD!|Zj_&5p3=Y~Ox_U6F%v$@ZIP*u}*d z8>WAJ#NN*svAyvz`+COuH5?33z{Oz6#K7<ciEj_&D{vy@U4eWbB)&J0--5&s1oF2a z@xy_93oeBISRj825<i)Vftle0*Yr(K+2;jza3d5h1u8s%#9s~M|3Knz1oCxw5bC!B z`EQUc-V5a0Y+v|{eYGs3$8=v7j`@rd)8Ddi1T!7xnQqp@s>G-;J(ZP1opHhRUJ%7F zeJhC4n0^-`$jZi{&UBz?x*i*c8taiF1_qYNg37|vbJ#cpm`)T;uLB960Sc>4P6P_? z0SSL9ntl!_%=D#b`ZplW7%^RzokN{9poM{fZ}LSa;pqWU?1IyCfntmb+o!T~=${7w DqR4qD diff --git a/TMessagesProj/jni/ffmpeg/x86/libvpx.a b/TMessagesProj/jni/ffmpeg/x86/libvpx.a index 865f97cbc172cdece8d7a4783601977212c091e7..de3c1db956e3e77eaf8b9ff5d2e48cc129828333 100644 GIT binary patch delta 5387 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 delta 5397 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 Nn$qQp_bDUI{{mxb)9U~L diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libavcodec.a b/TMessagesProj/jni/ffmpeg/x86_64/libavcodec.a index 13d6c3ee02dc883c2605a97576d708d38c1bb31f..e54555cb9ba763fece219bf230287944bb32dc44 100644 GIT binary patch delta 252484 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 delta 6836 zcmciG3s_WD9suzFxpVK#z1#tY_wbS#7??r0&V$#G2$Ytj)Z(hEwy0pHXnqN5iZ3n{ z1-e?8+23~ELZeOdg;{&4WnKKzw9N{3-B!|wHY>kkT`WJBcCq$cW-wHIv}*VJew=$A z_kYg4=iD<hbe(yd9C@aR)Md(PDVc7QdKCEpXgUBM*a%SB;PH4Rz|FA!Re()4fGr0A zK4|>GM|v6HWYg94(2FU;)ctsKjsWRbT>|7X@*sulP5}9-$XDy=Qv;B}{BsSEt6(CJ z!DXaZfw@#>3CPSHU2ww|lmerwh`NYobt_!vx0^uog2ChU9WrR%?g7o`mK(w@Xa#m_ z^Tl?b0`{6@+K4{Neq6pA`pmZgr;=&D-!n&md%o0T&jH|W0-c;|16{ubCqUP4!zs}H zamCfWR{*-fd~p<Xsxw8`BwtUX{x&>!6s{<z7I@W|>K`mO0#6BJ8$8Z+gW%<3?*&Q* z(QX6Z*_JDN)(E}>?K}#;UVhOV;WBbC_zkq%2z~?j*LH#bfgUfp|KvxeZN1=s6^67P z2sk+E+T`nLbPL<a*EP!P96;cG#~|eROo$rW15tHdm)qS5Q5TbcD0qv7sOuD+(gJ-( z9EIqC?rnl-)r9IRE6j!H3*-Tr<(nY-(N2hN=z<~lH(qYx3K(*!8h|0HZTT0(3^BlE z;wM1NVB`UXrlE~sa?SG?(E_GR{cH`GZZi3zfR7#nlWKk8HN`Te&?oRL#2Q;5HX(R$ z&PIs6GWp7tlL{gBIPFCBSt`Vy<01CD6@!Wk>x4n2H$&W&OmjfoG@1UXNWEz+vy5Qb zes*xLb%I5;{{UDHHF?PWCj-*>536CIgvcJa$i#V&pjuOV!{ojoZxlkp0M==ZVBL}o z)|XpvHThO|aE<u#Ex*I74?y-lVjGhTR~739TfgK6unjlen8{sWqh#BR61Z*(3$`n1 z?F8G8C;vYe-Ox2j!`DDkZjTrJ{J)SHmk&v*Y4sj+8zAXM?B5DWhiHtekq4{%h7Rf{ zBHyZxl4l=*3zl?3@&J<NBzVdFCm=;_1u5@UkfzpxG~+BtB}G30`6hI-xDccj<sdz> z38dO4ke)aJ(gq%+UoQfwz8<9C=|S4z@ObrUklvteT4)>9ZHG%hdiN+uf6W7_eI7_3 zZv^SHW{|$Jfz(YK|GQE(Yu5DQ;`^r;&s?-{(fs0t_fMa(a26h1z)E{_LT0jiKMNnN zU0-Yp+B?<sc*J`D;pg|hoyD7#*}P*D!Ts@$A$vy^HEVI?A!oqexY>D{^%ZlA*LTi! zM5nr4eLw!ypZ}M2us7$yjwt1xQg+l#445aRkQO{sqYJ{8FL_ouag?2+QAQkNV>D#4 zGW9t7Btt&Lwk9?VqpC$C`4-I^c_S7bWqp)M9qgL~6Fb>ElzE-3LxV>O5{%e5D$anF z1r8o<L;Va`*J9$8-cQ+FLh5nEXYBW6BaZl-9gPit)*8@Za@YboeWCB@_9Wnk;~u8{ zo&20NVz1=l(H&<sVe5E@k?g~DqxDuaOmG;n`R55dR)4{|nN~mC_XV4cy~|>GWKXef z%vr+nOq~YD9E?rJ(pW1`{PFg+rWmE+6zk`sNlAC(ehhGs8Mv>VgetvXv*GcWWaKLF zyphx4K_mBok`vBxVz`0#j>?;u`%)d`DpM`opERTrqitMR_|{9BMH0204)X9G8#kSp zaHowM9lllYM)4+Ny{(Msn@EH7ToPoGx4INZByx7<un#_z$c0Am;>A(sdz-b0_#CYd zpL|LEa&LVBR-Gk5SpR-(uyQt$D@rCMIPn+U_oN9YPU1#0-_q+Rap}U+p`Q3zSXCVq zgDp}*I7vpoecDj0Yhw-AxJtug<5AAQ{4E*xedC+W{5Kgl|Ao-%xq=Pt-_s{J@~m&B zPkpf`kcnVNAd}9N+Hv1m-)zF;hACW*P@e6n?#6&M8k2H<3inO~o08&A#ay%2iB*;M zAT&J8Eyu{k+<#D7!u<iumvEL4`j4f)qyJ$VY3>N#UCu?4Q&_fyOCrIzuAB=ZHY7_q zBgQ{vkHku+{UjP*W3||^UFX2;ZDJr+Zs1ugS;qAW`QDK0uuNU*jS9<R?Q$+EvBg`_ z-`8t29|#<%eX2))y5DnQYrdBC4Fm$Mo@&U)wp>RH79r1us^zA>xd7;ocLs3U3N94g zyM`K(UCGrj3ufXOs~CdkS8{Vn0PZ<W$5UOwIk0)7pvM(22I$GNXr9A`VRM95k4IWr zJ^2L7UJMAsBX1??ag*ZIV{fHdkIf|(J+6^C3%bXI(yYwsabBZNk6kjChn=5@dNe)B z>anE7WI)sV9FHq1xyjfa?chl(`c`paqzg9}IKuGo`@|5^KlEhpEim*JIW)hijYN|s z*n#y+852pw;zVr*8s3X%u`@d%i_Af18JFWptXRK{F*0)qK6i*Nrrf!f;AaAuV8QKO z_jTAd%9=s;pmV9#ijF(2Mhv!_4VYU-XR&^cKsT4ATAt+Mx;w2I!eQ@K-AMkS%V3Ne ze4?7m#=;;gFSM$IqlYg#&)FQj)|1oW{(Vl9lJ*$ay9z&9$=H=5f9=iyCe^9<o3*nF zYTB1+DV@^3j4z$fq`Qz74^x(Y$)DVVWDT3bZ1lq+2SUP>ZJUJuaO5d$*dip82e566 z5JARZ7fs^r^zn>Z^&p$KmQ#DpTQ$<*Jv}sXvbV&I`7a35$Tr;mf?y^!`0fkBc#?wV z2EoJxeupC)gteG6lZ(gFFp<aJ24N;Sjr)f?ESdt%dw9DkCQNz$MZwH4rwLXpjva!X zFVTnN_?3o5<8dw+OX)J?)Me_#;;q6ioU%=@YXI)X&D(@9tluVd)7_J<h8A_1)ILL( z1pg7u?y%F|*pKLo9l_vtC+M<Fwgr1jMtVznVyt>Ryiu@V>m61bwrm$1#EECN3(pIs zde397!?K6O3~b#Y)RJ*X#>8dd$5WFyme!i^*_}cLiNUs=LJqkT19s6Q569623l5lg zQr<V2#EorgQR7EWp7h|JNLPkX@7>kj#;O%e43_T}T&y$G<;Ex4$uOp*wx(mZpmgl^ z$t@;_F(yDXhAb)`yEe;m%KOauyvJJntAB$90b+Ps6<r?}Cg|e<b2MtzLiYA%b*KYo zt1rY?k@&AILI`;t+XKWcjBp-T28vV2F8q6-_y|eD`+~%HhU>+uAaMfOjUNPwX0rCB zo*<E^uSX)*EoWGzH&|@a5-S!<aYlSMQuHG%u1mCsA)QW6>4_Ahc)?0%N<Gr(mO|h1 zUYp*C`4-VAOr{m;q`t1aW)a6}FwG_=D1|oBq{H$?`ZCwrMLqq1UTGJ@uux9WV-qci zi1fY+YNFbq-W)yB7(5*n9LkJhu);2eGSeCCNYjU6Zzf#{B~y4B&lyYikJUDH!>L+r z3&X6n43D*|Z3f)rp#Ak#z2m9sb%;i+Tx~Nd$xd;rj=YY}1!Q#Jo`6}IqMJDI;Y{%m zX-Bh<H3mEBKH$?`;n_(J(?xunxR`0G#B;Za`vmtRp7H`L9+nV;Cx(lYnc7E{^enN0 zFvqI#_anr|3H=t4Ez(V3k*DqbxPK*M($MccN`1EYiVL617KhbTmWh;JsVwvTx|wmM zVu56pYBmq^qx>lY6+i`2K~yjmLWNRcl#vRjBB)3zii)O&P%)HA**wfVe{2o=m|0;T zi`^sDL?4S)qL0NrP{pLCARUQ>iQ~;FSboB(SGuQI?$yy<MaeC;%pJ$Lo#=QxL8@tg z#iF#o694+sjKigt48waX?fHsdUcw?H<8q<FtW8!LixMj0nbb6eHVCX{(&-j!)=Em5 zkF_L1<8o*AWpVAJY>JW<Zw=%br$eDPJ0qM)@kFTUyvwR|-evQ-mq|<Q8(B^G1{;+~ z4W*K(WJ;ojDd8LJg{)Gg*x5-nB+j9bI4Aifli|5iaaK4_BxzDIGZe$i&bDBMJLsI~ rWSp6Oag|l)oO47b)pa5F6;br8t0Rj^cY4agZ+FG$mBR6^y7>PA3Op#{ diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libavformat.a b/TMessagesProj/jni/ffmpeg/x86_64/libavformat.a index 730d167d40bc12975f7f650d973c39100c6974b7..f8e543074866a0f629dd4c80d75f1d510a05ef84 100644 GIT binary patch delta 15058 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 delta 3591 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 diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libavresample.a b/TMessagesProj/jni/ffmpeg/x86_64/libavresample.a index 11b9ada0b437cdfed5ac10262b4bf798b0ae5a36..a2e5997b60101363191a4f0a04b21323c5fd55da 100644 GIT binary patch delta 172 zcmaF1nSI$7_6^*OoSPUJ&)#ETyu#Eh!nj?8k<qo5$;@K%e^!0Q3ER8t7-uN3WEh#5 zP8XcdIDs=cKP9!uHZd`I`qcT171QU>XXIc8^0qTCV02euys+K-2qQZq(=E=)2~}oH zMoQCrjxyRY-B6zNLT&n|ql^+v|CA>mtPq>Lu3BKa(J>&OL1ntnF`yCwm+3tqnn8W~ X86eHrF`fH3qdnt}?cT>3XA1!U>0Uc+ delta 148 zcmZ3sh5gxP_6^*OoJ9<bXXi06UOv<;!nj?8k<qo5$-rdte^!0QfbHFNj58FbTh3>! zn|@|KW6pNp1&p>Tj1#tZA7Nx?WSYe}Iibpo>67C0Ge;Tim}V$XdZ9Mm=oq5}(>~?N z2P?!Tud5cAUIgMFP@dj%45;LS^Yk+y`hePWp5u&mj2_dyk2BgcR&4J+&Ny2L0DbB< A8UO$Q diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libavutil.a b/TMessagesProj/jni/ffmpeg/x86_64/libavutil.a index 130af1e6a0f9a759d217c7a4e782a67ff42735cc..d982f1067737e0662d2db5916aae1af854a72421 100644 GIT binary patch delta 306 zcmY+)u}i~17zOaVB-*>0d{>m(+DR92ltLSeMEw)GI)+;5COQ=tQyg462m!yv!J)Is zcB?qMxH#CQ5rhnC(oLNFY$qT5cszJ<<mHhUN3s<#n3A8-jN(0}3PYxxn5mTyrfOoY zIb!O+%T!*ak`sfN#3Bo1krap^f1e^*A~tb!Dxv#iwi@*?Xm9gW4_=^Dw0iYs11~0U zEjuSi-80YkJ7^}*M<)Sc($c31D2uoC;2kOgZ^xF<cb{;;`8g(E;PMHsWw6f!Jft$p zHr`kGCO%|PHFoWA<8c-947M<MGX$>Zup__AY?d7TvFXabGoK+o54mfU0AF+1GpftF IHietxUuWTG3IG5A delta 275 zcmeyc-gW~BaauYs@O=d0UnyYB&#1w`&+fy(&s)I2FT93<U-AS5o24-DqvGZlob4|- z8G)Dyh?#+y1&CRJm<@>8ftUk`L29^wm>Y<BfS7mt3r@b&Gt3qi7SlgWWHsF0c#Thh zYx?pBe09^U9`faE-~Et}m4#7Y`@yGt;v9?~+i$+*b7y3<ny&bs&zy0=^vL&o_KXhG zXM(7!(-W_;s!#jCC&Bo8y5dz<_2~{k_T>4$*r&&T;Iri1A<6&-AEqbXW;W-v;DvA} cPrum1XwGzjce>O^K0Brxg4?4$@=Z$v0F~TbNdN!< diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libswresample.a b/TMessagesProj/jni/ffmpeg/x86_64/libswresample.a index ce72751442e94969d9b68dd5502f9a956abc1d24..230a286976bdb08dac739b13dc37cb961576f02f 100644 GIT binary patch delta 600 zcmZ8eJxD@f6n#f6zLy%lg3Kt=C7Q~D(j|0Cga)I<DUb}D`WwQbL2+m+<we&qhft!S z8hWNnO)U+*EhzPk1r4=C&`_WD3f}wRa=7Q*b1vMknq!|imVcDe0yJK44gnu=0bh5r zf8LYpg3<-NtXYG8znryABBS^=kO|mQ)3Y<QUq)VBSx>HR%_R~m)L%iGMk-)d-YMA% zMtc!cN|y-06LtuO_uA>0kfL`5ZsbX<B7$pL<S_JX8XiV_nh7o^T~x6hO*su&LRi;> zCVpP$Gt4-@pz~+6c?EY=Gs*G4b)wO>tn*<LpVav@sXWeeW|B8_StHcA9P2Tr?)<x_ zYKTY=Ci#F$+(kz<FiX%*CpAn+DZ4S^lu(EJunvZ2MXcl2%MYqP;+y}6`h;D}v6J@t zFh-dMToh}9QL%v_iljCWLWQIz2Y&oEXjI@}=?=-~;{)>jl8Zi@7!+CPcV}LfZrtQ= X!HY00wz#24g*L=V?SLX_DEoc@-}8Si delta 580 zcmZ9IKS%;m9LL|+5>C_bf;x=`UE-$x5admEEsD{Qv^X^tG(=oWQ-tBr5}{o1b9B?8 z#ihG+silG%ytz(oEP|jRgoe7aE4X{``0~D=-}n0-uV3W!B3F9kC5E20-yax0qYPgs z>RdWj^h5IlFS|p@g+=vfcowpjP*6ycR>L8!)Ul)8*D*edi1vJeBw{SYT<dLc;+RPD zIs~jyR!0T}DqAvH_Y6<Lp5|CPL?1f#vtroQ#bk%~J-M{w%ba_D)$tW-TtdiJJvje& zoyXsBd=_xmZ92Y0d=o-U@nFTlRa&-jB<M~b{HOPt$iylheCA-C3@h#H2kEtm8D1Q5 zx11B-f<ST$9O_!Oh1<CGsr(bZVLi*lv2QC(r(>9=D-#jOWSCe&p7@R>+my3}+9o)v zbReNhhGqC}Qffn-P}}PflDdcn?oz*(mQ?;)Af<~q7?rz&BEyy_@jY9#To1Lx4;;{Q A_y7O^ diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libswscale.a b/TMessagesProj/jni/ffmpeg/x86_64/libswscale.a index afb1f7ffa79e7e3a03b84d37833db5c2e20481a7..3187be8df627afc243bd2461d368dfe90e5cafed 100644 GIT binary patch delta 720 zcmZ9{PbdUY90%}uZ+Fda7E!c@!p5dV`IG;pot%`5KgAx{-C5M8HgeF0tdc(m2b%Je z10_XHo6?B#r}iMF)Z*e#&KxK=2fQ^e>`Z<8z2E0I^WK~FOV{J2D_TZNKLk)&B2xm) zuKi_^^~=xygK9bC&V=ZEh!U1WwXj%OY%D2yh>C4Hmd45&d{v=>9Oy5*qNm#$tgfrY zDgsMV|M0-zXtS#J<352fo)7>F>-1s@m_y$5qg*H?tls584~;k_A?fL)i57&Q$vxax zP44A>Zt?-{f<0+_VTgOB;Vr+@5k5FDeK5vdPW^rLXEDh=tiR`jNFs7t@;t`p?IyqA zzF_hz?x!Zd<sLNM>z@0$aWCzrF+*P{gv|z`=w%+*wvr``_rezy*6_Ly=BO`y#U&Ns zxEEwHjhYwSM8SBX1To78ZmCr@{$K~cilrPJ^?}p=#?2{UbkpX*J%%(hfKSV$1V4Nr z)9ireFDk(%KU+5iv<}6A$6K~c9A{ux0>+jKu(KW7XA$5bb25T)KRa=H$QZ|QV+!ht b2fI{o+rtxv$|6R$Yz25S2BLnZ!b9vE|G$Y6 delta 698 zcmZ9`JxIeq6bJCT)0)?)C{$`np%p2mqM)E)b<p4>xcC8D1zS^`ss$$z6)T7zgAS76 z;UXx4#VNQ1I!K2OA`}XK;NaJ;gE%UvS97S%!Jl{cdzZX>$OrcG0i&5UWe8|IsU8CB z6Mxy}=iQV4!Gjj?tR>lIl2M*wE#oQYaqv`_NhS@X%fcOP*cyjcx?nz^NRd$-r?7%A z6lVDa*r}(6`QZUS<<;wjF_wA)QnH3w@dza3EMXE69<g~;_?FG5g=cM^5dLa;-|v(; z(O8gw>1Q)9{MP2n!oy~}4<wqptt|a6C;GKjrG6p2-{uA3t2Vz89<t596TW55)vvp1 z%yT~+hAA;;B5+(z2hlYNUo5+aby3)0{%TYMP9J8XpimVrqtHtUx?;S9aD*2pXx3BH z*c))x<7o^UWJ6d3LF3Tj#y5_vpyAUl4Py5cDC|npry7H}SlqvB`jG0zvm-|>W;n<s zZv9e);&8YA*$DW~8?+5w8Xu`9to|iFu0SVMQ0FR#mn>BzG>#lT{F(>Jq;a^<eFLLz Be8m6& diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libvpx.a b/TMessagesProj/jni/ffmpeg/x86_64/libvpx.a index 21e46183de060a1231427f6e9b8bec0fb0bdf96b..bd0383e8060ef9b64d019d3c0a016e92d4c50f36 100644 GIT binary patch delta 5563 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 delta 5552 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 U-9=H~_02|oEWGQAec`D80H%SOQUCw| diff --git a/TMessagesProj/jni/tgnet/ApiScheme.cpp b/TMessagesProj/jni/tgnet/ApiScheme.cpp index 2e0f88ad88a..fa2d2dd1601 100644 --- a/TMessagesProj/jni/tgnet/ApiScheme.cpp +++ b/TMessagesProj/jni/tgnet/ApiScheme.cpp @@ -528,6 +528,9 @@ void TL_user::readParams(NativeByteBuffer *stream, int32_t instanceNum, bool &er profile_color_color = stream->readInt32(&error); profile_color_background_emoji_id = stream->readInt64(&error); } + if ((flags2 & 4096) != 0) { + bot_active_users = stream->readInt32(&error); + } } void TL_user::serializeToStream(NativeByteBuffer *stream) { @@ -605,6 +608,9 @@ void TL_user::serializeToStream(NativeByteBuffer *stream) { stream->writeInt32(profile_color_color); stream->writeInt32(profile_color_background_emoji_id); } + if ((flags2 & 4096) != 0) { + stream->writeInt32(bot_active_users); + } } InputPeer *InputPeer::TLdeserialize(NativeByteBuffer *stream, uint32_t constructor, int32_t instanceNum, bool &error) { diff --git a/TMessagesProj/jni/tgnet/ApiScheme.h b/TMessagesProj/jni/tgnet/ApiScheme.h index 4a7659ac4ff..a883738dbee 100644 --- a/TMessagesProj/jni/tgnet/ApiScheme.h +++ b/TMessagesProj/jni/tgnet/ApiScheme.h @@ -388,6 +388,7 @@ class User : public TLObject { int64_t color_background_emoji_id; int32_t profile_color_color; int64_t profile_color_background_emoji_id; + int32_t bot_active_users; static User *TLdeserialize(NativeByteBuffer *stream, uint32_t constructor, int32_t instanceNum, bool &error); }; @@ -404,7 +405,7 @@ class TL_userEmpty : public User { class TL_user : public User { public: - static const uint32_t constructor = 0x215c4438; + static const uint32_t constructor = 0x83314fca; void readParams(NativeByteBuffer *stream, int32_t instanceNum, bool &error); void serializeToStream(NativeByteBuffer *stream); diff --git a/TMessagesProj/src/main/AndroidManifest.xml b/TMessagesProj/src/main/AndroidManifest.xml index be5cda36858..32526988c07 100644 --- a/TMessagesProj/src/main/AndroidManifest.xml +++ b/TMessagesProj/src/main/AndroidManifest.xml @@ -102,7 +102,10 @@ android:requestLegacyExternalStorage="true" android:preserveLegacyExternalStorage="true" android:allowAudioPlaybackCapture="true" - tools:replace="android:supportsRtl"> + tools:replace="android:supportsRtl" + android:usesCleartextTraffic="true" + > + <!-- usesCleartextTraffic for browser supporting opening http:// links --> <activity-alias android:enabled="true" @@ -255,6 +258,12 @@ <data android:host="t.me" android:scheme="http" /> <data android:host="t.me" android:scheme="https" /> </intent-filter> + <intent-filter android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:priority="1"> + <action android:name="android.intent.action.VIEW"/> + <category android:name="android.intent.category.DEFAULT" /> + <category android:name="android.intent.category.BROWSABLE" /> + <data android:scheme="tonsite" /> + </intent-filter> <intent-filter android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:priority="1"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> diff --git a/TMessagesProj/src/main/assets/currencies.json b/TMessagesProj/src/main/assets/currencies.json index 25205f65869..b80d598b700 100644 --- a/TMessagesProj/src/main/assets/currencies.json +++ b/TMessagesProj/src/main/assets/currencies.json @@ -1 +1 @@ -{"AED":{"code":"AED","title":"United Arab Emirates Dirham","symbol":"AED","native":"د.إ.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"367","max_amount":"3673095"},"AFN":{"code":"AFN","title":"Afghan Afghani","symbol":"AFN","native":"؋","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"8729","max_amount":"87299487"},"ALL":{"code":"ALL","title":"Albanian Lek","symbol":"ALL","native":"Lek","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":false,"exp":2,"min_amount":"11842","max_amount":"118421187"},"AMD":{"code":"AMD","title":"Armenian Dram","symbol":"AMD","native":"դր.","thousands_sep":",","decimal_sep":".","symbol_left":false,"space_between":true,"exp":2,"min_amount":"40943","max_amount":"409436718"},"ARS":{"code":"ARS","title":"Argentine Peso","symbol":"ARS","native":"$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"exp":2,"min_amount":"14706","max_amount":"147065012"},"AUD":{"code":"AUD","title":"Australian Dollar","symbol":"AU$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"154","max_amount":"1541535"},"AZN":{"code":"AZN","title":"Azerbaijani Manat","symbol":"AZN","native":"ман.","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"170","max_amount":"1702860"},"BAM":{"code":"BAM","title":"Bosnia & Herzegovina Convertible Mark","symbol":"BAM","native":"KM","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"199","max_amount":"1990677"},"BDT":{"code":"BDT","title":"Bangladeshi Taka","symbol":"BDT","native":"৳","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"10009","max_amount":"100094046"},"BGN":{"code":"BGN","title":"Bulgarian Lev","symbol":"BGN","native":"лв.","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"199","max_amount":"1993852"},"BND":{"code":"BND","title":"Brunei Dollar","symbol":"BND","native":"$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":false,"exp":2,"min_amount":"142","max_amount":"1421883"},"BOB":{"code":"BOB","title":"Bolivian Boliviano","symbol":"BOB","native":"Bs","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"exp":2,"min_amount":"683","max_amount":"6832607"},"BRL":{"code":"BRL","title":"Brazilian Real","symbol":"R$","native":"R$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"exp":2,"min_amount":"539","max_amount":"5397297"},"BYN":{"code":"BYN","title":"Belarusian ruble","symbol":"BYN","native":"BYN","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"249","max_amount":"2495801"},"CAD":{"code":"CAD","title":"Canadian Dollar","symbol":"CA$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"137","max_amount":"1371480"},"CHF":{"code":"CHF","title":"Swiss Franc","symbol":"CHF","native":"CHF","thousands_sep":"'","decimal_sep":".","symbol_left":false,"space_between":true,"exp":2,"min_amount":"97","max_amount":"976430"},"CLP":{"code":"CLP","title":"Chilean Peso","symbol":"CLP","native":"$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"exp":0,"min_amount":"963","max_amount":"9637500"},"CNY":{"code":"CNY","title":"Chinese Renminbi Yuan","symbol":"CN¥","native":"CN¥","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"711","max_amount":"7113300"},"COP":{"code":"COP","title":"Colombian Peso","symbol":"COP","native":"$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"exp":2,"min_amount":"452870","max_amount":"4528700000"},"CRC":{"code":"CRC","title":"Costa Rican Colón","symbol":"CRC","native":"₡","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":false,"exp":2,"min_amount":"62506","max_amount":"625061070"},"CZK":{"code":"CZK","title":"Czech Koruna","symbol":"CZK","native":"Kč","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"2503","max_amount":"25036400"},"DKK":{"code":"DKK","title":"Danish Krone","symbol":"DKK","native":"kr","thousands_sep":"","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"758","max_amount":"7587520"},"DOP":{"code":"DOP","title":"Dominican Peso","symbol":"DOP","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"5275","max_amount":"52757308"},"DZD":{"code":"DZD","title":"Algerian Dinar","symbol":"DZD","native":"د.ج.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"14035","max_amount":"140351015"},"EGP":{"code":"EGP","title":"Egyptian Pound","symbol":"EGP","native":"ج.م.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"1954","max_amount":"19544296"},"ETB":{"code":"ETB","title":"Ethiopian Birr","symbol":"ETB","native":"ብር","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"5224","max_amount":"52247069"},"EUR":{"code":"EUR","title":"Euro","symbol":"€","native":"€","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"102","max_amount":"1020295"},"GBP":{"code":"GBP","title":"British Pound","symbol":"£","native":"£","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"90","max_amount":"901955"},"GEL":{"code":"GEL","title":"Georgian Lari","symbol":"GEL","native":"GEL","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"283","max_amount":"2830146"},"GTQ":{"code":"GTQ","title":"Guatemalan Quetzal","symbol":"GTQ","native":"Q","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"778","max_amount":"7781323"},"HKD":{"code":"HKD","title":"Hong Kong Dollar","symbol":"HK$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"784","max_amount":"7849850"},"HNL":{"code":"HNL","title":"Honduran Lempira","symbol":"HNL","native":"L","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"2441","max_amount":"24413729"},"HRK":{"code":"HRK","title":"Croatian Kuna","symbol":"HRK","native":"kn","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"768","max_amount":"7681499"},"HUF":{"code":"HUF","title":"Hungarian Forint","symbol":"HUF","native":"Ft","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"42967","max_amount":"429670063"},"IDR":{"code":"IDR","title":"Indonesian Rupiah","symbol":"IDR","native":"Rp","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":false,"exp":2,"min_amount":"1523720","max_amount":"15237200000"},"ILS":{"code":"ILS","title":"Israeli New Sheqel","symbol":"₪","native":"₪","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"356","max_amount":"3564105"},"INR":{"code":"INR","title":"Indian Rupee","symbol":"₹","native":"₹","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"8155","max_amount":"81553202"},"ISK":{"code":"ISK","title":"Icelandic Króna","symbol":"ISK","native":"kr","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"exp":0,"min_amount":"143","max_amount":"1431502"},"JMD":{"code":"JMD","title":"Jamaican Dollar","symbol":"JMD","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"15013","max_amount":"150131044"},"JPY":{"code":"JPY","title":"Japanese Yen","symbol":"¥","native":"¥","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":0,"min_amount":"144","max_amount":"1447309"},"KES":{"code":"KES","title":"Kenyan Shilling","symbol":"KES","native":"Ksh","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"12080","max_amount":"120800507"},"KGS":{"code":"KGS","title":"Kyrgyzstani Som","symbol":"KGS","native":"KGS","thousands_sep":" ","decimal_sep":"-","symbol_left":false,"space_between":true,"exp":2,"min_amount":"8018","max_amount":"80182900"},"KRW":{"code":"KRW","title":"South Korean Won","symbol":"₩","native":"₩","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":0,"min_amount":"1430","max_amount":"14308699"},"KZT":{"code":"KZT","title":"Kazakhstani Tenge","symbol":"KZT","native":"₸","thousands_sep":" ","decimal_sep":"-","symbol_left":true,"space_between":false,"exp":2,"min_amount":"47186","max_amount":"471867112"},"LBP":{"code":"LBP","title":"Lebanese Pound","symbol":"LBP","native":"ل.ل.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"150999","max_amount":"1509998778"},"LKR":{"code":"LKR","title":"Sri Lankan Rupee","symbol":"LKR","native":"රු.","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"35546","max_amount":"355469651"},"MAD":{"code":"MAD","title":"Moroccan Dirham","symbol":"MAD","native":"د.م.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"1093","max_amount":"10938136"},"MDL":{"code":"MDL","title":"Moldovan Leu","symbol":"MDL","native":"MDL","thousands_sep":",","decimal_sep":".","symbol_left":false,"space_between":true,"exp":2,"min_amount":"1926","max_amount":"19264439"},"MNT":{"code":"MNT","title":"Mongolian Tögrög","symbol":"MNT","native":"MNT","thousands_sep":" ","decimal_sep":",","symbol_left":true,"space_between":false,"exp":2,"min_amount":"322444","max_amount":"3224442056"},"MUR":{"code":"MUR","title":"Mauritian Rupee","symbol":"MUR","native":"MUR","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"4514","max_amount":"45142537"},"MVR":{"code":"MVR","title":"Maldivian Rufiyaa","symbol":"MVR","native":"MVR","thousands_sep":",","decimal_sep":".","symbol_left":false,"space_between":true,"exp":2,"min_amount":"1545","max_amount":"15459951"},"MXN":{"code":"MXN","title":"Mexican Peso","symbol":"MX$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"2018","max_amount":"20186299"},"MYR":{"code":"MYR","title":"Malaysian Ringgit","symbol":"MYR","native":"RM","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"464","max_amount":"4641025"},"MZN":{"code":"MZN","title":"Mozambican Metical","symbol":"MZN","native":"MTn","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"6382","max_amount":"63829680"},"NGN":{"code":"NGN","title":"Nigerian Naira","symbol":"NGN","native":"₦","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"43203","max_amount":"432039540"},"NIO":{"code":"NIO","title":"Nicaraguan Córdoba","symbol":"NIO","native":"C$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"3556","max_amount":"35566412"},"NOK":{"code":"NOK","title":"Norwegian Krone","symbol":"NOK","native":"kr","thousands_sep":" ","decimal_sep":",","symbol_left":true,"space_between":true,"exp":2,"min_amount":"1072","max_amount":"10724875"},"NPR":{"code":"NPR","title":"Nepalese Rupee","symbol":"NPR","native":"नेरू","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"12954","max_amount":"129546657"},"NZD":{"code":"NZD","title":"New Zealand Dollar","symbol":"NZ$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"174","max_amount":"1748790"},"PAB":{"code":"PAB","title":"Panamanian Balboa","symbol":"PAB","native":"B\/.","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"98","max_amount":"988722"},"PEN":{"code":"PEN","title":"Peruvian Nuevo Sol","symbol":"PEN","native":"S\/.","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"390","max_amount":"3902208"},"PHP":{"code":"PHP","title":"Philippine Peso","symbol":"PHP","native":"₱","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"5865","max_amount":"58658497"},"PKR":{"code":"PKR","title":"Pakistani Rupee","symbol":"PKR","native":"₨","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"22642","max_amount":"226426805"},"PLN":{"code":"PLN","title":"Polish Złoty","symbol":"PLN","native":"zł","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"495","max_amount":"4950459"},"PYG":{"code":"PYG","title":"Paraguayan Guaraní","symbol":"PYG","native":"₲","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"exp":0,"min_amount":"6977","max_amount":"69772317"},"QAR":{"code":"QAR","title":"Qatari Riyal","symbol":"QAR","native":"ر.ق.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"364","max_amount":"3641013"},"RON":{"code":"RON","title":"Romanian Leu","symbol":"RON","native":"RON","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"504","max_amount":"5049800"},"RSD":{"code":"RSD","title":"Serbian Dinar","symbol":"RSD","native":"дин.","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"11968","max_amount":"119684977"},"RUB":{"code":"RUB","title":"Russian Ruble","symbol":"RUB","native":"₽","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"7146","max_amount":"71468755"},"SAR":{"code":"SAR","title":"Saudi Riyal","symbol":"SAR","native":"ر.س.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"375","max_amount":"3758389"},"SEK":{"code":"SEK","title":"Swedish Krona","symbol":"SEK","native":"kr","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"1118","max_amount":"11187065"},"SGD":{"code":"SGD","title":"Singapore Dollar","symbol":"SGD","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"143","max_amount":"1433860"},"THB":{"code":"THB","title":"Thai Baht","symbol":"฿","native":"฿","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"3798","max_amount":"37980185"},"TJS":{"code":"TJS","title":"Tajikistani Somoni","symbol":"TJS","native":"TJS","thousands_sep":" ","decimal_sep":";","symbol_left":false,"space_between":true,"exp":2,"min_amount":"975","max_amount":"9753854"},"TRY":{"code":"TRY","title":"Turkish Lira","symbol":"TRY","native":"TL","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"1853","max_amount":"18536199"},"TTD":{"code":"TTD","title":"Trinidad and Tobago Dollar","symbol":"TTD","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"672","max_amount":"6722681"},"TWD":{"code":"TWD","title":"New Taiwan Dollar","symbol":"NT$","native":"NT$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"3174","max_amount":"31744503"},"TZS":{"code":"TZS","title":"Tanzanian Shilling","symbol":"TZS","native":"TSh","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"233200","max_amount":"2332000058"},"UAH":{"code":"UAH","title":"Ukrainian Hryvnia","symbol":"UAH","native":"₴","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":false,"exp":2,"min_amount":"3633","max_amount":"36338830"},"UGX":{"code":"UGX","title":"Ugandan Shilling","symbol":"UGX","native":"USh","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":0,"min_amount":"3816","max_amount":"38166726"},"USD":{"code":"USD","title":"United States Dollar","symbol":"$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"exp":2,"min_amount":"100","max_amount":1000000},"UYU":{"code":"UYU","title":"Uruguayan Peso","symbol":"UYU","native":"$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"exp":2,"min_amount":"4080","max_amount":"40801205"},"UZS":{"code":"UZS","title":"Uzbekistani Som","symbol":"UZS","native":"UZS","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"exp":2,"min_amount":"1089058","max_amount":"10890583014"},"VND":{"code":"VND","title":"Vietnamese Đồng","symbol":"₫","native":"₫","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"exp":0,"min_amount":"23870","max_amount":"238700000"},"YER":{"code":"YER","title":"Yemeni Rial","symbol":"YER","native":"ر.ي.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"25031","max_amount":"250319621"},"ZAR":{"code":"ZAR","title":"South African Rand","symbol":"ZAR","native":"R","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"exp":2,"min_amount":"1801","max_amount":"18018198"}} \ No newline at end of file +{"AED":{"code":"AED","title":"United Arab Emirates Dirham","symbol":"AED","native":"د.إ.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"367","max_amount":"3673042"},"AFN":{"code":"AFN","title":"Afghan Afghani","symbol":"AFN","native":"؋","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"7032","max_amount":"70320011"},"ALL":{"code":"ALL","title":"Albanian Lek","symbol":"ALL","native":"Lek","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"9170","max_amount":"91699858"},"AMD":{"code":"AMD","title":"Armenian Dram","symbol":"AMD","native":"դր.","thousands_sep":",","decimal_sep":".","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"38438","max_amount":"384379435"},"ARS":{"code":"ARS","title":"Argentine Peso","symbol":"ARS","native":"$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"93241","max_amount":"932408369"},"AUD":{"code":"AUD","title":"Australian Dollar","symbol":"AU$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"154","max_amount":"1535627"},"AZN":{"code":"AZN","title":"Azerbaijani Manat","symbol":"AZN","native":"ман.","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"170","max_amount":"1703970"},"BAM":{"code":"BAM","title":"Bosnia & Herzegovina Convertible Mark","symbol":"BAM","native":"KM","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"179","max_amount":"1790780"},"BDT":{"code":"BDT","title":"Bangladeshi Taka","symbol":"BDT","native":"৳","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"11644","max_amount":"116440049"},"BGN":{"code":"BGN","title":"Bulgarian Lev","symbol":"BGN","native":"лв.","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"179","max_amount":"1790871"},"BHD":{"code":"BHD","title":"Bahraini dinar","symbol":"BHD","native":"د.ب.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":3,"min_amount":"377","max_amount":"3765970"},"BND":{"code":"BND","title":"Brunei Dollar","symbol":"BND","native":"$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"132","max_amount":"1319416"},"BOB":{"code":"BOB","title":"Bolivian Boliviano","symbol":"BOB","native":"Bs","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"685","max_amount":"6847960"},"BRL":{"code":"BRL","title":"Brazilian Real","symbol":"R$","native":"R$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"570","max_amount":"5700224"},"BYN":{"code":"BYN","title":"Belarusian ruble","symbol":"BYN","native":"BYN","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"324","max_amount":"3242595"},"CAD":{"code":"CAD","title":"Canadian Dollar","symbol":"CA$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"139","max_amount":"1387250"},"CHF":{"code":"CHF","title":"Swiss Franc","symbol":"CHF","native":"CHF","thousands_sep":"'","decimal_sep":".","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"86","max_amount":"858080"},"CLP":{"code":"CLP","title":"Chilean Peso","symbol":"CLP","native":"$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":0,"min_amount":"944","max_amount":"9438172"},"CNY":{"code":"CNY","title":"Chinese Renminbi Yuan","symbol":"CN¥","native":"CN¥","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"716","max_amount":"7159204"},"COP":{"code":"COP","title":"Colombian Peso","symbol":"COP","native":"$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"405201","max_amount":"4052007508"},"CRC":{"code":"CRC","title":"Costa Rican Colón","symbol":"CRC","native":"₡","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"51870","max_amount":"518701644"},"CZK":{"code":"CZK","title":"Czech Koruna","symbol":"CZK","native":"Kč","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"2323","max_amount":"23232104"},"DKK":{"code":"DKK","title":"Danish Krone","symbol":"DKK","native":"kr","thousands_sep":"","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"684","max_amount":"6838604"},"DOP":{"code":"DOP","title":"Dominican Peso","symbol":"DOP","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"5895","max_amount":"58947947"},"DZD":{"code":"DZD","title":"Algerian Dinar","symbol":"DZD","native":"د.ج.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"13411","max_amount":"134106121"},"EGP":{"code":"EGP","title":"Egyptian Pound","symbol":"EGP","native":"ج.م.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"4863","max_amount":"48626104"},"ETB":{"code":"ETB","title":"Ethiopian Birr","symbol":"ETB","native":"ብር","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"8025","max_amount":"80247402"},"EUR":{"code":"EUR","title":"Euro","symbol":"€","native":"€","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"92","max_amount":"915704"},"GBP":{"code":"GBP","title":"British Pound","symbol":"£","native":"£","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"78","max_amount":"780853"},"GEL":{"code":"GEL","title":"Georgian Lari","symbol":"GEL","native":"GEL","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"271","max_amount":"2705040"},"GHS":{"code":"GHS","title":"Ghanaian cedi","symbol":"GHS","native":"GHS","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"1541","max_amount":"15410887"},"GTQ":{"code":"GTQ","title":"Guatemalan Quetzal","symbol":"GTQ","native":"Q","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"768","max_amount":"7680264"},"HKD":{"code":"HKD","title":"Hong Kong Dollar","symbol":"HK$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"781","max_amount":"7807950"},"HNL":{"code":"HNL","title":"Honduran Lempira","symbol":"HNL","native":"L","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"2453","max_amount":"24532344"},"HRK":{"code":"HRK","title":"Croatian Kuna","symbol":"HRK","native":"kn","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"691","max_amount":"6907950"},"HUF":{"code":"HUF","title":"Hungarian Forint","symbol":"HUF","native":"Ft","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"36510","max_amount":"365103831"},"IDR":{"code":"IDR","title":"Indonesian Rupiah","symbol":"IDR","native":"Rp","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"1617595","max_amount":"16175950000"},"ILS":{"code":"ILS","title":"Israeli New Sheqel","symbol":"₪","native":"₪","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"380","max_amount":"3799935"},"INR":{"code":"INR","title":"Indian Rupee","symbol":"₹","native":"₹","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"8377","max_amount":"83767350"},"IQD":{"code":"IQD","title":"Iraqi dinar","symbol":"IQD","native":"د.ع.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":3,"min_amount":"1298173","max_amount":"12981733280"},"IRR":{"code":"IRR","title":"Iranian rial","symbol":"IRR","native":"ريال","thousands_sep":",","decimal_sep":"\/","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"4210500","max_amount":"42105000352"},"ISK":{"code":"ISK","title":"Icelandic Króna","symbol":"ISK","native":"kr","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":0,"min_amount":"138","max_amount":"1379504"},"JMD":{"code":"JMD","title":"Jamaican Dollar","symbol":"JMD","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"15504","max_amount":"155042805"},"JOD":{"code":"JOD","title":"Jordanian dinar","symbol":"JOD","native":"JOD","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":3,"min_amount":"709","max_amount":"7087040"},"JPY":{"code":"JPY","title":"Japanese Yen","symbol":"¥","native":"¥","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":0,"min_amount":"147","max_amount":"1465950"},"KES":{"code":"KES","title":"Kenyan Shilling","symbol":"KES","native":"Ksh","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"12883","max_amount":"128828458"},"KGS":{"code":"KGS","title":"Kyrgyzstani Som","symbol":"KGS","native":"KGS","thousands_sep":" ","decimal_sep":"-","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"8403","max_amount":"84030384"},"KRW":{"code":"KRW","title":"South Korean Won","symbol":"₩","native":"₩","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":0,"min_amount":"1358","max_amount":"13581650"},"KZT":{"code":"KZT","title":"Kazakhstani Tenge","symbol":"KZT","native":"₸","thousands_sep":" ","decimal_sep":"-","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"47034","max_amount":"470338323"},"LBP":{"code":"LBP","title":"Lebanese Pound","symbol":"LBP","native":"ل.ل.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"8874340","max_amount":"88743396054"},"LKR":{"code":"LKR","title":"Sri Lankan Rupee","symbol":"LKR","native":"රු.","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"29919","max_amount":"299189672"},"MAD":{"code":"MAD","title":"Moroccan Dirham","symbol":"MAD","native":"د.م.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"979","max_amount":"9790963"},"MDL":{"code":"MDL","title":"Moldovan Leu","symbol":"MDL","native":"MDL","thousands_sep":",","decimal_sep":".","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"1762","max_amount":"17620290"},"MMK":{"code":"MMK","title":"Myanmar kyat","symbol":"MMK","native":"MMK","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"324796","max_amount":"3247960992"},"MNT":{"code":"MNT","title":"Mongolian Tögrög","symbol":"MNT","native":"MNT","thousands_sep":" ","decimal_sep":",","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"345000","max_amount":"3450000346"},"MOP":{"code":"MOP","title":"Macanese pataca","symbol":"MOP","native":"MOP","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"797","max_amount":"7972623"},"MUR":{"code":"MUR","title":"Mauritian Rupee","symbol":"MUR","native":"MUR","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"4675","max_amount":"46750378"},"MVR":{"code":"MVR","title":"Maldivian Rufiyaa","symbol":"MVR","native":"MVR","thousands_sep":",","decimal_sep":".","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"1536","max_amount":"15360378"},"MXN":{"code":"MXN","title":"Mexican Peso","symbol":"MX$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"1918","max_amount":"19178504"},"MYR":{"code":"MYR","title":"Malaysian Ringgit","symbol":"MYR","native":"RM","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"450","max_amount":"4497504"},"MZN":{"code":"MZN","title":"Mozambican Metical","symbol":"MZN","native":"MTn","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"6390","max_amount":"63899991"},"NGN":{"code":"NGN","title":"Nigerian Naira","symbol":"NGN","native":"₦","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"163595","max_amount":"1635950377"},"NIO":{"code":"NIO","title":"Nicaraguan Córdoba","symbol":"NIO","native":"C$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"3648","max_amount":"36478506"},"NOK":{"code":"NOK","title":"Norwegian Krone","symbol":"NOK","native":"kr","thousands_sep":" ","decimal_sep":",","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"1095","max_amount":"10948150"},"NPR":{"code":"NPR","title":"Nepalese Rupee","symbol":"NPR","native":"नेरू","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"13277","max_amount":"132765646"},"NZD":{"code":"NZD","title":"New Zealand Dollar","symbol":"NZ$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"168","max_amount":"1678557"},"PAB":{"code":"PAB","title":"Panamanian Balboa","symbol":"PAB","native":"B\/.","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"99","max_amount":"990981"},"PEN":{"code":"PEN","title":"Peruvian Nuevo Sol","symbol":"PEN","native":"S\/.","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"371","max_amount":"3708923"},"PHP":{"code":"PHP","title":"Philippine Peso","symbol":"PHP","native":"₱","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"5780","max_amount":"57795038"},"PKR":{"code":"PKR","title":"Pakistani Rupee","symbol":"PKR","native":"₨","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"27599","max_amount":"275991393"},"PLN":{"code":"PLN","title":"Polish Złoty","symbol":"PLN","native":"zł","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"393","max_amount":"3929050"},"PYG":{"code":"PYG","title":"Paraguayan Guaraní","symbol":"PYG","native":"₲","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":0,"min_amount":"7505","max_amount":"75053793"},"QAR":{"code":"QAR","title":"Qatari Riyal","symbol":"QAR","native":"ر.ق.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"361","max_amount":"3613606"},"RON":{"code":"RON","title":"Romanian Leu","symbol":"RON","native":"RON","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"456","max_amount":"4560404"},"RSD":{"code":"RSD","title":"Serbian Dinar","symbol":"RSD","native":"дин.","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"10716","max_amount":"107157442"},"RUB":{"code":"RUB","title":"Russian Ruble","symbol":"RUB","native":"₽","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"8922","max_amount":"89218514"},"SAR":{"code":"SAR","title":"Saudi Riyal","symbol":"SAR","native":"ر.س.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"375","max_amount":"3753930"},"SEK":{"code":"SEK","title":"Swedish Krona","symbol":"SEK","native":"kr","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"1055","max_amount":"10554325"},"SGD":{"code":"SGD","title":"Singapore Dollar","symbol":"SGD","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"133","max_amount":"1327104"},"SYP":{"code":"SYP","title":"Syrian pound","symbol":"SYP","native":"ل.س.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"251253","max_amount":"2512530370"},"THB":{"code":"THB","title":"Thai Baht","symbol":"฿","native":"฿","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"3531","max_amount":"35313038"},"TJS":{"code":"TJS","title":"Tajikistani Somoni","symbol":"TJS","native":"TJS","thousands_sep":" ","decimal_sep":";","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"1048","max_amount":"10479788"},"TRY":{"code":"TRY","title":"Turkish Lira","symbol":"TRY","native":"TL","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"3310","max_amount":"33102504"},"TTD":{"code":"TTD","title":"Trinidad and Tobago Dollar","symbol":"TTD","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"671","max_amount":"6710617"},"TWD":{"code":"TWD","title":"New Taiwan Dollar","symbol":"NT$","native":"NT$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"3260","max_amount":"32603904"},"TZS":{"code":"TZS","title":"Tanzanian Shilling","symbol":"TZS","native":"TSh","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"268068","max_amount":"2680675731"},"UAH":{"code":"UAH","title":"Ukrainian Hryvnia","symbol":"UAH","native":"₴","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"4089","max_amount":"40888706"},"UGX":{"code":"UGX","title":"Ugandan Shilling","symbol":"UGX","native":"USh","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":0,"min_amount":"3692","max_amount":"36918006"},"USD":{"code":"USD","title":"United States Dollar","symbol":"$","native":"$","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":false,"drop_zeros":false,"exp":2,"min_amount":"100","max_amount":1000000},"UYU":{"code":"UYU","title":"Uruguayan Peso","symbol":"UYU","native":"$","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"3993","max_amount":"39930412"},"UZS":{"code":"UZS","title":"Uzbekistani Som","symbol":"UZS","native":"UZS","thousands_sep":" ","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"1246166","max_amount":"12461658197"},"VEF":{"code":"VEF","title":"Venezuelan bolívar","symbol":"VEF","native":"Bs.F.","thousands_sep":".","decimal_sep":",","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"362255253","max_amount":"999999999999"},"VND":{"code":"VND","title":"Vietnamese Đồng","symbol":"₫","native":"₫","thousands_sep":".","decimal_sep":",","symbol_left":false,"space_between":true,"drop_zeros":false,"exp":0,"min_amount":"25218","max_amount":"252175000"},"YER":{"code":"YER","title":"Yemeni Rial","symbol":"YER","native":"ر.ي.‏","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"25035","max_amount":"250350363"},"ZAR":{"code":"ZAR","title":"South African Rand","symbol":"ZAR","native":"R","thousands_sep":",","decimal_sep":".","symbol_left":true,"space_between":true,"drop_zeros":false,"exp":2,"min_amount":"1828","max_amount":"18278037"}} \ No newline at end of file diff --git a/TMessagesProj/src/main/assets/darkblue.attheme b/TMessagesProj/src/main/assets/darkblue.attheme index d3cac2cf722..5c400cef326 100644 --- a/TMessagesProj/src/main/assets/darkblue.attheme +++ b/TMessagesProj/src/main/assets/darkblue.attheme @@ -441,5 +441,8 @@ code_string=-7806088 code_operator=2147483647 code_number=-10887465 code_comment=2147483647 +iv_background=-16777216 +iv_backgroundGray=-14737633 +iv_navigationBackground=-16777216 table_background=177390847 table_border=436207615 diff --git a/TMessagesProj/src/main/assets/fonts/num.otf b/TMessagesProj/src/main/assets/fonts/num.otf index 320ce49b2d068e0567dd2551764aba1521294c3c..856f2f71e5933dc73a692778d523e8364e6cb02f 100644 GIT binary patch delta 3133 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 LQ8r87-h=-Idp&aC delta 2734 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 A&j0`b diff --git a/TMessagesProj/src/main/assets/night.attheme b/TMessagesProj/src/main/assets/night.attheme index c259bfe71c0..3ad321175a7 100644 --- a/TMessagesProj/src/main/assets/night.attheme +++ b/TMessagesProj/src/main/assets/night.attheme @@ -466,5 +466,8 @@ code_string=-7806088 code_operator=2147483647 code_number=-10887465 code_comment=2147483647 +iv_background=-16777216 +iv_backgroundGray=-14737633 +iv_navigationBackground=-16777216 table_background=177390847 table_border=436207615 diff --git a/TMessagesProj/src/main/assets/shaders/fragment4.glsl b/TMessagesProj/src/main/assets/shaders/fragment4.glsl index 104c3a602f6..7384467651b 100644 --- a/TMessagesProj/src/main/assets/shaders/fragment4.glsl +++ b/TMessagesProj/src/main/assets/shaders/fragment4.glsl @@ -6,6 +6,7 @@ uniform sampler2D u_BackgroundTexture; uniform float f_xOffset; uniform float f_alpha; uniform mat4 world; +uniform float white; varying vec3 vNormal; varying vec2 vUV; @@ -89,5 +90,5 @@ void main() { clamp(flecksSpec * abs(vNormal.z) * (flecksNormal.z), 0.2, 0.3) - .2 ); - gl_FragColor = color * f_alpha; + gl_FragColor = mix(color * f_alpha, vec4(1.0), white); } \ No newline at end of file diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/AndroidUtilities.java b/TMessagesProj/src/main/java/org/telegram/messenger/AndroidUtilities.java index 6afa570edc6..2936edb2d26 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/AndroidUtilities.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/AndroidUtilities.java @@ -221,6 +221,7 @@ public class AndroidUtilities { public final static int REPLACING_TAG_TYPE_BOLD = 1; public final static int REPLACING_TAG_TYPE_LINKBOLD = 2; public final static int REPLACING_TAG_TYPE_LINK_NBSP = 3; + public final static int REPLACING_TAG_TYPE_UNDERLINE = 4; public final static String TYPEFACE_ROBOTO_MEDIUM = "fonts/rmedium.ttf"; public final static String TYPEFACE_ROBOTO_MEDIUM_ITALIC = "fonts/rmediumitalic.ttf"; @@ -327,7 +328,7 @@ public static String removeDiacritics(String str) { final String HOST_NAME = "(" + IRI + "\\.)+" + GTLD; final Pattern DOMAIN_NAME = Pattern.compile("(" + HOST_NAME + "|" + IP_ADDRESS + ")"); WEB_URL = Pattern.compile( - "((?:(http|https|Http|Https|ton|tg):\\/\\/(?:(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)" + "((?:(http|https|Http|Https|ton|tg|tonsite):\\/\\/(?:(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)" + "\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_" + "\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,25})?\\@)?)?" + "(?:" + DOMAIN_NAME + ")" @@ -530,13 +531,13 @@ public static SpannableStringBuilder replaceSingleTag(String str, int colorKey, if (type == REPLACING_TAG_TYPE_LINK_NBSP) { spannableStringBuilder.replace(index, index + len, AndroidUtilities.replaceMultipleCharSequence(" ", spannableStringBuilder.subSequence(index, index + len), " ")); } - if (type == REPLACING_TAG_TYPE_LINK || type == REPLACING_TAG_TYPE_LINK_NBSP || type == REPLACING_TAG_TYPE_LINKBOLD) { + if (type == REPLACING_TAG_TYPE_LINK || type == REPLACING_TAG_TYPE_LINK_NBSP || type == REPLACING_TAG_TYPE_LINKBOLD || type == REPLACING_TAG_TYPE_UNDERLINE) { spannableStringBuilder.setSpan(new ClickableSpan() { @Override public void updateDrawState(@NonNull TextPaint ds) { super.updateDrawState(ds); - ds.setUnderlineText(false); + ds.setUnderlineText(type == REPLACING_TAG_TYPE_UNDERLINE); if (colorKey >= 0) { ds.setColor(Theme.getColor(colorKey, resourcesProvider)); } @@ -1101,7 +1102,7 @@ public static boolean addLinks(Spannable text, int mask, boolean internalOnly, b Linkify.addLinks(text, Linkify.PHONE_NUMBERS); } if ((mask & Linkify.WEB_URLS) != 0) { - gatherLinks(links, text, LinkifyPort.WEB_URL, new String[]{"http://", "https://", "tg://"}, sUrlMatchFilter, internalOnly); + gatherLinks(links, text, LinkifyPort.WEB_URL, new String[]{"http://", "https://", "tg://", "tonsite://"}, sUrlMatchFilter, internalOnly); } pruneOverlaps(links); if (links.size() == 0) { @@ -1124,6 +1125,7 @@ public static boolean addLinks(Spannable text, int mask, boolean internalOnly, b if (url != null) { url = url.replaceAll("∕|⁄|%E2%81%84|%E2%88%95", "/"); } + if (Browser.isTonsitePunycode(url)) continue; text.setSpan(new URLSpan(url), link.start, link.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } return true; @@ -2105,7 +2107,7 @@ public static ArrayList<TLRPC.User> loadVCardFromStream(Uri uri, int currentAcco user.first_name = vcardData.name; user.last_name = ""; user.id = 0; - TLRPC.TL_restrictionReason reason = new TLRPC.TL_restrictionReason(); + TLRPC.RestrictionReason reason = new TLRPC.RestrictionReason(); reason.text = vcardData.vcard.toString(); reason.platform = ""; reason.reason = ""; @@ -4003,7 +4005,16 @@ public static CharSequence replaceNewLines(CharSequence original) { stringBuilder.replace(a, a + 1, " "); } } - return original; + return stringBuilder; + } else if (original instanceof SpannableString) { + if (TextUtils.indexOf(original, '\n') < 0) return original; + SpannableStringBuilder stringBuilder = new SpannableStringBuilder(original); + for (int a = 0, N = original.length(); a < N; a++) { + if (original.charAt(a) == '\n') { + stringBuilder.replace(a, a + 1, " "); + } + } + return stringBuilder; } return original.toString().replace('\n', ' '); } @@ -4734,6 +4745,21 @@ public static void lerp(int[] a, int[] b, float f, int[] to) { } } + public static void scaleRect(RectF rect, float scale) { + scaleRect(rect, scale, rect.centerX(), rect.centerY()); + } + + public static void scaleRect(RectF rect, float scale, float px, float py) { + final float wl = px - rect.left, wr = rect.right - px; + final float ht = py - rect.top, hb = rect.bottom - py; + rect.set( + px - wl * scale, + py - ht * scale, + px + wr * scale, + py + hb * scale + ); + } + public static float cascade(float fullAnimationT, float position, float count, float waveLength) { if (count <= 0) return fullAnimationT; final float waveDuration = 1f / count * Math.min(waveLength, count); @@ -4781,6 +4807,23 @@ public static String getCertificateSHA256Fingerprint() { return ""; } + public static String getCertificateSHA1Fingerprint() { + PackageManager pm = ApplicationLoader.applicationContext.getPackageManager(); + String packageName = ApplicationLoader.applicationContext.getPackageName(); + try { + PackageInfo packageInfo = pm.getPackageInfo(packageName, PackageManager.GET_SIGNATURES); + Signature[] signatures = packageInfo.signatures; + byte[] cert = signatures[0].toByteArray(); + InputStream input = new ByteArrayInputStream(cert); + CertificateFactory cf = CertificateFactory.getInstance("X509"); + X509Certificate c = (X509Certificate) cf.generateCertificate(input); + return Utilities.bytesToHex(Utilities.computeSHA1(c.getEncoded())); + } catch (Throwable ignore) { + + } + return ""; + } + private static char[] characters = new char[]{' ', ' ', '!', '"', '#', '%', '&', '\'', '(', ')', '*', ',', '-', '.', '/', ':', ';', '?', '@', '[', '\\', ']', '_', '{', '}', '¡', '§', '«', '¶', '·', '»', '¿', ';', '·', '՚', '՛', '՜', '՝', '՞', '՟', '։', '֊', '־', '׀', '׃', '׆', '׳', '״', '؉', '؊', '،', '؍', '؛', '؞', '؟', '٪', '٫', '٬', '٭', '۔', '܀', '܁', '܂', '܃', '܄', '܅', '܆', '܇', '܈', '܉', '܊', '܋', '܌', '܍', '߷', '߸', '߹', '࠰', '࠱', '࠲', '࠳', '࠴', '࠵', '࠶', '࠷', '࠸', '࠹', '࠺', '࠻', '࠼', '࠽', '࠾', '࡞', '।', '॥', '॰', '৽', '੶', '૰', '౷', '಄', '෴', '๏', '๚', '๛', '༄', '༅', '༆', '༇', '༈', '༉', '༊', '་', '༌', '།', '༎', '༏', '༐', '༑', '༒', '༔', '༺', '༻', '༼', '༽', '྅', '࿐', '࿑', '࿒', '࿓', '࿔', '࿙', '࿚', '၊', '။', '၌', '၍', '၎', '၏', '჻', '፠', '፡', '።', '፣', '፤', '፥', '፦', '፧', '፨', '᐀', '᙮', '᚛', '᚜', '᛫', '᛬', '᛭', '᜵', '᜶', '។', '៕', '៖', '៘', '៙', '៚', '᠀', '᠁', '᠂', '᠃', '᠄', '᠅', '᠆', '᠇', '᠈', '᠉', '᠊', '᥄', '᥅', '᨞', '᨟', '᪠', '᪡', '᪢', '᪣', '᪤', '᪥', '᪦', '᪨', '᪩', '᪪', '᪫', '᪬', '᪭', '᭚', '᭛', '᭜', '᭝', '᭞', '᭟', '᭠', '᯼', '᯽', '᯾', '᯿', '᰻', '᰼', '᰽', '᰾', '᰿', '᱾', '᱿', '᳀', '᳁', '᳂', '᳃', '᳄', '᳅', '᳆', '᳇', '᳓', '‐', '‑', '‒', '–', '—', '―', '‖', '‗', '‘', '’', '‚', '‛', '“', '”', '„', '‟', '†', '‡', '•', '‣', '․', '‥', '…', '‧', '‰', '‱', '′', '″', '‴', '‵', '‶', '‷', '‸', '‹', '›', '※', '‼', '‽', '‾', '‿', '⁀', '⁁', '⁂', '⁃', '⁅', '⁆', '⁇', '⁈', '⁉', '⁊', '⁋', '⁌', '⁍', '⁎', '⁏', '⁐', '⁑', '⁓', '⁔', '⁕', '⁖', '⁗', '⁘', '⁙', '⁚', '⁛', '⁜', '⁝', '⁞', '⁽', '⁾', '₍', '₎', '⌈', '⌉', '⌊', '⌋', '〈', '〉', '❨', '❩', '❪', '❫', '❬', '❭', '❮', '❯', '❰', '❱', '❲', '❳', '❴', '❵', '⟅', '⟆', '⟦', '⟧', '⟨', '⟩', '⟪', '⟫', '⟬', '⟭', '⟮', '⟯', '⦃', '⦄', '⦅', '⦆', '⦇', '⦈', '⦉', '⦊', '⦋', '⦌', '⦍', '⦎', '⦏', '⦐', '⦑', '⦒', '⦓', '⦔', '⦕', '⦖', '⦗', '⦘', '⧘', '⧙', '⧚', '⧛', '⧼', '⧽', '⳹', '⳺', '⳻', '⳼', '⳾', '⳿', '⵰', '⸀', '⸁', '⸂', '⸃', '⸄', '⸅', '⸆', '⸇', '⸈', '⸉', '⸊', '⸋', '⸌', '⸍', '⸎', '⸏', '⸐', '⸑', '⸒', '⸓', '⸔', '⸕', '⸖', '⸗', '⸘', '⸙', '⸚', '⸛', '⸜', '⸝', '⸞', '⸟', '⸠', '⸡', '⸢', '⸣', '⸤', '⸥', '⸦', '⸧', '⸨', '⸩', '⸪', '⸫', '⸬', '⸭', '⸮', '⸰', '⸱', '⸲', '⸳', '⸴', '⸵', '⸶', '⸷', '⸸', '⸹', '⸺', '⸻', '⸼', '⸽', '⸾', '⸿', '⹀', '⹁', '⹂', '⹃', '⹄', '⹅', '⹆', '⹇', '⹈', '⹉', '⹊', '⹋', '⹌', '⹍', '⹎', '⹏', '、', '。', '〃', '〈', '〉', '《', '》', '「', '」', '『', '』', '【', '】', '〔', '〕', '〖', '〗', '〘', '〙', '〚', '〛', '〜', '〝', '〞', '〟', '〰', '〽', '゠', '・', '꓾', '꓿', '꘍', '꘎', '꘏', '꙳', '꙾', '꛲', '꛳', '꛴', '꛵', '꛶', '꛷', '꡴', '꡵', '꡶', '꡷', '꣎', '꣏', '꣸', '꣹', '꣺', '꣼', '꤮', '꤯', '꥟', '꧁', '꧂', '꧃', '꧄', '꧅', '꧆', '꧇', '꧈', '꧉', '꧊', '꧋', '꧌', '꧍', '꧞', '꧟', '꩜', '꩝', '꩞', '꩟', '꫞', '꫟', '꫰', '꫱', '꯫', '﴾', '﴿', '︐', '︑', '︒', '︓', '︔', '︕', '︖', '︗', '︘', '︙', '︰', '︱', '︲', '︳', '︴', '︵', '︶', '︷', '︸', '︹', '︺', '︻', '︼', '︽', '︾', '︿', '﹀', '﹁', '﹂', '﹃', '﹄', '﹅', '﹆', '﹇', '﹈', '﹉', '﹊', '﹋', '﹌', '﹍', '﹎', '﹏', '﹐', '﹑', '﹒', '﹔', '﹕', '﹖', '﹗', '﹘', '﹙', '﹚', '﹛', '﹜', '﹝', '﹞', '﹟', '﹠', '﹡', '﹣', '﹨', '﹪', '﹫', '!', '"', '#', '%', '&', ''', '(', ')', '*', ',', '-', '.', '/', ':', ';', '?', '@', '[', '\', ']', '_', '{', '}', '⦅', '⦆', '。', '「', '」', '、', '・'}; //private static String[] longCharacters = new String[] {"𐄀", "𐄁", "𐄂", "𐎟", "𐏐", "𐕯", "𐡗", "𐤟", "𐤿", "𐩐", "𐩑", "𐩒", "𐩓", "𐩔", "𐩕", "𐩖", "𐩗", "𐩘", "𐩿", "𐫰", "𐫱", "𐫲", "𐫳", "𐫴", "𐫵", "𐫶", "𐬹", "𐬺", "𐬻", "𐬼", "𐬽", "𐬾", "𐬿", "𐮙", "𐮚", "𐮛", "𐮜", "𐽕", "𐽖", "𐽗", "𐽘", "𐽙", "𑁇", "𑁈", "𑁉", "𑁊", "𑁋", "𑁌", "𑁍", "𑂻", "𑂼", "𑂾", "𑂿", "𑃀", "𑃁", "𑅀", "𑅁", "𑅂", "𑅃", "𑅴", "𑅵", "𑇅", "𑇆", "𑇇", "𑇈", "𑇍", "𑇛", "𑇝", "𑇞", "𑇟", "𑈸", "𑈹", "𑈺", "𑈻", "𑈼", "𑈽", "𑊩", "𑑋", "𑑌", "𑑍", "𑑎", "𑑏", "𑑛", "𑑝", "𑓆", "𑗁", "𑗂", "𑗃", "𑗄", "𑗅", "𑗆", "𑗇", "𑗈", "𑗉", "𑗊", "𑗋", "𑗌", "𑗍", "𑗎", "𑗏", "𑗐", "𑗑", "𑗒", "𑗓", "𑗔", "𑗕", "𑗖", "𑗗", "𑙁", "𑙂", "𑙃", "𑙠", "𑙡", "𑙢", "𑙣", "𑙤", "𑙥", "𑙦", "𑙧", "𑙨", "𑙩", "𑙪", "𑙫", "𑙬", "𑜼", "𑜽", "𑜾", "𑠻", "𑧢", "𑨿", "𑩀", "𑩁", "𑩂", "𑩃", "𑩄", "𑩅", "𑩆", "𑪚", "𑪛", "𑪜", "𑪞", "𑪟", "𑪠", "𑪡", "𑪢", "𑱁", "𑱂", "𑱃", "𑱄", "𑱅", "𑱰", "𑱱", "𑻷", "𑻸", "𑿿", "𒑰", "𒑱", "𒑲", "𒑳", "𒑴", "𖩮", "𖩯", "𖫵", "𖬷", "𖬸", "𖬹", "𖬺", "𖬻", "𖭄", "𖺗", "𖺘", "𖺙", "𖺚", "𖿢", "𛲟", "𝪇", "𝪈", "𝪉", "𝪊", "𝪋", "𞥞", "𞥟"}; private static HashSet<Character> charactersMap; @@ -5407,11 +5450,25 @@ public static List<View> allGlobalViews() { public static boolean hasDialogOnTop(BaseFragment fragment) { if (fragment == null) return false; - if (fragment.visibleDialog != null) return true; + if (fragment.visibleDialog != null && !(fragment.visibleDialog instanceof AlertDialog) && !( + fragment.visibleDialog instanceof BottomSheet && ((BottomSheet) fragment.visibleDialog).attachedFragment != null + )) return true; if (fragment.getParentLayout() == null) return false; List<View> globalViews = allGlobalViews(); if (globalViews == null || globalViews.isEmpty()) return false; - View lastGlobalView = globalViews.get(globalViews.size() - 1); + View lastGlobalView = null; + for (int i = globalViews.size() - 1; i >= 0; --i) { + lastGlobalView = globalViews.get(i); + if (fragment.visibleDialog instanceof AlertDialog) { + if (lastGlobalView == getRootView((((AlertDialog) fragment.visibleDialog).getContainerView()))) { + continue; + } + } + if (!( + lastGlobalView instanceof AlertDialog.AlertDialogView || + lastGlobalView instanceof PipRoundVideoView.PipFrameLayout + )) break; + } return lastGlobalView != getRootView(fragment.getParentLayout().getView()); } @@ -5464,7 +5521,7 @@ public static void makeGlobalBlurBitmap(Utilities.Callback<Bitmap> onBitmapDone, canvas.drawColor(Theme.getColor(Theme.key_windowBackgroundWhite)); for (int i = 0; i < finalViews.size(); ++i) { View view = finalViews.get(i); - if (view instanceof PipRoundVideoView.PipFrameLayout || view instanceof PipRoundVideoView.PipFrameLayout || (exclude != null && exclude.contains(view))) { + if (view instanceof PipRoundVideoView.PipFrameLayout || (exclude != null && exclude.contains(view))) { continue; } @@ -5482,7 +5539,7 @@ public static void makeGlobalBlurBitmap(Utilities.Callback<Bitmap> onBitmapDone, try { view.draw(canvas); } catch (Exception e) { - + FileLog.e(e); } canvas.restore(); } @@ -5559,7 +5616,7 @@ public static boolean isRTL(CharSequence text) { private static Pattern uriParse; - private static Pattern getURIParsePattern() { + public static Pattern getURIParsePattern() { if (uriParse == null) { uriParse = Pattern.compile("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?"); // RFC 3986 B } @@ -5567,6 +5624,10 @@ private static Pattern getURIParsePattern() { } public static String getHostAuthority(String uri) { + return getHostAuthority(uri, false); + } + + public static String getHostAuthority(String uri, boolean removeWWW) { if (uri == null) { return null; } @@ -5577,6 +5638,9 @@ public static String getHostAuthority(String uri) { if (authority != null) { authority = authority.toLowerCase(); } + if (removeWWW && authority != null && authority.startsWith("www.")) { + authority = authority.substring(4); + } return authority; } return null; @@ -5589,6 +5653,13 @@ public static String getHostAuthority(Uri uri) { return getHostAuthority(uri.toString()); } + public static String getHostAuthority(Uri uri, boolean removeWWW) { + if (uri == null) { + return null; + } + return getHostAuthority(uri.toString(), removeWWW); + } + public static boolean intersect1d(int x1, int x2, int y1, int y2) { return Math.max(x1, x2) > Math.min(y1, y2) && Math.max(y1, y2) > Math.min(x1, x2); } @@ -5891,27 +5962,56 @@ public static void vibrate(View view) { } catch (Exception ignore) {} } - public static void applySpring(Animator anim, float stiffness, float damping) { - applySpring(anim, stiffness, damping, 1); + public static void applySpring(Animator anim, double stiffness, double damping) { + applySpring(anim, stiffness, damping, 1, 0); } - public static void applySpring(Animator anim, float stiffness, float damping, float mass) { - final double delta = damping / (2.0 * Math.sqrt(stiffness * mass)); - final double undampedFrequency = Math.sqrt(stiffness / mass); - final double omega_0 = Math.sqrt(stiffness / mass); - final double zeta = damping / (2 * Math.sqrt(stiffness * mass)); + public static void applySpring(Animator anim, double stiffness, double damping, double mass) { + applySpring(anim, stiffness, damping, mass, 0); + } + + public static void applySpring(Animator anim, double stiffness, double damping, double mass, double initialVelocity) { + final double w0 = Math.sqrt(stiffness / mass); + final double zeta = damping / (2.0 * Math.sqrt(stiffness * mass)); + final double wd, A, B; + if (zeta < 1) { + wd = w0 * Math.sqrt(1.0 - zeta * zeta); + A = 1.0; + B = (zeta * w0 + -initialVelocity) / wd; + } else { + wd = 0.0; + A = 1.0; + B = -initialVelocity + w0; + } final double threshold = 0.0025; - final double duration = Math.log(threshold) / (-zeta * omega_0); + final double duration = Math.log(threshold) / (-zeta * w0); anim.setDuration((long) (duration * 1000L)); anim.setInterpolator(new Interpolator() { @Override public float getInterpolation(float t) { - if (delta < 1) { - final double dampedFrequency = undampedFrequency * Math.sqrt(1 - delta * delta); - return (float) (1 - Math.exp(-delta * undampedFrequency * t) * - (Math.cos(dampedFrequency * t) + (delta * undampedFrequency / dampedFrequency) * Math.sin(dampedFrequency * t))); + if (zeta < 1) { + return (float) (1.0 - Math.exp(-t * zeta * w0) * (A * Math.cos(wd * t) + B * Math.sin(wd * t))); + } else { + return (float) (1.0 - (A + B * t) * Math.exp(-t * w0)); + } + } + }); + } + + public static void applySpring(Animator anim, float stiffness, float damping, float mass, long overrideDuration) { + final double zeta = damping / (2 * Math.sqrt(stiffness * mass)); + final double omega = Math.sqrt(stiffness / mass); + final double threshold = 0.0025; + anim.setDuration(overrideDuration); + anim.setInterpolator(new Interpolator() { + @Override + public float getInterpolation(float t) { + if (zeta < 1) { + final double dampedFrequency = omega * Math.sqrt(1 - zeta * zeta); + return (float) (1 - Math.exp(-zeta * omega * t) * + (Math.cos(dampedFrequency * t) + (zeta * omega / dampedFrequency) * Math.sin(dampedFrequency * t))); } else { - final double a = -delta * undampedFrequency * t; + final double a = -zeta * omega * t; return (float) (1 - (1 + a) * Math.exp(a)); } } @@ -5942,9 +6042,9 @@ public static boolean isWebAppLink(String url) { if (segments.size() >= 3 && "s".equals(segments.get(1))) { return false; } else if (segments.size() > 1) { - final String segment = segments.get(1); - if (TextUtils.isEmpty(segment)) return false; - switch (segment) { + final String segment0 = segments.get(0); + if (TextUtils.isEmpty(segment0)) return false; + switch (segment0) { case "joinchat": case "login": case "addstickers": @@ -5961,6 +6061,9 @@ public static boolean isWebAppLink(String url) { case "addlist": return false; } + final String segment1 = segments.get(1); + if (TextUtils.isEmpty(segment1)) return false; + if (segment1.matches("^\\d+$")) return false; return true; } else if (segments.size() == 1) { return !TextUtils.isEmpty(uri.getQueryParameter("startapp")); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/ApplicationLoader.java b/TMessagesProj/src/main/java/org/telegram/messenger/ApplicationLoader.java index 5f0d8d1d1db..1dadb79a7b7 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/ApplicationLoader.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/ApplicationLoader.java @@ -638,5 +638,4 @@ public boolean onPause() { public BaseFragment openSettings(int n) { return null; } - } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/BillingController.java b/TMessagesProj/src/main/java/org/telegram/messenger/BillingController.java index d97777a8cf3..407b28a7cd1 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/BillingController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/BillingController.java @@ -192,7 +192,7 @@ public void launchBillingFlow(Activity activity, AccountInstance accountInstance return; } - if ((paymentPurpose instanceof TLRPC.TL_inputStorePaymentGiftPremium || paymentPurpose instanceof TLRPC.TL_inputStorePaymentStars) && !checkedConsume) { + if ((paymentPurpose instanceof TLRPC.TL_inputStorePaymentGiftPremium || paymentPurpose instanceof TLRPC.TL_inputStorePaymentStarsTopup || paymentPurpose instanceof TLRPC.TL_inputStorePaymentStarsGift) && !checkedConsume) { queryPurchases(BillingClient.ProductType.INAPP, (billingResult, list) -> { if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) { Runnable callback = () -> launchBillingFlow(activity, accountInstance, paymentPurpose, productDetails, subscriptionUpdateParams, true); @@ -244,7 +244,8 @@ public void launchBillingFlow(Activity activity, AccountInstance accountInstance if (subscriptionUpdateParams != null) { flowParams.setSubscriptionUpdateParams(subscriptionUpdateParams); } - int responseCode = billingClient.launchBillingFlow(activity, flowParams.build()).getResponseCode(); + final BillingResult result = billingClient.launchBillingFlow(activity, flowParams.build()); + int responseCode = result.getResponseCode(); if (responseCode != BillingClient.BillingResponseCode.OK) { FileLog.d("Billing: Launch Error: " + responseCode + ", " + obfuscatedAccountId + ", " + obfuscatedData); } @@ -281,130 +282,42 @@ public void onPurchasesUpdated(@NonNull BillingResult billing, @Nullable List<Pu if (!purchase.isAcknowledged()) { requestingTokens.add(purchase.getPurchaseToken()); - retrievePurpose(purchase, opayload, payload -> { - TLRPC.TL_payments_assignPlayMarketTransaction req = new TLRPC.TL_payments_assignPlayMarketTransaction(); - req.receipt = new TLRPC.TL_dataJSON(); - req.receipt.data = purchase.getOriginalJson(); - req.purpose = payload.second; + TLRPC.TL_payments_assignPlayMarketTransaction req = new TLRPC.TL_payments_assignPlayMarketTransaction(); + req.receipt = new TLRPC.TL_dataJSON(); + req.receipt.data = purchase.getOriginalJson(); + req.purpose = opayload.second; - final AlertDialog progressDialog = new AlertDialog(ApplicationLoader.applicationContext, AlertDialog.ALERT_TYPE_SPINNER); - AndroidUtilities.runOnUIThread(() -> progressDialog.showDelayed(500)); + final AlertDialog progressDialog = new AlertDialog(ApplicationLoader.applicationContext, AlertDialog.ALERT_TYPE_SPINNER); + AndroidUtilities.runOnUIThread(() -> progressDialog.showDelayed(500)); - AccountInstance acc = payload.first; - acc.getConnectionsManager().sendRequest(req, (response, error) -> { - AndroidUtilities.runOnUIThread(progressDialog::dismiss); + AccountInstance acc = opayload.first; + acc.getConnectionsManager().sendRequest(req, (response, error) -> { + AndroidUtilities.runOnUIThread(progressDialog::dismiss); - requestingTokens.remove(purchase.getPurchaseToken()); + requestingTokens.remove(purchase.getPurchaseToken()); - if (response instanceof TLRPC.Updates) { - acc.getMessagesController().processUpdates((TLRPC.Updates) response, false); + if (response instanceof TLRPC.Updates) { + acc.getMessagesController().processUpdates((TLRPC.Updates) response, false); - for (String productId : purchase.getProducts()) { - Consumer<BillingResult> listener = resultListeners.remove(productId); - if (listener != null) { - listener.accept(billing); - } + for (String productId : purchase.getProducts()) { + Consumer<BillingResult> listener = resultListeners.remove(productId); + if (listener != null) { + listener.accept(billing); } - - consumeGiftPurchase(purchase, req.purpose); - } else if (error != null) { - if (onCanceled != null) { - onCanceled.run(); - onCanceled = null; - } - NotificationCenter.getGlobalInstance().postNotificationNameOnUIThread(NotificationCenter.billingConfirmPurchaseError, req, error); } - }, ConnectionsManager.RequestFlagFailOnServerErrors | ConnectionsManager.RequestFlagFailOnServerErrorsExceptFloodWait | ConnectionsManager.RequestFlagInvokeAfter); - }); - } else { - consumeGiftPurchase(purchase, opayload.second); - } - } - } - } - private boolean retrievePurpose(Purchase purchase, Pair<AccountInstance, TLRPC.InputStorePaymentPurpose> payload, Utilities.Callback<Pair<AccountInstance, TLRPC.InputStorePaymentPurpose>> whenPayload) { - if (payload == null || payload.first == null) { - FileLog.d("retrievePurpose: payload or account is null"); - return false; - } - if (payload.second != null) { - FileLog.d("retrievePurpose: already has purpose"); - whenPayload.run(payload); - return true; - } - if (purchase == null || purchase.getProducts().isEmpty()) { - FileLog.d("retrievePurpose: no products found for purpose!"); - whenPayload.run(payload); - return false; - } else { - final int currentAccount = payload.first.getCurrentAccount(); - final String productId = purchase.getProducts().get(0); - - if (productId == null) { - FileLog.d("retrievePurpose: first product is null!"); - whenPayload.run(payload); - return false; - } - - ArrayList<TLRPC.TL_starsTopupOption> options = StarsController.getInstance(currentAccount).getOptionsCached(); - if (options == null) { - ConnectionsManager.getInstance(currentAccount).sendRequest(new TLRPC.TL_payments_getStarsTopupOptions(), (res, err) -> AndroidUtilities.runOnUIThread(() -> { - ArrayList<TLRPC.TL_starsTopupOption> loadedOptions = new ArrayList<>(); - if (res instanceof TLRPC.Vector) { - TLRPC.Vector vector = (TLRPC.Vector) res; - for (Object object : vector.objects) { - if (object instanceof TLRPC.TL_starsTopupOption) { - TLRPC.TL_starsTopupOption option = (TLRPC.TL_starsTopupOption) object; - loadedOptions.add(option); + consumeGiftPurchase(purchase, req.purpose); + BillingUtilities.cleanupPurchase(purchase); + } else if (error != null) { + if (onCanceled != null) { + onCanceled.run(); + onCanceled = null; } + NotificationCenter.getGlobalInstance().postNotificationNameOnUIThread(NotificationCenter.billingConfirmPurchaseError, req, error); } - } else if (err != null) { - FileLog.d("retrievePopup: getStarsTopupOptions gives error! " + err.code + ": " + err.text); - } - - TLRPC.TL_starsTopupOption foundOption = null; - for (int i = 0; i < loadedOptions.size(); ++i) { - if (productId.equals(loadedOptions.get(i).store_product)) { - foundOption = loadedOptions.get(i); - break; - } - } - - if (foundOption != null) { - TLRPC.TL_inputStorePaymentStars purpose = new TLRPC.TL_inputStorePaymentStars(); - purpose.amount = foundOption.amount; - purpose.currency = foundOption.currency; - purpose.stars = foundOption.stars; - FileLog.d("retrievePurpose: found stars option of " + productId + " from stars loaded options!"); - whenPayload.run(new Pair<AccountInstance, TLRPC.InputStorePaymentPurpose>(payload.first, purpose)); - } else { - FileLog.d("retrievePurpose: failed to find option of " + productId + " from stars loaded options"); - whenPayload.run(payload); - } - })); - return true; - } else { - TLRPC.TL_starsTopupOption foundOption = null; - for (int i = 0; i < options.size(); ++i) { - if (productId.equals(options.get(i).store_product)) { - foundOption = options.get(i); - break; - } - } - - if (foundOption != null) { - TLRPC.TL_inputStorePaymentStars purpose = new TLRPC.TL_inputStorePaymentStars(); - purpose.amount = foundOption.amount; - purpose.currency = foundOption.currency; - purpose.stars = foundOption.stars; - FileLog.d("retrievePurpose: found stars option of " + productId + " from stars options!"); - whenPayload.run(new Pair<AccountInstance, TLRPC.InputStorePaymentPurpose>(payload.first, purpose)); - return true; + }, ConnectionsManager.RequestFlagFailOnServerErrors | ConnectionsManager.RequestFlagFailOnServerErrorsExceptFloodWait | ConnectionsManager.RequestFlagInvokeAfter); } else { - FileLog.d("retrievePurpose: failed to find option of " + productId + " from stars options"); - whenPayload.run(payload); - return false; + consumeGiftPurchase(purchase, opayload.second); } } } @@ -417,7 +330,8 @@ private boolean retrievePurpose(Purchase purchase, Pair<AccountInstance, TLRPC.I private void consumeGiftPurchase(Purchase purchase, TLRPC.InputStorePaymentPurpose purpose) { if (purpose instanceof TLRPC.TL_inputStorePaymentGiftPremium || purpose instanceof TLRPC.TL_inputStorePaymentPremiumGiftCode - || purpose instanceof TLRPC.TL_inputStorePaymentStars + || purpose instanceof TLRPC.TL_inputStorePaymentStarsTopup + || purpose instanceof TLRPC.TL_inputStorePaymentStarsGift || purpose instanceof TLRPC.TL_inputStorePaymentPremiumGiveaway) { billingClient.consumeAsync( ConsumeParams.newBuilder() @@ -510,18 +424,19 @@ private void onQueriedPremiumProductDetails(BillingResult billingResult, List<Pr public static String getResponseCodeString(int code) { switch (code) { - case -3: return "SERVICE_TIMEOUT"; - case -2: return "FEATURE_NOT_SUPPORTED"; - case -1: return "SERVICE_DISCONNECTED"; - case 0: return "OK"; - case 1: return "USER_CANCELED"; - case 2: return "SERVICE_UNAVAILABLE"; - case 3: return "BILLING_UNAVAILABLE"; - case 4: return "ITEM_UNAVAILABLE"; - case 5: return "DEVELOPER_ERROR"; - case 6: return "ERROR"; - case 7: return "ITEM_ALREADY_OWNED"; - case 8: return "ITEM_NOT_OWNED"; + case BillingClient.BillingResponseCode.SERVICE_TIMEOUT: return "SERVICE_TIMEOUT"; + case BillingClient.BillingResponseCode.FEATURE_NOT_SUPPORTED: return "FEATURE_NOT_SUPPORTED"; + case BillingClient.BillingResponseCode.SERVICE_DISCONNECTED: return "SERVICE_DISCONNECTED"; + case BillingClient.BillingResponseCode.OK: return "OK"; + case BillingClient.BillingResponseCode.USER_CANCELED: return "USER_CANCELED"; + case BillingClient.BillingResponseCode.SERVICE_UNAVAILABLE: return "SERVICE_UNAVAILABLE"; + case BillingClient.BillingResponseCode.BILLING_UNAVAILABLE: return "BILLING_UNAVAILABLE"; + case BillingClient.BillingResponseCode.ITEM_UNAVAILABLE: return "ITEM_UNAVAILABLE"; + case BillingClient.BillingResponseCode.DEVELOPER_ERROR: return "DEVELOPER_ERROR"; + case BillingClient.BillingResponseCode.ERROR: return "ERROR"; + case BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED: return "ITEM_ALREADY_OWNED"; + case BillingClient.BillingResponseCode.ITEM_NOT_OWNED: return "ITEM_NOT_OWNED"; + case BillingClient.BillingResponseCode.NETWORK_ERROR: return "NETWORK_ERROR"; } return null; } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/ChatObject.java b/TMessagesProj/src/main/java/org/telegram/messenger/ChatObject.java index 51212a0de5d..420f4106a1b 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/ChatObject.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/ChatObject.java @@ -1782,7 +1782,7 @@ public static boolean isInChat(TLRPC.Chat chat) { } public static boolean canSendAsPeers(TLRPC.Chat chat) { - return ChatObject.isChannel(chat) && chat.megagroup && (ChatObject.isPublic(chat) || chat.has_geo || chat.has_link); + return ChatObject.isChannel(chat) && (!chat.megagroup && chat.signatures && ChatObject.hasAdminRights(chat) && ChatObject.canWriteToChat(chat) || chat.megagroup && (ChatObject.isPublic(chat) || chat.has_geo || chat.has_link)); } public static boolean isChannel(TLRPC.Chat chat) { @@ -1943,6 +1943,9 @@ public static long getSendAsPeerId(TLRPC.Chat chat, TLRPC.ChatFull chatFull, boo if (chat != null && chat.admin_rights != null && chat.admin_rights.anonymous) { return invertChannel ? -chat.id : chat.id; } + if (chat != null && ChatObject.isChannelAndNotMegaGroup(chat) && !chat.signatures) { + return invertChannel ? -chat.id : chat.id; + } return UserConfig.getInstance(UserConfig.selectedAccount).getClientUserId(); } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/CodeHighlighting.java b/TMessagesProj/src/main/java/org/telegram/messenger/CodeHighlighting.java index 201dfe5c654..00644f532b3 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/CodeHighlighting.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/CodeHighlighting.java @@ -309,7 +309,7 @@ private static TokenPattern[] flatRest(TokenPattern[] patterns) { for (int i = 0; i < patterns.length; ++i) { if (patterns[i].pattern != null && "REST".equals(patterns[i].pattern.patternSource)) { if (result == null) { - result = new ArrayList<>(); + result = new ArrayList<TokenPattern>(); Collections.addAll(result, patterns); } result.remove(patterns[i]); @@ -447,7 +447,7 @@ private static void matchGrammar(String text, LinkedList tokenList, TokenPattern } private static Match matchPattern(TokenPattern pattern, int pos, String text) { - Matcher matcher = pattern.pattern.getPattern(). matcher(text); + Matcher matcher = pattern.pattern.getPattern().matcher(text); matcher.region(pos, text.length()); if (!matcher.find()) { return null; diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/DownloadController.java b/TMessagesProj/src/main/java/org/telegram/messenger/DownloadController.java index 64197de0a0e..adfd4c505b5 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/DownloadController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/DownloadController.java @@ -610,6 +610,11 @@ public boolean canDownloadMedia(MessageObject messageObject) { } return true; } + if (messageObject.sponsoredMedia != null) { + return true; + } + if (messageObject.isHiddenSensitive()) + return false; return canDownloadMedia(messageObject.messageOwner) == 1; } @@ -793,7 +798,7 @@ public int canDownloadMedia(TLRPC.Message message, TLRPC.MessageMedia media) { } else { maxSize = preset.sizes[typeToIndex(type)]; } - long size = MessageObject.getMessageSize(message); + long size = MessageObject.getMediaSize(media); if (isVideo && preset.preloadVideo && size > maxSize && maxSize > 2 * 1024 * 1024) { return (mask & type) != 0 ? 2 : 0; } else { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/Emoji.java b/TMessagesProj/src/main/java/org/telegram/messenger/Emoji.java index 3f581487b6b..ff87d77eaa6 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/Emoji.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/Emoji.java @@ -270,7 +270,7 @@ public static Drawable getEmojiBigDrawable(String code) { } public static abstract class EmojiDrawable extends Drawable { - boolean fullSize = false; + public boolean fullSize = false; int placeholderColor = 0x10000000; public boolean isLoaded() { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/FileLoader.java b/TMessagesProj/src/main/java/org/telegram/messenger/FileLoader.java index 9b0d0c80f49..608bbaf45e4 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/FileLoader.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/FileLoader.java @@ -706,7 +706,7 @@ public FileLoadOperation findLoadOperationByRequestToken(final int requestToken) for (FileLoadOperation operation : loadOperationPaths.values()) { if (operation == null || operation.requestInfos == null) continue; for (FileLoadOperation.RequestInfo requestInfo : operation.requestInfos) { - if (requestInfo.requestToken == requestToken) { + if (requestInfo != null && requestInfo.requestToken == requestToken) { return operation; } } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/FileRefController.java b/TMessagesProj/src/main/java/org/telegram/messenger/FileRefController.java index 1ed983c2590..01a98db850c 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/FileRefController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/FileRefController.java @@ -1,13 +1,14 @@ package org.telegram.messenger; import android.os.SystemClock; -import android.util.Log; import org.telegram.tgnet.RequestDelegate; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.tgnet.tl.TL_stories; import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.Stories.StoriesController; import java.util.ArrayList; import java.util.Arrays; @@ -70,7 +71,20 @@ public FileRefController(int instance) { } public static String getKeyForParentObject(Object parentObject) { - if (parentObject instanceof TL_stories.StoryItem) { + if (parentObject instanceof StoriesController.BotPreview) { + StoriesController.BotPreview storyItem = (StoriesController.BotPreview) parentObject; + if (storyItem.list == null) { + FileLog.d("failed request reference can't find list in botpreview"); + return null; + } + if (storyItem.media.document != null) { + return "botstory_doc_" + storyItem.media.document.id; + } else if (storyItem.media.photo != null) { + return "botstory_photo_" + storyItem.media.photo.id; + } else { + return "botstory_" + storyItem.id; + } + } else if (parentObject instanceof TL_stories.StoryItem) { TL_stories.StoryItem storyItem = (TL_stories.StoryItem) parentObject; if (storyItem.dialogId == 0) { FileLog.d("failed request reference can't find dialogId"); @@ -81,8 +95,8 @@ public static String getKeyForParentObject(Object parentObject) { return "premium_promo"; } else if (parentObject instanceof TLRPC.TL_availableReaction) { return "available_reaction_" + ((TLRPC.TL_availableReaction) parentObject).reaction; - } else if (parentObject instanceof TLRPC.BotInfo) { - TLRPC.BotInfo botInfo = (TLRPC.BotInfo) parentObject; + } else if (parentObject instanceof TL_bots.BotInfo) { + TL_bots.BotInfo botInfo = (TL_bots.BotInfo) parentObject; return "bot_info_" + botInfo.user_id; } else if (parentObject instanceof TLRPC.TL_attachMenuBot) { TLRPC.TL_attachMenuBot bot = (TLRPC.TL_attachMenuBot) parentObject; @@ -137,7 +151,21 @@ public void requestReference(Object parentObject, Object... args) { if (BuildVars.LOGS_ENABLED) { FileLog.d("start loading request reference parent " + getObjectString(parentObject) + " args = " + args[0]); } - if (args[0] instanceof TL_stories.TL_storyItem) { + if (args[0] instanceof StoriesController.BotPreview) { + StoriesController.BotPreview storyItem = (StoriesController.BotPreview) args[0]; + if (storyItem.media.document != null) { + location = new TLRPC.TL_inputDocumentFileLocation(); + location.id = storyItem.media.document.id; + locationKey = "botstory_doc_" + storyItem.media.document.id; + } else if (storyItem.media.photo != null) { + location = new TLRPC.TL_inputPhotoFileLocation(); + location.id = storyItem.media.photo.id; + locationKey = "botstory_photo_" + storyItem.media.photo.id; + } else { + locationKey = "botstory_" + storyItem.id; + location = new TLRPC.TL_inputDocumentFileLocation(); + } + } else if (args[0] instanceof TL_stories.TL_storyItem) { TL_stories.TL_storyItem storyItem = (TL_stories.TL_storyItem) args[0]; locationKey = "story_" + storyItem.id; location = new TLRPC.TL_inputDocumentFileLocation(); @@ -401,7 +429,18 @@ private void broadcastWaitersData(ArrayList<Waiter> waiters, TLObject response, } private void requestReferenceFromServer(Object parentObject, String locationKey, String parentKey, Object[] args) { - if (parentObject instanceof TL_stories.StoryItem) { + if (parentObject instanceof StoriesController.BotPreview) { + StoriesController.BotPreview storyItem = (StoriesController.BotPreview) parentObject; + if (storyItem.list == null) { + sendErrorToObject(args, 0); + return; + } + storyItem.list.requestReference(storyItem, newStoryItem -> { + Utilities.stageQueue.postRunnable(() -> { + onRequestComplete(locationKey, parentKey, newStoryItem, null, true, false); + }); + }); + } else if (parentObject instanceof TL_stories.StoryItem) { TL_stories.StoryItem storyItem = (TL_stories.StoryItem) parentObject; TL_stories.TL_stories_getStoriesByID req = new TL_stories.TL_stories_getStoriesByID(); req.peer = getMessagesController().getInputPeer(storyItem.dialogId); @@ -424,8 +463,8 @@ private void requestReferenceFromServer(Object parentObject, String locationKey, TLRPC.TL_messages_getAvailableReactions req = new TLRPC.TL_messages_getAvailableReactions(); req.hash = 0; getConnectionsManager().sendRequest(req, (response, error) -> onRequestComplete(locationKey, parentKey, response, error, true, false)); - } else if (parentObject instanceof TLRPC.BotInfo) { - TLRPC.BotInfo botInfo = (TLRPC.BotInfo) parentObject; + } else if (parentObject instanceof TL_bots.BotInfo) { + TL_bots.BotInfo botInfo = (TL_bots.BotInfo) parentObject; TLRPC.TL_users_getFullUser req = new TLRPC.TL_users_getFullUser(); req.id = getMessagesController().getInputUser(botInfo.user_id); getConnectionsManager().sendRequest(req, (response, error) -> onRequestComplete(locationKey, parentKey, response, error, true, false)); @@ -909,7 +948,14 @@ private boolean onRequestComplete(String locationKey, String parentKey, TLObject needReplacement = new boolean[1]; } requester.completed = true; - if (response instanceof TLRPC.messages_Messages) { + if (response instanceof StoriesController.BotPreview) { + StoriesController.BotPreview newStoryItem = (StoriesController.BotPreview) response; + if (newStoryItem.media.document != null) { + result = getFileReference(newStoryItem.media.document, requester.location, needReplacement, locationReplacement); + } else if (newStoryItem.media.photo != null) { + result = getFileReference(newStoryItem.media.photo, requester.location, needReplacement, locationReplacement); + } + } else if (response instanceof TLRPC.messages_Messages) { TLRPC.messages_Messages res = (TLRPC.messages_Messages) response; if (!res.messages.isEmpty()) { for (int i = 0, size3 = res.messages.size(); i < size3; i++) { @@ -1020,7 +1066,7 @@ private boolean onRequestComplete(String locationKey, String parentKey, TLObject getMessagesController().putUsers(usersFull.users, false); getMessagesController().putChats(usersFull.chats, false); TLRPC.UserFull userFull = usersFull.full_user; - TLRPC.BotInfo botInfo = userFull.bot_info; + TL_bots.BotInfo botInfo = userFull.bot_info; if (botInfo != null) { getMessagesStorage().updateUserInfo(userFull, true); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/ImageLoader.java b/TMessagesProj/src/main/java/org/telegram/messenger/ImageLoader.java index f041026ef43..0765b148658 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/ImageLoader.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/ImageLoader.java @@ -32,7 +32,6 @@ import android.os.SystemClock; import android.provider.MediaStore; import android.text.TextUtils; -import android.util.Log; import android.util.Pair; import android.util.SparseArray; @@ -101,7 +100,6 @@ * firstframe - return firstframe for Lottie or Video animation * ignoreOrientation - do not extract EXIF orientation and do not apply it to an imagereceiver * exif — check exif contents of invert/orientation - * bnb — airbnb canvas lottie impl */ public class ImageLoader { @@ -1022,11 +1020,10 @@ public void run() { cacheOptions.firstFrame = true; } } - final boolean airbnb = cacheImage.filter != null && cacheImage.filter.contains("bnb"); if (compressed) { - lottieDrawable = new RLottieDrawable(cacheImage.finalFilePath, decompressGzip(cacheImage.finalFilePath), w, h, cacheOptions, limitFps, null, fitzModifier, airbnb); + lottieDrawable = new RLottieDrawable(cacheImage.finalFilePath, decompressGzip(cacheImage.finalFilePath), w, h, cacheOptions, limitFps, null, fitzModifier); } else { - lottieDrawable = new RLottieDrawable(cacheImage.finalFilePath, w, h, cacheOptions, limitFps, null, fitzModifier, airbnb); + lottieDrawable = new RLottieDrawable(cacheImage.finalFilePath, w, h, cacheOptions, limitFps, null, fitzModifier); } } if (lastFrameBitmap || firstFrameBitmap) { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/ImageReceiver.java b/TMessagesProj/src/main/java/org/telegram/messenger/ImageReceiver.java index 0bf24855685..855e04fd680 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/ImageReceiver.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/ImageReceiver.java @@ -2659,8 +2659,8 @@ public void stopAnimation() { public void setEmojiPaused(boolean paused) { if (emojiPaused == paused) return; emojiPaused = paused; - RLottieDrawable rLottieDrawable = getLottieAnimation(); allowStartLottieAnimation = !paused; + RLottieDrawable rLottieDrawable = getLottieAnimation(); if (rLottieDrawable != null) { if (paused) { rLottieDrawable.stop(); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/LinkifyPort.java b/TMessagesProj/src/main/java/org/telegram/messenger/LinkifyPort.java index 1e361830cdf..6be30c0443e 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/LinkifyPort.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/LinkifyPort.java @@ -6,7 +6,7 @@ public class LinkifyPort { private static String IANA_TOP_LEVEL_DOMAINS = "(?:" - + "(?:aaa|aarp|abb|abbott|abogado|academy|accenture|accountant|accountants|aco|active" + + "(?:aaa|adnl|aarp|abb|abbott|abogado|academy|accenture|accountant|accountants|aco|active" + "|actor|ads|adult|aeg|aero|afl|agency|aig|airforce|airtel|allfinanz|alsace|amica|amsterdam" + "|android|apartments|app|apple|aquarelle|aramco|archi|army|arpa|arte|asia|associates" + "|attorney|auction|audio|auto|autos|axa|azure|a[cdefgilmoqrstuwxz])" @@ -67,7 +67,7 @@ public class LinkifyPort { + "|sky|skype|sncf|soccer|social|software|sohu|solar|solutions|sony|soy|space|spiegel|spreadbetting" + "|srl|stada|starhub|statoil|stc|stcgroup|stockholm|studio|study|style|sucks|supplies" + "|supply|support|surf|surgery|suzuki|swatch|swiss|sydney|systems|s[abcdeghijklmnortuvxyz])" - + "|(?:tab|taipei|tatamotors|tatar|tattoo|tax|taxi|team|tech|technology|tel|telefonica" + + "|(?:ton|tab|taipei|tatamotors|tatar|tattoo|tax|taxi|team|tech|technology|tel|telefonica" + "|temasek|tennis|thd|theater|theatre|tickets|tienda|tips|tires|tirol|today|tokyo|tools" + "|top|toray|toshiba|tours|town|toyota|toys|trade|trading|training|travel|trust|tui|t[cdfghjklmnortvwz])" + "|(?:ubs|university|uno|uol|u[agksyz])" @@ -168,13 +168,13 @@ public class LinkifyPort { private static final String LABEL_CHAR = "a-zA-Z0-9" + UCS_CHAR_FIXED; private static final String IRI_LABEL = "[" + LABEL_CHAR + "](?:[" + LABEL_CHAR + "_\\-]{0,61}[" + LABEL_CHAR + "]){0,1}"; private static String STRICT_TLD = "(?:" + IANA_TOP_LEVEL_DOMAINS + "|" + PUNYCODE_TLD + ")"; - private static final String STRICT_HOST_NAME = "(?:(?:" + IRI_LABEL + "\\.)+" + STRICT_TLD + ")"; + public static final String STRICT_HOST_NAME = "(?:(?:" + IRI_LABEL + "\\.)+" + STRICT_TLD + ")"; private static final String STRICT_DOMAIN_NAME = "(?:" + STRICT_HOST_NAME + "|" + IP_ADDRESS_STRING + ")"; private static final String TLD = "(" + PUNYCODE_TLD + "|" + "[" + TLD_CHAR + "]{2,63}" + ")"; private static final String HOST_NAME = "(" + IRI_LABEL + "\\.)+" + TLD; private static final String DOMAIN_NAME_STR = "(" + HOST_NAME + "|" + IP_ADDRESS_STRING + ")"; private static final Pattern DOMAIN_NAME = Pattern.compile(DOMAIN_NAME_STR); - private static final String PROTOCOL = "(?i:http|https|ton|tg)://"; + private static final String PROTOCOL = "(?i:http|https|ton|tg|tonsite)://"; private static final String WORD_BOUNDARY = "(?:\\b|$|^)"; private static final String USER_INFO = "(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)" + "\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_" diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java b/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java index d8d92527927..75e8bc352eb 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java @@ -1394,13 +1394,22 @@ public static String getString(String key) { if (TextUtils.isEmpty(key)) { return "LOC_ERR:" + key; } - int resourceId = ApplicationLoader.applicationContext.getResources().getIdentifier(key, "string", ApplicationLoader.applicationContext.getPackageName()); + int resourceId = getStringResId(key); if (resourceId != 0) { return getString(key, resourceId); } return getServerString(key); } + public static int getStringResId(String key) { + return ApplicationLoader.applicationContext.getResources().getIdentifier(key, "string", ApplicationLoader.applicationContext.getPackageName()); + } + + public static String nullable(String val) { + if (val == null || val.startsWith("LOC_ERR")) return null; + return val; + } + public static String getPluralString(String key, int plural) { if (key == null || key.length() == 0 || getInstance().currentPluralRules == null) { return "LOC_ERR:" + key; @@ -1515,7 +1524,7 @@ public static String formatString(String key, String fallback, int res, int fall if (BuildVars.USE_CLOUD_STRINGS && fallback != null) { value = getInstance().localeValues.get(fallback); } - if (value == null) { + if (value == null && res != 0) { try { value = ApplicationLoader.applicationContext.getString(res); } catch (Exception e) { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java b/TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java index 3b7e205021d..4a8d75f9d78 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java @@ -5006,6 +5006,36 @@ public static String getFileName(Uri uri) { return ""; } + public static File createFileInCache(String name, String ext) { + File f = null; + try { + f = AndroidUtilities.getSharingDirectory(); + f.mkdirs(); + if (AndroidUtilities.isInternalUri(Uri.fromFile(f))) { + return null; + } + int count = 0; + do { + f = AndroidUtilities.getSharingDirectory(); + if (count == 0) { + f = new File(f, name); + } else { + int lastDotIndex = name.lastIndexOf("."); + if (lastDotIndex > 0) { + f = new File(f, name.substring(0, lastDotIndex) + " (" + count + ")" + name.substring(lastDotIndex)); + } else { + f = new File(f, name + " (" + count + ")"); + } + } + count++; + } while (f.exists()); + return f; + } catch (Exception e) { + FileLog.e(e); + } + return null; + } + public static String copyFileToCache(Uri uri, String ext) { return copyFileToCache(uri, ext, -1); } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MediaDataController.java b/TMessagesProj/src/main/java/org/telegram/messenger/MediaDataController.java index 781b0fc0b5a..1380c6222e6 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MediaDataController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MediaDataController.java @@ -58,6 +58,7 @@ import org.telegram.tgnet.SerializedData; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.EmojiThemes; import org.telegram.ui.ActionBar.Theme; @@ -387,9 +388,11 @@ public void cleanup() { loaded = false; hints.clear(); inlineBots.clear(); + webapps.clear(); AndroidUtilities.runOnUIThread(() -> { getNotificationCenter().postNotificationName(NotificationCenter.reloadHints); getNotificationCenter().postNotificationName(NotificationCenter.reloadInlineHints); + getNotificationCenter().postNotificationName(NotificationCenter.reloadWebappsHints); }); drafts.clear(); @@ -3960,7 +3963,7 @@ public void searchMessagesInChat(String query, long dialogId, long mergeDialogId } }; if (isSaved) { - loadReplyMessagesForMessages(messageObjects, dialogId, 0, lastReplyMessageId, done, guid); + loadReplyMessagesForMessages(messageObjects, dialogId, 0, lastReplyMessageId, done, guid, null); } else { done.run(); } @@ -4322,7 +4325,7 @@ private void processLoadedMedia(TLRPC.messages_Messages res, long dialogId, int if (res != null && res.messages != null) { messagesCount = res.messages.size(); } - FileLog.d("process load media messagesCount " + messagesCount + " did " + dialogId + " topicId " + topicId + " count = " + count + " max_id=" + max_id + " min_id=" + min_id + " type = " + type + " cache = " + fromCache + " classGuid = " + classGuid); + FileLog.d("process load media messagesCount " + messagesCount + " did " + dialogId + " topicId " + topicId + " count = " + count + " max_id=" + max_id + " min_id=" + min_id + " type = " + type + " cache = " + fromCache + " classGuid = " + classGuid + " topReached=" + topReached); } if (fromCache != 0 && res != null && res.messages != null && ((res.messages.isEmpty() && min_id == 0) || (res.messages.size() <= 1 && min_id != 0)) && !DialogObject.isEncryptedDialog(dialogId)) { if (fromCache == 2) { @@ -4821,6 +4824,7 @@ public void loadMusic(long dialogId, long maxId, long minId) { public ArrayList<TLRPC.TL_topPeer> hints = new ArrayList<>(); public ArrayList<TLRPC.TL_topPeer> inlineBots = new ArrayList<>(); + public ArrayList<TLRPC.TL_topPeer> webapps = new ArrayList<>(); boolean loaded; boolean loading; @@ -5030,6 +5034,7 @@ public void loadHints(boolean cache) { getMessagesStorage().getStorageQueue().postRunnable(() -> { ArrayList<TLRPC.TL_topPeer> hintsNew = new ArrayList<>(); ArrayList<TLRPC.TL_topPeer> inlineBotsNew = new ArrayList<>(); + ArrayList<TLRPC.TL_topPeer> webappsNew = new ArrayList<>(); ArrayList<TLRPC.User> users = new ArrayList<>(); ArrayList<TLRPC.Chat> chats = new ArrayList<>(); long selfUserId = getUserConfig().getClientUserId(); @@ -5058,6 +5063,8 @@ public void loadHints(boolean cache) { hintsNew.add(peer); } else if (type == 1) { inlineBotsNew.add(peer); + } else if (type == 2) { + webappsNew.add(peer); } } cursor.dispose(); @@ -5075,10 +5082,12 @@ public void loadHints(boolean cache) { loaded = true; hints = hintsNew; inlineBots = inlineBotsNew; + webapps = webappsNew; buildShortcuts(); getNotificationCenter().postNotificationName(NotificationCenter.reloadHints); getNotificationCenter().postNotificationName(NotificationCenter.reloadInlineHints); - if (Math.abs(getUserConfig().lastHintsSyncTime - (int) (System.currentTimeMillis() / 1000)) >= 24 * 60 * 60) { + getNotificationCenter().postNotificationName(NotificationCenter.reloadWebappsHints); + if (Math.abs(getUserConfig().lastHintsSyncTime - (int) (System.currentTimeMillis() / 1000)) >= 24 * 60 * 60 || BuildVars.DEBUG_PRIVATE_VERSION) { loadHints(false); } }); @@ -5096,6 +5105,7 @@ public void loadHints(boolean cache) { req.groups = false; req.channels = false; req.bots_inline = true; + req.bots_app = true; req.offset = 0; req.limit = 20; getConnectionsManager().sendRequest(req, (response, error) -> { @@ -5109,6 +5119,9 @@ public void loadHints(boolean cache) { if (category.category instanceof TLRPC.TL_topPeerCategoryBotsInline) { inlineBots = category.peers; getUserConfig().botRatingLoadTime = (int) (System.currentTimeMillis() / 1000); + } else if (category.category instanceof TLRPC.TL_topPeerCategoryBotsApp) { + webapps = category.peers; + getUserConfig().webappRatingLoadTime = (int) (System.currentTimeMillis() / 1000); } else { hints = category.peers; long selfUserId = getUserConfig().getClientUserId(); @@ -5126,6 +5139,7 @@ public void loadHints(boolean cache) { buildShortcuts(); getNotificationCenter().postNotificationName(NotificationCenter.reloadHints); getNotificationCenter().postNotificationName(NotificationCenter.reloadInlineHints); + getNotificationCenter().postNotificationName(NotificationCenter.reloadWebappsHints); getMessagesStorage().getStorageQueue().postRunnable(() -> { try { getMessagesStorage().getDatabase().executeFast("DELETE FROM chat_hints WHERE 1").stepThis().dispose(); @@ -5138,6 +5152,8 @@ public void loadHints(boolean cache) { TLRPC.TL_topPeerCategoryPeers category = topPeers.categories.get(a); if (category.category instanceof TLRPC.TL_topPeerCategoryBotsInline) { type = 1; + } else if (category.category instanceof TLRPC.TL_topPeerCategoryBotsApp) { + type = 2; } else { type = 0; } @@ -5180,8 +5196,10 @@ public void loadHints(boolean cache) { public void clearTopPeers() { hints.clear(); inlineBots.clear(); + webapps.clear(); getNotificationCenter().postNotificationName(NotificationCenter.reloadHints); getNotificationCenter().postNotificationName(NotificationCenter.reloadInlineHints); + getNotificationCenter().postNotificationName(NotificationCenter.reloadWebappsHints); getMessagesStorage().getStorageQueue().postRunnable(() -> { try { getMessagesStorage().getDatabase().executeFast("DELETE FROM chat_hints WHERE 1").stepThis().dispose(); @@ -5192,7 +5210,7 @@ public void clearTopPeers() { buildShortcuts(); } - public void increaseInlineRaiting(long uid) { + public void increaseInlineRating(long uid) { if (!getUserConfig().suggestContacts) { return; } @@ -5233,8 +5251,48 @@ public void increaseInlineRaiting(long uid) { getNotificationCenter().postNotificationName(NotificationCenter.reloadInlineHints); } + public void increaseWebappRating(long uid) { + final TLRPC.User user = getMessagesController().getUser(uid); + if (user == null || !user.bot) return; + + int dt; + if (getUserConfig().webappRatingLoadTime != 0) { + dt = Math.max(1, ((int) (System.currentTimeMillis() / 1000)) - getUserConfig().webappRatingLoadTime); + } else { + dt = 60; + } + + TLRPC.TL_topPeer peer = null; + for (int a = 0; a < inlineBots.size(); a++) { + TLRPC.TL_topPeer p = inlineBots.get(a); + if (p.peer.user_id == uid) { + peer = p; + break; + } + } + if (peer == null) { + peer = new TLRPC.TL_topPeer(); + peer.peer = new TLRPC.TL_peerUser(); + peer.peer.user_id = uid; + webapps.add(peer); + } + peer.rating += Math.exp(dt / getMessagesController().ratingDecay); + Collections.sort(inlineBots, (lhs, rhs) -> { + if (lhs.rating > rhs.rating) { + return -1; + } else if (lhs.rating < rhs.rating) { + return 1; + } + return 0; + }); + if (webapps.size() > 20) { + webapps.remove(webapps.size() - 1); + } + savePeer(uid, 2, peer.rating); + getNotificationCenter().postNotificationName(NotificationCenter.reloadWebappsHints); + } + public void removeInline(long dialogId) { - TLRPC.TL_topPeerCategoryPeers category = null; for (int a = 0; a < inlineBots.size(); a++) { if (inlineBots.get(a).peer.user_id == dialogId) { inlineBots.remove(a); @@ -5251,6 +5309,23 @@ public void removeInline(long dialogId) { } } + public void removeWebapp(long dialogId) { + for (int a = 0; a < webapps.size(); a++) { + if (webapps.get(a).peer.user_id == dialogId) { + webapps.remove(a); + TLRPC.TL_contacts_resetTopPeerRating req = new TLRPC.TL_contacts_resetTopPeerRating(); + req.category = new TLRPC.TL_topPeerCategoryBotsApp(); + req.peer = getMessagesController().getInputPeer(dialogId); + getConnectionsManager().sendRequest(req, (response, error) -> { + + }); + deletePeer(dialogId, 2); + getNotificationCenter().postNotificationName(NotificationCenter.reloadWebappsHints); + return; + } + } + } + public void removePeer(long uid) { for (int a = 0; a < hints.size(); a++) { if (hints.get(a).peer.user_id == uid) { @@ -5942,9 +6017,10 @@ private static void removeEmptyMessages(ArrayList<TLRPC.Message> messages) { } } - public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long dialogId, int mode, long threadMessageId, Runnable callback, int classGuid) { + public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long dialogId, int mode, long threadMessageId, Runnable callback, int classGuid, Timer logLogger) { final boolean scheduled = mode == ChatActivity.MODE_SCHEDULED; if (DialogObject.isEncryptedDialog(dialogId)) { + Timer.Task t1 = Timer.start(logLogger, "loadReplyMessagesForMessages: (encrypted) finding messages to load"); ArrayList<Long> replyMessages = new ArrayList<>(); LongSparseArray<ArrayList<MessageObject>> replyMessageRandomOwners = new LongSparseArray<>(); for (int a = 0; a < messages.size(); a++) { @@ -5971,8 +6047,11 @@ public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long } return; } - + Timer.done(t1); + Timer.Task t2 = Timer.start(logLogger, "loadReplyMessagesForMessages (encrypted) storageQueue.postRunnable"); getMessagesStorage().getStorageQueue().postRunnable(() -> { + Timer.done(t2); + Timer.Task t3 = Timer.start(logLogger, "loadReplyMessagesForMessages: (encrypted) loading those messages from storage"); try { ArrayList<MessageObject> loadedMessages = new ArrayList<>(); SQLiteCursor cursor = getMessagesStorage().getDatabase().queryFinalized(String.format(Locale.US, "SELECT m.data, m.mid, m.date, r.random_id FROM randoms_v2 as r INNER JOIN messages_v2 as m ON r.mid = m.mid AND r.uid = m.uid WHERE r.random_id IN(%s)", TextUtils.join(",", replyMessages))); @@ -6015,7 +6094,12 @@ public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long } } } - AndroidUtilities.runOnUIThread(() -> getNotificationCenter().postNotificationName(NotificationCenter.replyMessagesDidLoad, dialogId, loadedMessages, null)); + Timer.done(t3); + Timer.Task t4 = Timer.start(logLogger, "loadReplyMessagesForMessages (encrypted) runOnUIThread: posting notification"); + AndroidUtilities.runOnUIThread(() -> { + Timer.done(t4); + getNotificationCenter().postNotificationName(NotificationCenter.replyMessagesDidLoad, dialogId, loadedMessages, null); + }); if (callback != null) { callback.run(); } @@ -6027,6 +6111,7 @@ public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long LongSparseArray<SparseArray<ArrayList<MessageObject>>> replyMessageOwners = new LongSparseArray<>(); LongSparseArray<ArrayList<Integer>> dialogReplyMessagesIds = new LongSparseArray<>(); LongSparseArray<ArrayList<MessageObject>> messagesWithUnknownStories = null; + Timer.Task t2 = Timer.start(logLogger, "loadReplyMessagesForMessages: filling replies from the same array"); for (int a = 0; a < messages.size(); a++) { MessageObject messageObject = messages.get(a); if (messageObject == null) { @@ -6054,6 +6139,8 @@ public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long } } } + Timer.done(t2); + Timer.Task t3 = Timer.start(logLogger, "loadReplyMessagesForMessages: gathering ids of missing reply data"); for (int a = 0; a < messages.size(); a++) { MessageObject messageObject = messages.get(a); if (messageObject == null) { @@ -6070,6 +6157,7 @@ public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long array = new ArrayList<>(); messagesWithUnknownStories.put(storyDialogId, array); } + Timer.log(logLogger, "+story did=" + storyDialogId + " at "+(messageObject.type == MessageObject.TYPE_STORY ? "forwarded" : "mentioned")+" #" + messageObject.getId()); array.add(messageObject); } else { long storyDialogId = DialogObject.getPeerDialogId(messageObject.messageOwner.media.peer); @@ -6086,6 +6174,7 @@ public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long array = new ArrayList<>(); messagesWithUnknownStories.put(storyDialogId, array); } + Timer.log(logLogger, "+story did=" + storyDialogId + " at replied #" + messageObject.getId()); array.add(messageObject); } else { long storyDialogId = DialogObject.getPeerDialogId(messageObject.messageOwner.reply_to.peer); @@ -6140,6 +6229,7 @@ public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long } } arrayList.add(messageObject); + Timer.log(logLogger, "+message did=" + -channelId + " mid="+messageId+" at replied #" + messageObject.getId()); } if ( messageObject.type == MessageObject.TYPE_TEXT && @@ -6162,6 +6252,7 @@ public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long array = new ArrayList<>(); messagesWithUnknownStories.put(storyDialogId, array); } + Timer.log(logLogger, "+story did=" + storyDialogId + " at webpage of #" + messageObject.getId()); array.add(messageObject); } else { long storyDialogId = DialogObject.getPeerDialogId(attrStory.peer); @@ -6171,6 +6262,7 @@ public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long } } } + Timer.done(t3); if (replyMessageOwners.isEmpty() && messagesWithUnknownStories == null) { if (callback != null) { callback.run(); @@ -6180,8 +6272,10 @@ public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long LongSparseArray<ArrayList<MessageObject>> finalMessagesWithUnknownStories = messagesWithUnknownStories; + Timer.Task t4 = Timer.start(logLogger, "loadReplyMessagesForMessages: storageQueue.postRunnable"); AtomicInteger requestsCount = new AtomicInteger(2); getMessagesStorage().getStorageQueue().postRunnable(() -> { + Timer.done(t4); try { getMessagesController().getStoriesController().fillMessagesWithStories(finalMessagesWithUnknownStories, () -> { if (requestsCount.decrementAndGet() == 0) { @@ -6189,8 +6283,9 @@ public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long AndroidUtilities.runOnUIThread(callback); } } - }, classGuid); + }, classGuid, logLogger); if (replyMessageOwners.isEmpty()) { + Timer.log(logLogger, "loadReplyMessagesForMessages: empty replyMessageOwners"); if (requestsCount.decrementAndGet() == 0) { if (callback != null) { AndroidUtilities.runOnUIThread(callback); @@ -6198,6 +6293,9 @@ public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long } return; } + + Timer.Task t5 = Timer.start(logLogger, "loadReplyMessagesForMessages: getting reply messages"); + ArrayList<TLRPC.Message> result = new ArrayList<>(); ArrayList<TLRPC.User> users = new ArrayList<>(); ArrayList<TLRPC.Chat> chats = new ArrayList<>(); @@ -6257,13 +6355,16 @@ public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long broadcastReplyMessages(result, replyMessageOwners, users, chats, dialogId, true); if (!dialogReplyMessagesIds.isEmpty()) { + Timer.done(t5); for (int a = 0, N = dialogReplyMessagesIds.size(); a < N; a++) { long channelId = dialogReplyMessagesIds.keyAt(a); if (scheduled) { + Timer.Task t6 = Timer.start(logLogger, "loadReplyMessagesForMessages: load scheduled"); TLRPC.TL_messages_getScheduledMessages req = new TLRPC.TL_messages_getScheduledMessages(); req.peer = getMessagesController().getInputPeer(dialogId); req.id = dialogReplyMessagesIds.valueAt(a); int reqId = getConnectionsManager().sendRequest(req, (response, error) -> { + Timer.done(t6); if (error == null) { TLRPC.messages_Messages messagesRes = (TLRPC.messages_Messages) response; for (int i = 0; i < messagesRes.messages.size(); i++) { @@ -6317,6 +6418,8 @@ public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long getMessagesStorage().putUsersAndChats(messagesRes.users, messagesRes.chats, true, true); saveReplyMessages(replyMessageOwners, messagesRes.messages, scheduled); } + } else { + Timer.log(logLogger, "getScheduledMessages error: " + error.code + " " + error.text); } if (requestsCount.decrementAndGet() == 0) { if (callback != null) { @@ -6328,10 +6431,12 @@ public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long getConnectionsManager().bindRequestToGuid(reqId, classGuid); } } else if (channelId != 0) { + Timer.Task t6 = Timer.start(logLogger, "loadReplyMessagesForMessages: load channel messages"); TLRPC.TL_channels_getMessages req = new TLRPC.TL_channels_getMessages(); req.channel = getMessagesController().getInputChannel(channelId); req.id = dialogReplyMessagesIds.valueAt(a); int reqId = getConnectionsManager().sendRequest(req, (response, error) -> { + Timer.done(t6); if (error == null) { TLRPC.messages_Messages messagesRes = (TLRPC.messages_Messages) response; for (int i = 0; i < messagesRes.messages.size(); i++) { @@ -6345,6 +6450,8 @@ public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long broadcastReplyMessages(messagesRes.messages, replyMessageOwners, messagesRes.users, messagesRes.chats, dialogId, false); getMessagesStorage().putUsersAndChats(messagesRes.users, messagesRes.chats, true, true); saveReplyMessages(replyMessageOwners, messagesRes.messages, scheduled); + } else { + Timer.log(logLogger, "channels.getMessages error: " + error.code + " " + error.text); } if (requestsCount.decrementAndGet() == 0) { if (callback != null) { @@ -6356,9 +6463,11 @@ public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long getConnectionsManager().bindRequestToGuid(reqId, classGuid); } } else { + Timer.Task t6 = Timer.start(logLogger, "loadReplyMessagesForMessages: load messages"); TLRPC.TL_messages_getMessages req = new TLRPC.TL_messages_getMessages(); req.id = dialogReplyMessagesIds.valueAt(a); int reqId = getConnectionsManager().sendRequest(req, (response, error) -> { + Timer.done(t6); if (error == null) { TLRPC.messages_Messages messagesRes = (TLRPC.messages_Messages) response; for (int i = 0; i < messagesRes.messages.size(); i++) { @@ -6371,6 +6480,8 @@ public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long broadcastReplyMessages(messagesRes.messages, replyMessageOwners, messagesRes.users, messagesRes.chats, dialogId, false); getMessagesStorage().putUsersAndChats(messagesRes.users, messagesRes.chats, true, true); saveReplyMessages(replyMessageOwners, messagesRes.messages, scheduled); + } else { + Timer.log(logLogger, "messages.getMessages error: " + error.code + " " + error.text); } if (requestsCount.decrementAndGet() == 0) { if (callback != null) { @@ -6384,6 +6495,7 @@ public void loadReplyMessagesForMessages(ArrayList<MessageObject> messages, long } } } else { + Timer.done(t5); if (requestsCount.decrementAndGet() == 0) { if (callback != null) { AndroidUtilities.runOnUIThread(callback); @@ -7721,7 +7833,7 @@ public void endTransaction() { //---------------- DRAFT END ---------------- - private HashMap<String, TLRPC.BotInfo> botInfos = new HashMap<>(); + private HashMap<String, TL_bots.BotInfo> botInfos = new HashMap<>(); private LongSparseArray<ArrayList<TLRPC.Message>> botDialogKeyboards = new LongSparseArray<>(); private HashMap<MessagesStorage.TopicKey, TLRPC.Message> botKeyboards = new HashMap<>(); private LongSparseArray<MessagesStorage.TopicKey> botKeyboardsByMids = new LongSparseArray(); @@ -7813,8 +7925,8 @@ public void loadBotKeyboard(MessagesStorage.TopicKey topicKey) { }); } - private TLRPC.BotInfo loadBotInfoInternal(long uid, long dialogId) throws SQLiteException { - TLRPC.BotInfo botInfo = null; + private TL_bots.BotInfo loadBotInfoInternal(long uid, long dialogId) throws SQLiteException { + TL_bots.BotInfo botInfo = null; SQLiteCursor cursor = getMessagesStorage().getDatabase().queryFinalized(String.format(Locale.US, "SELECT info FROM bot_info_v2 WHERE uid = %d AND dialogId = %d", uid, dialogId)); if (cursor.next()) { NativeByteBuffer data; @@ -7822,7 +7934,7 @@ private TLRPC.BotInfo loadBotInfoInternal(long uid, long dialogId) throws SQLite if (!cursor.isNull(0)) { data = cursor.byteBufferValue(0); if (data != null) { - botInfo = TLRPC.BotInfo.TLdeserialize(data, data.readInt32(false), false); + botInfo = TL_bots.BotInfo.TLdeserialize(data, data.readInt32(false), false); data.reuse(); } } @@ -7831,9 +7943,16 @@ private TLRPC.BotInfo loadBotInfoInternal(long uid, long dialogId) throws SQLite return botInfo; } + public TL_bots.BotInfo getBotInfoCached(long uid, long dialogId) { + return botInfos.get(uid + "_" + dialogId); + } + public void loadBotInfo(long uid, long dialogId, boolean cache, int classGuid) { + loadBotInfo(uid, dialogId, cache, classGuid, null); + } + public void loadBotInfo(long uid, long dialogId, boolean cache, int classGuid, Utilities.Callback<TL_bots.BotInfo> whenReceived) { if (cache) { - TLRPC.BotInfo botInfo = botInfos.get(uid + "_" + dialogId); + TL_bots.BotInfo botInfo = botInfos.get(uid + "_" + dialogId); if (botInfo != null) { getNotificationCenter().postNotificationName(NotificationCenter.botInfoDidLoad, botInfo, classGuid); return; @@ -7841,9 +7960,20 @@ public void loadBotInfo(long uid, long dialogId, boolean cache, int classGuid) { } getMessagesStorage().getStorageQueue().postRunnable(() -> { try { - TLRPC.BotInfo botInfo = loadBotInfoInternal(uid, dialogId); + TL_bots.BotInfo botInfo = loadBotInfoInternal(uid, dialogId); if (botInfo != null) { - AndroidUtilities.runOnUIThread(() -> getNotificationCenter().postNotificationName(NotificationCenter.botInfoDidLoad, botInfo, classGuid)); + AndroidUtilities.runOnUIThread(() -> { + if (whenReceived != null) { + whenReceived.run(botInfo); + } + getNotificationCenter().postNotificationName(NotificationCenter.botInfoDidLoad, botInfo, classGuid); + }); + } else if (whenReceived != null) { + AndroidUtilities.runOnUIThread(() -> { + if (whenReceived != null) { + whenReceived.run(null); + } + }); } } catch (Exception e) { FileLog.e(e); @@ -7918,7 +8048,7 @@ public void putBotKeyboard(MessagesStorage.TopicKey topicKey, TLRPC.Message mess } } - public void putBotInfo(long dialogId, TLRPC.BotInfo botInfo) { + public void putBotInfo(long dialogId, TL_bots.BotInfo botInfo) { if (botInfo == null) { return; } @@ -7942,14 +8072,14 @@ public void putBotInfo(long dialogId, TLRPC.BotInfo botInfo) { } public void updateBotInfo(long dialogId, TLRPC.TL_updateBotCommands update) { - TLRPC.BotInfo botInfo = botInfos.get(update.bot_id + "_" + dialogId); + TL_bots.BotInfo botInfo = botInfos.get(update.bot_id + "_" + dialogId); if (botInfo != null) { botInfo.commands = update.commands; getNotificationCenter().postNotificationName(NotificationCenter.botInfoDidLoad, botInfo, 0); } getMessagesStorage().getStorageQueue().postRunnable(() -> { try { - TLRPC.BotInfo info = loadBotInfoInternal(update.bot_id, dialogId); + TL_bots.BotInfo info = loadBotInfoInternal(update.bot_id, dialogId); if (info != null) { info.commands = update.commands; } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessageLoaderLogger.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessageLoaderLogger.java deleted file mode 100644 index 6e7421ae572..00000000000 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessageLoaderLogger.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.telegram.messenger; - -public class MessageLoaderLogger { - - final long dialogId; - final int count; - final int loadIndex; - final long startTime; - - long moveToStorageQueueTime; - long getFromDatabaseTime; - long moveToStageQueueTime; - long stageQueueProccessing; - - boolean reload; - - public MessageLoaderLogger(long dialogId, int loadIndex, int count) { - this.dialogId = dialogId; - this.count = count; - this.loadIndex = loadIndex; - startTime = System.currentTimeMillis(); - } - - public void logStorageQueuePost() { - moveToStorageQueueTime = System.currentTimeMillis() - startTime; - } - - public void logStorageProccessing() { - getFromDatabaseTime = System.currentTimeMillis() - startTime; - } - - public void logStageQueuePost() { - moveToStageQueueTime = System.currentTimeMillis() - startTime; - } - - public void reload() { - reload = true; - } - - public void logStageQueueProcessing() { - stageQueueProccessing = System.currentTimeMillis() - startTime; - } - - public void finish() { - long totalTime = System.currentTimeMillis() - startTime; - FileLog.d("MessageLoaderLogger dialogId=" + dialogId + " index=" + loadIndex + " count=" + count + " " + - " moveToStorageQueueTime=" + moveToStorageQueueTime + - " getFromDatabaseTime=" + getFromDatabaseTime + - " moveToStageQueueTime=" + moveToStageQueueTime + - " stageQueueProccessing=" + stageQueueProccessing + - " wasReload=" + reload + " totalTime=" + totalTime - ); - } -} diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java index 744ff92bf47..d75f5e8d216 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java @@ -33,6 +33,7 @@ import android.text.style.URLSpan; import android.text.util.Linkify; import android.util.Base64; +import android.util.Log; import androidx.annotation.NonNull; import androidx.collection.LongSparseArray; @@ -75,6 +76,8 @@ import org.telegram.ui.PeerColorActivity; import org.telegram.ui.Stars.StarsController; import org.telegram.ui.Stars.StarsIntroActivity; +import org.telegram.ui.Stories.StoriesController; +import org.telegram.ui.web.BotWebViewContainer; import java.io.BufferedReader; import java.io.File; @@ -131,6 +134,7 @@ public class MessageObject { public static final int TYPE_JOINED_CHANNEL = 27; // recommendations list public static final int TYPE_GIVEAWAY_RESULTS = 28; public static final int TYPE_PAID_MEDIA = 29; // messageMediaPaidMedia with stars + public static final int TYPE_GIFT_STARS = 30; public int localType; public String localName; @@ -141,8 +145,10 @@ public class MessageObject { public boolean localSupergroup; public Boolean cachedIsSupergroup; public boolean localEdit; + public StoriesController.StoriesList parentStoriesList; public TLRPC.Message messageOwner; public TL_stories.StoryItem storyItem; + public StoriesController.UploadingStory uploadingStory; public TLRPC.Document emojiAnimatedSticker; public Long emojiAnimatedStickerId; public boolean isTopicMainMessage; @@ -222,6 +228,7 @@ public class MessageObject { public String sponsoredInfo, sponsoredAdditionalInfo; public String sponsoredButtonText; public TLRPC.TL_peerColor sponsoredColor; + public TLRPC.MessageMedia sponsoredMedia; public boolean sponsoredCanReport; public boolean replyTextEllipsized; @@ -287,7 +294,7 @@ public int getChatMode() { private boolean hasUnwrappedEmoji; public int emojiOnlyCount, animatedEmojiCount; - private int totalAnimatedEmojiCount; + public int totalAnimatedEmojiCount; private boolean layoutCreated; private int generatedWithMinSize; private float generatedWithDensity; @@ -488,7 +495,54 @@ public int getEmojiOnlyCount() { } public boolean hasMediaSpoilers() { - return !isRepostPreview && (messageOwner.media != null && messageOwner.media.spoiler || needDrawBluredPreview()); + return !isRepostPreview && (messageOwner.media != null && messageOwner.media.spoiler || needDrawBluredPreview()) || isHiddenSensitive(); + } + + public Boolean isSensitiveCached; + public boolean isSensitive() { + if (isSensitiveCached != null) return isSensitiveCached; + if (messageOwner == null) return false; + if (!canBeSensitive()) return false; + if (!messageOwner.restriction_reason.isEmpty()) { + for (int i = 0; i < messageOwner.restriction_reason.size(); ++i) { + TLRPC.RestrictionReason reason = messageOwner.restriction_reason.get(i); + if ( + "sensitive".equals(reason.reason) && + ("all".equals(reason.platform) || !ApplicationLoader.isStandaloneBuild() && !BuildVars.isBetaApp() && "android".equals(reason.platform)) + ) { + return isSensitiveCached = true; + } + } + } + if (getDialogId() < 0) { + final TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-getDialogId()); + if (chat != null && chat.restriction_reason != null) { + for (int i = 0; i < chat.restriction_reason.size(); ++i) { + TLRPC.RestrictionReason reason = chat.restriction_reason.get(i); + if ( + "sensitive".equals(reason.reason) && + ("all".equals(reason.platform) || !ApplicationLoader.isStandaloneBuild() && !BuildVars.isBetaApp() && "android".equals(reason.platform)) + ) { + return isSensitiveCached = true; + } + } + } + } + return isSensitiveCached = false; + } + + public boolean isHiddenSensitive() { + return isSensitive() && !MessagesController.getInstance(currentAccount).showSensitiveContent(); + } + + public boolean canBeSensitive() { + return messageOwner != null && ( + type == TYPE_PHOTO || + type == TYPE_VIDEO || + type == TYPE_FILE || + type == TYPE_GIF || + type == TYPE_ROUND_VIDEO + ) && !sendPreview && !isRepostPreview && !isOutOwner() && messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENT; } public boolean shouldDrawReactions() { @@ -760,6 +814,7 @@ public static class TextLayoutBlock { public int padTop, padBottom; public int charactersOffset; public int charactersEnd; + public int originalWidth; public int height; public int heightByOffset; public byte directionFlags; @@ -2414,6 +2469,12 @@ public MessageObject(int accountNum, TLRPC.TL_channelAdminLogEvent event, ArrayL } else { messageText = replaceWithLink(LocaleController.getString("EventLogToggledSignaturesOff", R.string.EventLogToggledSignaturesOff), "un1", fromUser); } + } else if (event.action instanceof TLRPC.TL_channelAdminLogEventActionToggleSignatureProfiles) { + if (((TLRPC.TL_channelAdminLogEventActionToggleSignatureProfiles) event.action).value) { + messageText = replaceWithLink(LocaleController.getString(R.string.EventLogToggledSignaturesProfilesOn), "un1", fromUser); + } else { + messageText = replaceWithLink(LocaleController.getString(R.string.EventLogToggledSignaturesProfilesOff), "un1", fromUser); + } } else if (event.action instanceof TLRPC.TL_channelAdminLogEventActionToggleInvites) { if (((TLRPC.TL_channelAdminLogEventActionToggleInvites) event.action).new_value) { messageText = replaceWithLink(LocaleController.getString("EventLogToggledInvitesOn", R.string.EventLogToggledInvitesOn), "un1", fromUser); @@ -2695,9 +2756,12 @@ public MessageObject(int accountNum, TLRPC.TL_channelAdminLogEvent event, ArrayL } else if (event.action instanceof TLRPC.TL_channelAdminLogEventActionParticipantJoinByInvite) { TLRPC.TL_channelAdminLogEventActionParticipantJoinByInvite action = (TLRPC.TL_channelAdminLogEventActionParticipantJoinByInvite) event.action; if (action.via_chatlist) { - messageText = replaceWithLink(LocaleController.getString("ActionInviteUserFolder", R.string.ActionInviteUserFolder), "un1", fromUser); + messageText = replaceWithLink(LocaleController.getString(ChatObject.isChannelAndNotMegaGroup(chat) ? R.string.ActionInviteChannelUserFolder : R.string.ActionInviteUserFolder), "un1", fromUser); } else { - messageText = replaceWithLink(LocaleController.getString("ActionInviteUser", R.string.ActionInviteUser), "un1", fromUser); + messageText = replaceWithLink(LocaleController.getString(ChatObject.isChannelAndNotMegaGroup(chat) ? R.string.ActionInviteChannelUser : R.string.ActionInviteUser), "un1", fromUser); + } + if (action.invite != null && !TextUtils.isEmpty(action.invite.link)) { + messageText = TextUtils.concat(messageText, " ", action.invite.link); } } else if (event.action instanceof TLRPC.TL_channelAdminLogEventActionToggleNoForwards) { TLRPC.TL_channelAdminLogEventActionToggleNoForwards action = (TLRPC.TL_channelAdminLogEventActionToggleNoForwards) event.action; @@ -3538,6 +3602,7 @@ public static void updateReactions(TLRPC.Message message, TLRPC.TL_messageReacti } message.reactions = reactions; message.flags |= 1048576; + FileLog.d("msg#"+message.id+" updateReactions out=" + message.out); } public boolean hasReactions() { @@ -4144,6 +4209,16 @@ private void updateMessageText(AbstractMap<Long, TLRPC.User> users, AbstractMap< messageText = replaceWithLink(messageText, "un1", fromObject); } } + } else if (messageOwner.action instanceof TLRPC.TL_messageActionPaymentRefunded) { + TLRPC.TL_messageActionPaymentRefunded action = (TLRPC.TL_messageActionPaymentRefunded) messageOwner.action; + long did = DialogObject.getPeerDialogId(action.peer); + TLObject who; + if (did >= 0) { + who = getUser(users, sUsers, did); + } else { + who = getChat(chats, sChats, -did); + } + messageText = StarsIntroActivity.replaceStars(replaceWithLink(LocaleController.formatString(R.string.ActionRefunded, action.currency + " " + LocaleController.formatNumber(action.total_amount, ',')), "un1", who)); } else if (messageOwner.action instanceof TLRPC.TL_messageActionChatAddUser) { long singleUserId = messageOwner.action.user_id; if (singleUserId == 0 && messageOwner.action.users.size() == 1) { @@ -4200,9 +4275,9 @@ private void updateMessageText(AbstractMap<Long, TLRPC.User> users, AbstractMap< } } else if (messageOwner.action instanceof TLRPC.TL_messageActionChatJoinedByLink) { if (isOut()) { - messageText = LocaleController.getString("ActionInviteYou", R.string.ActionInviteYou); + messageText = LocaleController.getString(R.string.ActionInviteYou); } else { - messageText = replaceWithLink(LocaleController.getString("ActionInviteUser", R.string.ActionInviteUser), "un1", fromObject); + messageText = replaceWithLink(LocaleController.getString(R.string.ActionInviteUser), "un1", fromObject); } } else if (messageOwner.action instanceof TLRPC.TL_messageActionGiveawayLaunch) { TLRPC.Chat chat = messageOwner.peer_id != null && messageOwner.peer_id.channel_id != 0 ? getChat(chats, sChats, messageOwner.peer_id.channel_id) : null; @@ -4245,6 +4320,24 @@ private void updateMessageText(AbstractMap<Long, TLRPC.User> users, AbstractMap< stringBuilder.append(LocaleController.formatPluralString(isChannel ? "BoostingGiveawayServiceUndistributed" : "BoostingGiveawayServiceUndistributedGroup", giveawayResults.unclaimed_count)); } messageText = stringBuilder; + } else if (messageOwner.action instanceof TLRPC.TL_messageActionGiftStars) { + if (fromObject instanceof TLRPC.User && ((TLRPC.User) fromObject).self) { + TLRPC.User user = getUser(users, sUsers, messageOwner.peer_id.user_id); + messageText = replaceWithLink(AndroidUtilities.replaceTags(LocaleController.getString(R.string.ActionGiftOutbound)), "un1", user); + } else if (fromObject instanceof TLRPC.User && UserObject.isService(((TLRPC.User) fromObject).id)) { + messageText = TextUtils.replace(AndroidUtilities.replaceTags(LocaleController.getString(R.string.ActionGiftInbound)), new String[] {"un1"}, new CharSequence[]{ LocaleController.getString(R.string.StarsTransactionUnknown) }); + } else { + messageText = replaceWithLink(AndroidUtilities.replaceTags(LocaleController.getString(R.string.ActionGiftInbound)), "un1", fromObject); + } + int i = messageText.toString().indexOf("un2"); + if (i != -1) { + SpannableStringBuilder sb = SpannableStringBuilder.valueOf(messageText); + CharSequence price = BillingController.getInstance().formatCurrency(messageOwner.action.amount, messageOwner.action.currency); + if ((messageOwner.action.flags & 1) != 0) { + price = String.format("%.2f", (messageOwner.action.cryptoAmount * Math.pow(10, -9))) + " " + messageOwner.action.cryptoCurrency + " (~ " + price + ")"; + } + messageText = sb.replace(i, i + 3, price); + } } else if (messageOwner.action instanceof TLRPC.TL_messageActionGiftCode && ((TLRPC.TL_messageActionGiftCode) messageOwner.action).boost_peer != null) { messageText = LocaleController.getString("BoostingReceivedGiftNoName", R.string.BoostingReceivedGiftNoName); } else if (messageOwner.action instanceof TLRPC.TL_messageActionGiftPremium || messageOwner.action instanceof TLRPC.TL_messageActionGiftCode) { @@ -4748,11 +4841,11 @@ private void updateMessageText(AbstractMap<Long, TLRPC.User> users, AbstractMap< } } else { isRestrictedMessage = false; - String restrictionReason = MessagesController.getRestrictionReason(messageOwner.restriction_reason); + String restrictionReason = MessagesController.getInstance(currentAccount).getRestrictionReason(messageOwner.restriction_reason); if (!TextUtils.isEmpty(restrictionReason)) { messageText = restrictionReason; isRestrictedMessage = true; - } else if (!isMediaEmpty()) { + } else if (!isMediaEmpty() && !isSponsored()) { // messageText = getMediaTitle(getMedia(messageOwner)); // I'm afraid doing this if (getMedia(messageOwner) instanceof TLRPC.TL_messageMediaGiveaway) { boolean isChannel; @@ -5004,6 +5097,9 @@ public static TLRPC.MessageMedia getMedia(MessageObject messageObject) { if (messageObject == null || messageObject.messageOwner == null) { return null; } + if (messageObject.sponsoredMedia != null) { + return messageObject.sponsoredMedia; + } return getMedia(messageObject.messageOwner); } @@ -5063,7 +5159,9 @@ public void setType() { int oldType = type; type = 1000; isRoundVideoCached = 0; - if (channelJoined) { + if (isSponsored()) { + type = TYPE_TEXT; + } else if (channelJoined) { type = TYPE_JOINED_CHANNEL; channelJoinedExpanded = MessagesController.getInstance(currentAccount).getMainSettings().getBoolean("c" + getDialogId() + "_rec", true); } else if (messageOwner instanceof TLRPC.TL_message || messageOwner instanceof TLRPC.TL_messageForwarded_old2) { @@ -5190,6 +5288,9 @@ public void setType() { } else if (messageOwner.action instanceof TLRPC.TL_messageActionGiftPremium || messageOwner.action instanceof TLRPC.TL_messageActionGiftCode) { contentType = 1; type = TYPE_GIFT_PREMIUM; + } else if (messageOwner.action instanceof TLRPC.TL_messageActionGiftStars) { + contentType = 1; + type = TYPE_GIFT_STARS; } else if (messageOwner.action instanceof TLRPC.TL_messageActionChatEditPhoto || messageOwner.action instanceof TLRPC.TL_messageActionUserUpdatedPhoto) { contentType = 1; type = TYPE_ACTION_PHOTO; @@ -5545,6 +5646,27 @@ public void generateThumbs(boolean update) { } } } + } else if (sponsoredMedia != null) { + TLRPC.Photo photo = sponsoredMedia.photo; + TLRPC.Document document = sponsoredMedia.document; + if (photo != null) { + if (!update || photoThumbs == null) { + photoThumbs = new ArrayList<>(photo.sizes); + } else if (!photoThumbs.isEmpty()) { + updatePhotoSizeLocations(photoThumbs, photo.sizes); + } + photoThumbsObject = photo; + } else if (document != null) { + if (isDocumentHasThumb(document)) { + if (!update) { + photoThumbs = new ArrayList<>(); + photoThumbs.addAll(document.thumbs); + } else if (photoThumbs != null && !photoThumbs.isEmpty()) { + updatePhotoSizeLocations(photoThumbs, document.thumbs); + } + photoThumbsObject = document; + } + } } else if (sponsoredPhoto != null) { if (!update || photoThumbs == null) { photoThumbs = new ArrayList<>(sponsoredPhoto.sizes); @@ -6515,10 +6637,11 @@ public static boolean addEntitiesToText(CharSequence text, ArrayList<TLRPC.Messa } else if (run.urlEntity instanceof TLRPC.TL_messageEntityUrl) { hasUrls = true; String lowerCase = url.toLowerCase(); - url = !lowerCase.contains("://") ? "http://" + url : url; + url = !lowerCase.contains("://") ? (BotWebViewContainer.isTonsite(url) ? "tonsite://" : "http://") + url : url; if (url != null) { url = url.replaceAll("∕|⁄|%E2%81%84|%E2%88%95", "/"); } + if (Browser.isTonsitePunycode(url)) continue; spannable.setSpan(new URLSpanBrowser(url, run), run.start, run.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } else if (run.urlEntity instanceof TLRPC.TL_messageEntityBankCard) { hasUrls = true; @@ -6535,6 +6658,7 @@ public static boolean addEntitiesToText(CharSequence text, ArrayList<TLRPC.Messa if (url != null) { url = url.replaceAll("∕|⁄|%E2%81%84|%E2%88%95", "/"); } + if (Browser.isTonsitePunycode(url)) continue; spannable.setSpan(new URLSpanReplacement(url, run), run.start, run.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } else if (run.urlEntity instanceof TLRPC.TL_messageEntityMentionName) { spannable.setSpan(new URLSpanUserMention("" + ((TLRPC.TL_messageEntityMentionName) run.urlEntity).user_id, t, run), run.start, run.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); @@ -6841,6 +6965,7 @@ public void generateLayout(TLRPC.User fromUser) { maxWidth -= AndroidUtilities.dp(15); } + int textLayoutOriginalWidth; StaticLayout textLayout; TextPaint paint; @@ -6852,6 +6977,7 @@ public void generateLayout(TLRPC.User fromUser) { CharSequence text = messageText; try { + textLayoutOriginalWidth = maxWidth; textLayout = makeStaticLayout(text, paint, maxWidth, 1f, totalAnimatedEmojiCount >= 4 ? -1 : 0, emojiOnlyCount > 0); } catch (Exception e) { FileLog.e(e); @@ -6897,6 +7023,7 @@ public void updateDrawState(TextPaint tp) { }, text.length() - readMore.length(), text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); try { + textLayoutOriginalWidth = maxWidth; textLayout = makeStaticLayout(text, paint, maxWidth, 1f, totalAnimatedEmojiCount >= 4 ? -1 : 0, emojiOnlyCount > 0); } catch (Exception e) { FileLog.e(e); @@ -7024,7 +7151,10 @@ public void updateDrawState(TextPaint tp) { } else { sb = new SpannableString(blockText.toString()); } + block.originalWidth = textLayoutOriginalWidth = blockMaxWidth; textLayout = makeStaticLayout(sb, layoutPaint, blockMaxWidth, 1f, totalAnimatedEmojiCount >= 4 ? -1 : 0, emojiOnlyCount > 0); + } else { + block.originalWidth = textLayoutOriginalWidth; } block.textLayout = textLayout; @@ -7061,6 +7191,7 @@ public void updateDrawState(TextPaint tp) { } else { sb = SpannableString.valueOf(blockText); } + block.originalWidth = blockMaxWidth; block.textLayout = makeStaticLayout(sb, layoutPaint, blockMaxWidth, 1f, totalAnimatedEmojiCount >= 4 ? -1 : 0, false); block.height = block.textLayout.getHeight();//Math.max(block.height, block.textLayout.getLineBottom(block.textLayout.getLineCount() - 1)); @@ -7305,11 +7436,9 @@ public TextLayoutBlocks(MessageObject messageObject, @NonNull CharSequence text, width -= AndroidUtilities.dp(15); } - final float lineSpacing = 1f; - final float lineAdd = 0; - Layout.Alignment align = Layout.Alignment.ALIGN_NORMAL; //type == TYPE_EMOJIS && isOut() ? Layout.Alignment.ALIGN_OPPOSITE : Layout.Alignment.ALIGN_NORMAL; + int textLayoutOriginalWidth; try { - textLayout = makeStaticLayout(text, textPaint, width, 1f, 0f, false); + textLayout = makeStaticLayout(text, textPaint, textLayoutOriginalWidth = width, 1f, 0f, false); } catch (Exception e) { FileLog.e(e); return; @@ -7353,6 +7482,7 @@ public void updateDrawState(TextPaint tp) { }, text.length() - readMore.length(), text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); try { + textLayoutOriginalWidth = width; textLayout = makeStaticLayout(text, textPaint, width, 1f, 0f, false); } catch (Exception e) { FileLog.e(e); @@ -7471,7 +7601,10 @@ public void updateDrawState(TextPaint tp) { } else { sb = new SpannableString(text.subSequence(range.start, range.end)); } + block.originalWidth = textLayoutOriginalWidth = blockMaxWidth; textLayout = makeStaticLayout(sb, layoutPaint, blockMaxWidth, 1f, 0f, false); + } else { + block.originalWidth = textLayoutOriginalWidth; } block.textLayout = textLayout; @@ -7495,6 +7628,7 @@ public void updateDrawState(TextPaint tp) { } else { sb = SpannableString.valueOf(text.subSequence(startCharacter, endCharacter)); } + block.originalWidth = blockMaxWidth; block.textLayout = makeStaticLayout(sb, layoutPaint, blockMaxWidth, 1f, 0f, false); block.height = block.textLayout.getHeight(); @@ -7672,7 +7806,7 @@ public boolean isOutOwner() { } } TLRPC.Chat chat = messageOwner.peer_id != null && messageOwner.peer_id.channel_id != 0 ? getChat(null, null, messageOwner.peer_id.channel_id) : null; - if (!messageOwner.out || !(messageOwner.from_id instanceof TLRPC.TL_peerUser) && (!(messageOwner.from_id instanceof TLRPC.TL_peerChannel) || ChatObject.isChannel(chat) && !chat.megagroup) || messageOwner.post) { + if (!messageOwner.out || !(messageOwner.from_id instanceof TLRPC.TL_peerUser) && (!(messageOwner.from_id instanceof TLRPC.TL_peerChannel) || ChatObject.isChannelAndNotMegaGroup(chat)) || messageOwner.post) { return isOutOwnerCached = false; } if (messageOwner.fwd_from == null) { @@ -7686,6 +7820,9 @@ public boolean isOutOwner() { } public boolean needDrawAvatar() { + if (type == TYPE_JOINED_CHANNEL) { + return false; + } if (isRepostPreview) { return true; } @@ -7698,7 +7835,12 @@ public boolean needDrawAvatar() { if (searchType != 0) { return true; } - return !isSponsored() && (isFromUser() || isFromGroup() || eventId != 0 || messageOwner.fwd_from != null && messageOwner.fwd_from.saved_from_peer != null); + boolean channelSignatureProfiles = false; + if (getDialogId() < 0) { + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-getDialogId()); + channelSignatureProfiles = (chat != null && chat.signature_profiles); + } + return !isSponsored() && (isFromUser() || isFromGroup() || channelSignatureProfiles || eventId != 0 || messageOwner.fwd_from != null && messageOwner.fwd_from.saved_from_peer != null); } private boolean needDrawAvatarInternal() { @@ -8814,7 +8956,7 @@ public int getApproximateHeight() { return dp(82); } else if (type == 10) { return dp(30); - } else if (type == TYPE_ACTION_PHOTO || type == TYPE_GIFT_PREMIUM || type == TYPE_GIFT_PREMIUM_CHANNEL || type == TYPE_SUGGEST_PHOTO) { + } else if (type == TYPE_ACTION_PHOTO || type == TYPE_GIFT_PREMIUM || type == TYPE_GIFT_STARS || type == TYPE_GIFT_PREMIUM_CHANNEL || type == TYPE_SUGGEST_PHOTO) { return dp(50); } else if (type == TYPE_ROUND_VIDEO) { return AndroidUtilities.roundMessageSize; @@ -9948,6 +10090,141 @@ public boolean isReactionsAvailable() { return !isEditing() && !isSponsored() && isSent() && messageOwner.action == null && !isExpiredStory(); } + public boolean isPaidReactionChosen() { + if (messageOwner.reactions == null) return false; + for (int i = 0; i < messageOwner.reactions.results.size(); i++) { + if (messageOwner.reactions.results.get(i).reaction instanceof TLRPC.TL_reactionPaid) { + return messageOwner.reactions.results.get(i).chosen; + } + } + return false; + } + + public void addPaidReactions(int amount, boolean chosen, boolean anonymous) { + if (messageOwner.reactions == null) { + messageOwner.reactions = new TLRPC.TL_messageReactions(); + messageOwner.reactions.reactions_as_tags = MessageObject.getDialogId(messageOwner) == UserConfig.getInstance(currentAccount).getClientUserId(); + messageOwner.reactions.can_see_list = isFromGroup() || isFromUser(); + } + addPaidReactions(currentAccount, messageOwner.reactions, amount, anonymous, chosen); + } + + public Boolean isMyPaidReactionAnonymous() { + if (messageOwner == null || messageOwner.reactions == null) return null; + if (messageOwner.reactions.top_reactors == null) return null; + for (TLRPC.MessageReactor reactor : messageOwner.reactions.top_reactors) { + if (reactor != null && reactor.my) { + return reactor.anonymous; + } + } + return null; + } + + public static Boolean isMyPaidReactionAnonymous(TLRPC.MessageReactions reactions) { + if (reactions == null) return null; + if (reactions.top_reactors == null) return null; + for (TLRPC.MessageReactor reactor : reactions.top_reactors) { + if (reactor != null && reactor.my) { + return reactor.anonymous; + } + } + return null; + } + + public void setMyPaidReactionAnonymous(boolean value) { + if (messageOwner == null || messageOwner.reactions == null) return; + if (messageOwner.reactions.top_reactors == null) return; + for (TLRPC.MessageReactor reactor : messageOwner.reactions.top_reactors) { + if (reactor != null && reactor.my) { + reactor.anonymous = value; + } + } + } + + public boolean doesPaidReactionExist() { + if (messageOwner.reactions == null) { + messageOwner.reactions = new TLRPC.TL_messageReactions(); + messageOwner.reactions.reactions_as_tags = MessageObject.getDialogId(messageOwner) == UserConfig.getInstance(currentAccount).getClientUserId(); + messageOwner.reactions.can_see_list = isFromGroup() || isFromUser(); + } + for (int i = 0; i < messageOwner.reactions.results.size(); i++) { + if (messageOwner.reactions.results.get(i).reaction instanceof TLRPC.TL_reactionPaid) { + return true; + } + } + return false; + } + + public boolean ensurePaidReactionsExist(boolean chosen) { + if (messageOwner.reactions == null) { + messageOwner.reactions = new TLRPC.TL_messageReactions(); + messageOwner.reactions.reactions_as_tags = MessageObject.getDialogId(messageOwner) == UserConfig.getInstance(currentAccount).getClientUserId(); + messageOwner.reactions.can_see_list = isFromGroup() || isFromUser(); + } + TLRPC.ReactionCount reactionCount = null; + for (int i = 0; i < messageOwner.reactions.results.size(); i++) { + if (messageOwner.reactions.results.get(i).reaction instanceof TLRPC.TL_reactionPaid) { + reactionCount = messageOwner.reactions.results.get(i); + } + } + if (reactionCount == null) { + reactionCount = new TLRPC.TL_reactionCount(); + reactionCount.reaction = new TLRPC.TL_reactionPaid(); + reactionCount.count = 1; + reactionCount.chosen = chosen; + messageOwner.reactions.results.add(0, reactionCount); + return true; + } + return false; + } + + public static void addPaidReactions( + int currentAccount, + TLRPC.MessageReactions reactions, + int amount, + boolean anonymous, + boolean chosen + ) { + TLRPC.ReactionCount reactionCount = null; + for (int i = 0; i < reactions.results.size(); i++) { + if (reactions.results.get(i).reaction instanceof TLRPC.TL_reactionPaid) { + reactionCount = reactions.results.get(i); + } + } + TLRPC.MessageReactor reactor = null; + for (int i = 0; i < reactions.top_reactors.size(); i++) { + if (reactions.top_reactors.get(i).my) { + reactor = reactions.top_reactors.get(i); + break; + } + } + if (reactionCount == null && amount > 0) { + reactionCount = new TLRPC.TL_reactionCount(); + reactionCount.reaction = new TLRPC.TL_reactionPaid(); + reactions.results.add(0, reactionCount); + } + if (reactionCount != null) { + reactionCount.chosen = chosen; + reactionCount.count = Math.max(0, reactionCount.count + amount); + if (reactionCount.count <= 0) { + reactions.results.remove(reactionCount); + } + } + if (reactor == null && amount > 0) { + reactor = new TLRPC.TL_messageReactor(); + reactor.my = true; + reactor.peer_id = MessagesController.getInstance(currentAccount).getPeer(UserConfig.getInstance(currentAccount).getClientUserId()); + reactions.top_reactors.add(reactor); + } + if (reactor != null) { + reactor.count = Math.max(0, reactor.count + amount); + reactor.anonymous = anonymous; + if (reactor.count <= 0) { + reactions.top_reactors.remove(reactor); + } + } + } + public boolean selectReaction(ReactionsLayoutInBubble.VisibleReaction visibleReaction, boolean big, boolean fromDoubleTap) { if (messageOwner.reactions == null) { messageOwner.reactions = new TLRPC.TL_messageReactions(); @@ -9959,8 +10236,8 @@ public boolean selectReaction(ReactionsLayoutInBubble.VisibleReaction visibleRea TLRPC.ReactionCount newReaction = null; int maxChoosenOrder = 0; for (int i = 0; i < messageOwner.reactions.results.size(); i++) { - if (messageOwner.reactions.results.get(i).chosen) { - TLRPC.ReactionCount reactionCount = messageOwner.reactions.results.get(i); + final TLRPC.ReactionCount reactionCount = messageOwner.reactions.results.get(i); + if (reactionCount.chosen && !(reactionCount.reaction instanceof TLRPC.TL_reactionPaid)) { choosenReactions.add(reactionCount); if (reactionCount.chosen_order > maxChoosenOrder) { maxChoosenOrder = reactionCount.chosen_order; @@ -10013,7 +10290,10 @@ public boolean selectReaction(ReactionsLayoutInBubble.VisibleReaction visibleRea while (!choosenReactions.isEmpty() && choosenReactions.size() >= maxReactionsCount) { int minIndex = 0; for (int i = 1; i < choosenReactions.size(); i++) { - if (choosenReactions.get(i).chosen_order < choosenReactions.get(minIndex).chosen_order) { + if ( + !(choosenReactions.get(i).reaction instanceof TLRPC.TL_reactionPaid) && + choosenReactions.get(i).chosen_order < choosenReactions.get(minIndex).chosen_order + ) { minIndex = i; } } @@ -10037,7 +10317,15 @@ public boolean selectReaction(ReactionsLayoutInBubble.VisibleReaction visibleRea if (newReaction == null) { int maxChatReactions = MessagesController.getInstance(currentAccount).getChatMaxUniqReactions(getDialogId()); - if (messageOwner.reactions.results.size() + 1 > maxChatReactions) { + int chosenCount = 0; + if (messageOwner != null && messageOwner.reactions != null) { + for (TLRPC.ReactionCount reactionCount : messageOwner.reactions.results) { + if (!(reactionCount.reaction instanceof TLRPC.TL_reactionPaid)) { + chosenCount++; + } + } + } + if (chosenCount + 1 > maxChatReactions) { return false; } newReaction = new TLRPC.TL_reactionCount(); @@ -10115,6 +10403,10 @@ public boolean isStory() { return storyItem != null; } + public boolean isBotPreview() { + return storyItem instanceof StoriesController.BotPreview; + } + private TLRPC.WebPage storyMentionWebpage; public TLRPC.WebPage getStoryMentionWebpage() { if (!isStoryMention()) { @@ -10153,7 +10445,7 @@ public boolean isGiveawayResults() { } public boolean isAnyGift() { - return type == MessageObject.TYPE_GIFT_PREMIUM || type == MessageObject.TYPE_GIFT_PREMIUM_CHANNEL; + return type == MessageObject.TYPE_GIFT_STARS || type == MessageObject.TYPE_GIFT_PREMIUM || type == MessageObject.TYPE_GIFT_PREMIUM_CHANNEL; } private static CharSequence[] userSpan; @@ -10641,4 +10933,8 @@ public boolean isAlbumSingle() { return getMedia(this) instanceof TLRPC.TL_messageMediaPaidMedia; } + public float getProgress() { + return 0f; + } + } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessagePreviewParams.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessagePreviewParams.java index 14695dd10ba..78a74945767 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessagePreviewParams.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessagePreviewParams.java @@ -213,7 +213,7 @@ public void updateReply(MessageObject replyMessageObject, MessageObject.GroupedM replyMessageObject = null; replyQuote = null; } - hasSecretMessages = replyMessageObject != null && (replyMessageObject.isVoiceOnce() || replyMessageObject.isRoundOnce()); + hasSecretMessages = replyMessageObject != null && (replyMessageObject.isVoiceOnce() || replyMessageObject.isRoundOnce() || replyMessageObject.type == MessageObject.TYPE_GIFT_STARS); if (replyMessageObject != null || replyQuote != null) { if (group != null) { replyMessage = new Messages(null, 1, group.messages, dialogId, null); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java index fcaabc71df9..9ec4bdfd9c3 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java @@ -8,6 +8,8 @@ package org.telegram.messenger; +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.LocaleController.getString; import static org.telegram.messenger.NotificationsController.TYPE_CHANNEL; import static org.telegram.messenger.NotificationsController.TYPE_PRIVATE; import static org.telegram.messenger.NotificationsController.TYPE_REACTIONS_MESSAGES; @@ -32,6 +34,9 @@ import android.util.SparseArray; import android.util.SparseBooleanArray; import android.util.SparseIntArray; +import android.view.Gravity; +import android.view.View; +import android.widget.FrameLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -55,12 +60,17 @@ import org.telegram.tgnet.SerializedData; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_account; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.tgnet.tl.TL_stories; import org.telegram.tgnet.tl.TL_chatlists; +import org.telegram.ui.ActionBar.ActionBarLayout; import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Business.QuickRepliesController; +import org.telegram.ui.Cells.ChatMessageCell; +import org.telegram.ui.Cells.CheckBoxCell; import org.telegram.ui.ChannelMonetizationLayout; import org.telegram.ui.ChatActivity; import org.telegram.ui.ChatReactionsEditActivity; @@ -70,6 +80,7 @@ import org.telegram.ui.Components.BulletinFactory; import org.telegram.ui.Components.ImageUpdater; import org.telegram.ui.Components.JoinCallAlert; +import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.MotionBackgroundDrawable; import org.telegram.ui.Components.Premium.LimitReachedBottomSheet; import org.telegram.ui.Components.Reactions.ReactionsLayoutInBubble; @@ -84,7 +95,11 @@ import org.telegram.ui.Stars.BotStarsController; import org.telegram.ui.Stars.StarsController; import org.telegram.ui.Stories.StoriesController; +import org.telegram.ui.ThemeActivity; import org.telegram.ui.TopicsFragment; +import org.telegram.ui.bots.BotWebViewAttachedSheet; +import org.telegram.ui.bots.BotWebViewSheet; +import org.telegram.ui.bots.WebViewRequestProps; import java.io.File; import java.util.ArrayList; @@ -104,17 +119,17 @@ public class MessagesController extends BaseController implements NotificationCenter.NotificationCenterDelegate { public int lastKnownSessionsCount; - private ConcurrentHashMap<Long, TLRPC.Chat> chats = new ConcurrentHashMap<>(100, 1.0f, 2); - private ConcurrentHashMap<Integer, TLRPC.EncryptedChat> encryptedChats = new ConcurrentHashMap<>(10, 1.0f, 2); - private ConcurrentHashMap<Long, TLRPC.User> users = new ConcurrentHashMap<>(100, 1.0f, 3); - private ConcurrentHashMap<String, TLObject> objectsByUsernames = new ConcurrentHashMap<>(100, 1.0f, 2); + private final ConcurrentHashMap<Long, TLRPC.Chat> chats = new ConcurrentHashMap<>(100, 1.0f, 2); + private final ConcurrentHashMap<Integer, TLRPC.EncryptedChat> encryptedChats = new ConcurrentHashMap<>(10, 1.0f, 2); + private final ConcurrentHashMap<Long, TLRPC.User> users = new ConcurrentHashMap<>(100, 1.0f, 3); + private final ConcurrentHashMap<String, TLObject> objectsByUsernames = new ConcurrentHashMap<>(100, 1.0f, 2); public static int stableIdPointer = 100; - private HashMap<Long, TLRPC.Chat> activeVoiceChatsMap = new HashMap<>(); + private final HashMap<Long, TLRPC.Chat> activeVoiceChatsMap = new HashMap<>(); - private ArrayList<Long> joiningToChannels = new ArrayList<>(); + private final ArrayList<Long> joiningToChannels = new ArrayList<>(); - private LongSparseArray<TLRPC.TL_chatInviteExported> exportedChats = new LongSparseArray<>(); + private final LongSparseArray<TLRPC.TL_chatInviteExported> exportedChats = new LongSparseArray<>(); public ArrayList<TLRPC.RecentMeUrl> hintDialogs = new ArrayList<>(); public SparseArray<ArrayList<TLRPC.Dialog>> dialogsByFolder = new SparseArray<>(); @@ -543,6 +558,7 @@ protected boolean useCache(Integer arguments) { public int boostsChannelLevelMax; public int channelRestrictSponsoredLevelMin; public Set<String> webAppAllowedProtocols; + public Set<String> ignoreRestrictionReasons; public int channelsLimitDefault; public int channelsLimitPremium; @@ -613,6 +629,15 @@ protected boolean useCache(Integer arguments) { public int factcheckLengthLimit; public long starsRevenueWithdrawalMin; public long starsPaidPostAmountMax; + public int botPreviewMediasMax; + public String tonProxyAddress; + public String weatherSearchUsername; + public boolean storyWeatherPreload; + public boolean starsGiftsEnabled; + public long starsPaidReactionAmountMax; + public long starsSubscriptionAmountMax; + public float starsUsdSellRate1000; + public float starsUsdWithdrawRate1000; public int savedDialogsPinnedLimitDefault; public int savedDialogsPinnedLimitPremium; @@ -626,9 +651,9 @@ protected boolean useCache(Integer arguments) { public String premiumBotUsername; public String premiumInvoiceSlug; - private SharedPreferences notificationsPreferences; - private SharedPreferences mainPreferences; - private SharedPreferences emojiPreferences; + private final SharedPreferences notificationsPreferences; + private final SharedPreferences mainPreferences; + private final SharedPreferences emojiPreferences; public volatile boolean ignoreSetOnline; public boolean premiumLocked; @@ -1555,7 +1580,17 @@ public MessagesController(int num) { factcheckLengthLimit = mainPreferences.getInt("factcheckLengthLimit", 1024); starsRevenueWithdrawalMin = mainPreferences.getLong("starsRevenueWithdrawalMin", 1000); starsPaidPostAmountMax = mainPreferences.getLong("starsPaidPostAmountMax", 10_000); + botPreviewMediasMax = mainPreferences.getInt("botPreviewMediasMax", 10); webAppAllowedProtocols = mainPreferences.getStringSet("webAppAllowedProtocols", new HashSet<>(Arrays.asList("http", "https"))); + ignoreRestrictionReasons = mainPreferences.getStringSet("ignoreRestrictionReasons", new HashSet<>(Arrays.asList())); + tonProxyAddress = mainPreferences.getString("tonProxyAddress", "magic.org"); + weatherSearchUsername = mainPreferences.getString("weatherSearchUsername", "izweatherbot"); + storyWeatherPreload = mainPreferences.getBoolean("storyWeatherPreload", true); + starsGiftsEnabled = mainPreferences.getBoolean("starsGiftsEnabled", true); + starsPaidReactionAmountMax = mainPreferences.getLong("starsPaidReactionAmountMax", 10_000L); + starsSubscriptionAmountMax = mainPreferences.getLong("starsSubscriptionAmountMax", 2500L); + starsUsdSellRate1000 = mainPreferences.getFloat("starsUsdSellRate1000", 2000); + starsUsdWithdrawRate1000 = mainPreferences.getFloat("starsUsdWithdrawRate1000", 1200); scheduleTranscriptionUpdate(); BuildVars.GOOGLE_AUTH_CLIENT_ID = mainPreferences.getString("googleAuthClientId", BuildVars.GOOGLE_AUTH_CLIENT_ID); if (mainPreferences.contains("dcDomainName2")) { @@ -1597,6 +1632,7 @@ public MessagesController(int num) { exportUri.add("content://(\\d+@)?com\\.whatsapp\\.w4b\\.provider\\.media/export_chat/"); exportUri.add("content://jp\\.naver\\.line\\.android\\.line\\.common\\.FileProvider/export-chat/"); exportUri.add(".*WhatsApp.*\\.txt$"); + exportUri.add(".*WhatsApp.*\\.zip$"); } exportGroupUri = mainPreferences.getStringSet("exportGroupUri", null); @@ -4151,6 +4187,28 @@ private void applyAppConfig(TLRPC.TL_jsonObject object) { } break; } + case "bot_preview_medias_max": { + if (value.value instanceof TLRPC.TL_jsonNumber) { + TLRPC.TL_jsonNumber num = (TLRPC.TL_jsonNumber) value.value; + if ((int) num.value != botPreviewMediasMax) { + botPreviewMediasMax = (int) num.value; + editor.putInt("botPreviewMediasMax", botPreviewMediasMax); + changed = true; + } + } + break; + } + case "ton_proxy_address": { + if (value.value instanceof TLRPC.TL_jsonString) { + TLRPC.TL_jsonString str = (TLRPC.TL_jsonString) value.value; + if (!TextUtils.equals(str.value, tonProxyAddress)) { + tonProxyAddress = str.value; + editor.putString("tonProxyAddress", tonProxyAddress); + changed = true; + } + } + break; + } case "web_app_allowed_protocols": { HashSet<String> newProtocols = new HashSet<>(); if (value.value instanceof TLRPC.TL_jsonArray) { @@ -4170,6 +4228,102 @@ private void applyAppConfig(TLRPC.TL_jsonObject object) { } break; } + case "weather_search_username": { + if (value.value instanceof TLRPC.TL_jsonString) { + TLRPC.TL_jsonString str = (TLRPC.TL_jsonString) value.value; + if (!TextUtils.equals(str.value, weatherSearchUsername)) { + weatherSearchUsername = str.value; + editor.putString("weatherSearchUsername", weatherSearchUsername); + changed = true; + } + } + break; + } + case "story_weather_preload": { + if (value.value instanceof TLRPC.TL_jsonBool) { + TLRPC.TL_jsonBool bool = (TLRPC.TL_jsonBool) value.value; + if (bool.value != storyWeatherPreload) { + storyWeatherPreload = bool.value; + editor.putBoolean("storyWeatherPreload", storyWeatherPreload); + changed = true; + } + } + break; + } + case "stars_gifts_enabled": { + if (value.value instanceof TLRPC.TL_jsonBool) { + TLRPC.TL_jsonBool bool = (TLRPC.TL_jsonBool) value.value; + if (bool.value != starsGiftsEnabled) { + starsGiftsEnabled = bool.value; + editor.putBoolean("starsGiftsEnabled", starsGiftsEnabled); + changed = true; + } + } + break; + } + case "stars_paid_reaction_amount_max": { + if (value.value instanceof TLRPC.TL_jsonNumber) { + TLRPC.TL_jsonNumber num = (TLRPC.TL_jsonNumber) value.value; + if ((long) num.value != starsPaidReactionAmountMax) { + starsPaidReactionAmountMax = (long) num.value; + editor.putLong("starsPaidReactionAmountMax", starsPaidReactionAmountMax); + changed = true; + } + } + break; + } + case "stars_subscription_amount_max": { + if (value.value instanceof TLRPC.TL_jsonNumber) { + TLRPC.TL_jsonNumber num = (TLRPC.TL_jsonNumber) value.value; + if ((long) num.value != starsSubscriptionAmountMax) { + starsSubscriptionAmountMax = (long) num.value; + editor.putLong("starsSubscriptionAmountMax", starsSubscriptionAmountMax); + changed = true; + } + } + break; + } + case "stars_usd_sell_rate_x1000": { + if (value.value instanceof TLRPC.TL_jsonNumber) { + TLRPC.TL_jsonNumber num = (TLRPC.TL_jsonNumber) value.value; + if (Math.abs(num.value - starsUsdSellRate1000) > 0.001f) { + starsUsdSellRate1000 = (float) num.value; + editor.putFloat("starsUsdSellRate1000", starsUsdSellRate1000); + changed = true; + } + } + break; + } + case "stars_usd_withdraw_rate_x1000": { + if (value.value instanceof TLRPC.TL_jsonNumber) { + TLRPC.TL_jsonNumber num = (TLRPC.TL_jsonNumber) value.value; + if (Math.abs(num.value - starsUsdWithdrawRate1000) > 0.001f) { + starsUsdWithdrawRate1000 = (float) num.value; + editor.putFloat("starsUsdWithdrawRate1000", starsUsdWithdrawRate1000); + changed = true; + } + } + break; + } + case "ignore_restriction_reasons": { + HashSet<String> newReasons = new HashSet<>(); + if (value.value instanceof TLRPC.TL_jsonArray) { + TLRPC.TL_jsonArray array = (TLRPC.TL_jsonArray) value.value; + for (int b = 0, N2 = array.value.size(); b < N2; b++) { + TLRPC.JSONValue val = array.value.get(b); + if (val instanceof TLRPC.TL_jsonString) { + TLRPC.TL_jsonString string = (TLRPC.TL_jsonString) val; + newReasons.add(string.value.toLowerCase()); + } + } + } + if (!ignoreRestrictionReasons.equals(newReasons)) { + ignoreRestrictionReasons = newReasons; + editor.putStringSet("ignoreRestrictionReasons", ignoreRestrictionReasons); + changed = true; + } + break; + } } } @@ -5755,6 +5909,13 @@ public TLObject getUserOrChat(String username) { return objectsByUsernames.get(username.toLowerCase()); } + public TLRPC.User getUser(String username) { + TLObject obj = getUserOrChat(username); + if (obj instanceof TLRPC.User) + return (TLRPC.User) obj; + return null; + } + public ConcurrentHashMap<Long, TLRPC.User> getUsers() { return users; } @@ -6523,7 +6684,7 @@ public void loadFullChat(long chatId, int classGuid, boolean force) { applyDialogNotificationsSettings(-chatId, 0, res.full_chat.notify_settings); for (int a = 0; a < res.full_chat.bot_info.size(); a++) { - TLRPC.BotInfo botInfo = res.full_chat.bot_info.get(a); + TL_bots.BotInfo botInfo = res.full_chat.bot_info.get(a); getMediaDataController().putBotInfo(-chatId, botInfo); } int index = blockePeers.indexOfKey(-chatId); @@ -6584,7 +6745,10 @@ public void loadFullChat(long chatId, int classGuid, boolean force) { } public void loadFullUser(final TLRPC.User user, int classGuid, boolean force) { - if (user == null || loadingFullUsers.contains(user.id) || !force && loadedFullUsers.get(user.id) > 0) { + loadFullUser(user, classGuid, force, null); + } + public void loadFullUser(final TLRPC.User user, int classGuid, boolean force, Utilities.Callback<TLRPC.UserFull> whenReceivedFullUser) { + if (user == null || whenReceivedFullUser == null && (loadingFullUsers.contains(user.id) || !force && loadedFullUsers.get(user.id) > 0)) { return; } loadingFullUsers.add(user.id); @@ -6605,11 +6769,15 @@ public void loadFullUser(final TLRPC.User user, int classGuid, boolean force) { getStoriesController().updateStoriesFromFullPeer(dialogId, userFull.stories); ChatThemeController.getInstance(currentAccount).saveChatWallpaper(res.full_user.id, res.full_user.wallpaper); + if (whenReceivedFullUser != null) { + whenReceivedFullUser.run(userFull); + } + AndroidUtilities.runOnUIThread(() -> { savePeerSettings(userFull.user.id, userFull.settings, false); applyDialogNotificationsSettings(user.id, 0, userFull.notify_settings); - if (userFull.bot_info instanceof TLRPC.TL_botInfo) { + if (userFull.bot_info instanceof TL_bots.TL_botInfo) { userFull.bot_info.user_id = user.id; getMediaDataController().putBotInfo(user.id, userFull.bot_info); } @@ -6640,7 +6808,7 @@ public void loadFullUser(final TLRPC.User user, int classGuid, boolean force) { if (userFull.user.photo != null && userFull.user.photo.has_video) { getNotificationCenter().postNotificationName(NotificationCenter.updateInterfaces, UPDATE_MASK_AVATAR); } - if (userFull.bot_info instanceof TLRPC.TL_botInfo) { + if (userFull.bot_info instanceof TL_bots.TL_botInfo) { userFull.bot_info.user_id = userFull.id; getNotificationCenter().postNotificationName(NotificationCenter.botInfoDidLoad, userFull.bot_info, classGuid); } @@ -9965,12 +10133,12 @@ public void loadMessages(long dialogId, long mergeDialogId, boolean loadInfo, in loadMessagesInternal(dialogId, mergeDialogId, loadInfo, count, max_id, offset_date, fromCache, midDate, classGuid, load_type, last_message_id, mode, threadMessageId, loadIndex, first_unread, unread_count, last_date, queryFromServer, mentionsCount, true, true, isTopic, null, 0L); } - private void loadMessagesInternal(long dialogId, long mergeDialogId, boolean loadInfo, int count, int max_id, int offset_date, boolean fromCache, int minDate, int classGuid, int load_type, int last_message_id, int mode, long threadMessageId, int loadIndex, int first_unread, int unread_count, int last_date, boolean queryFromServer, int mentionsCount, boolean loadDialog, boolean processMessages, boolean isTopic, MessageLoaderLogger loaderLogger, long hash) { + private void loadMessagesInternal(long dialogId, long mergeDialogId, boolean loadInfo, int count, int max_id, int offset_date, boolean fromCache, int minDate, int classGuid, int load_type, int last_message_id, int mode, long threadMessageId, int loadIndex, int first_unread, int unread_count, int last_date, boolean queryFromServer, int mentionsCount, boolean loadDialog, boolean processMessages, boolean isTopic, Timer loaderLogger, long hash) { if (BuildVars.LOGS_ENABLED) { FileLog.d("load messages in chat " + dialogId + " topic_id " + threadMessageId + " count " + count + " max_id " + max_id + " cache " + fromCache + " mindate = " + minDate + " guid " + classGuid + " load_type " + load_type + " last_message_id " + last_message_id + " mode " + mode + " index " + loadIndex + " firstUnread " + first_unread + " unread_count " + unread_count + " last_date " + last_date + " queryFromServer " + queryFromServer + " isTopic " + isTopic); } if (BuildVars.LOGS_ENABLED && loaderLogger == null && mode == 0) { - loaderLogger = new MessageLoaderLogger(dialogId, loadIndex, count); + loaderLogger = new Timer("MessageLoaderLogger dialogId=" + dialogId + " index=" + loadIndex + " count=" + count); } if ((threadMessageId == 0 || isTopic || mode == ChatActivity.MODE_SAVED || mode == ChatActivity.MODE_QUICK_REPLIES) && mode != ChatActivity.MODE_PINNED && (fromCache || DialogObject.isEncryptedDialog(dialogId))) { getMessagesStorage().getMessages(dialogId, mergeDialogId, loadInfo, count, max_id, offset_date, minDate, classGuid, load_type, mode, threadMessageId, loadIndex, processMessages, isTopic, loaderLogger); @@ -10281,10 +10449,11 @@ public void reloadWebPages(final long dialogId, HashMap<String, ArrayList<Messag } public void processLoadedMessages(TLRPC.messages_Messages messagesRes, int resCount, long dialogId, long mergeDialogId, int count, int max_id, int offset_date, boolean isCache, int classGuid, - int first_unread, int last_message_id, int unread_count, int last_date, int load_type, boolean isEnd, int mode, long threadMessageId, int loadIndex, boolean queryFromServer, int mentionsCount, boolean needProcess, boolean isTopic, MessageLoaderLogger loaderLogger) { + int first_unread, int last_message_id, int unread_count, int last_date, int load_type, boolean isEnd, int mode, long threadMessageId, int loadIndex, boolean queryFromServer, int mentionsCount, boolean needProcess, boolean isTopic, Timer loaderLogger) { if (BuildVars.LOGS_ENABLED) { - FileLog.d("processLoadedMessages size " + messagesRes.messages.size() + " in chat " + dialogId + " topic_id " + threadMessageId + " count " + count + " max_id " + max_id + " cache " + isCache + " guid " + classGuid + " load_type " + load_type + " last_message_id " + last_message_id + " index " + loadIndex + " firstUnread " + first_unread + " unread_count " + unread_count + " last_date " + last_date + " queryFromServer " + queryFromServer + " isTopic " + isTopic); + FileLog.d("processLoadedMessages size " + messagesRes.messages.size() + " in chat " + dialogId + " topic_id " + threadMessageId + " count " + count + " max_id " + max_id + " cache " + isCache + " guid " + classGuid + " load_type " + load_type + " last_message_id " + last_message_id + " index " + loadIndex + " firstUnread " + first_unread + " unread_count " + unread_count + " last_date " + last_date + " queryFromServer " + queryFromServer + " isTopic " + isTopic + " mode " + mode); } + Timer.Task t1 = Timer.start(loaderLogger, "processLoadedMessages"); long startProcessTime = SystemClock.elapsedRealtime(); boolean createDialog = false; @@ -10385,9 +10554,6 @@ public void processLoadedMessages(TLRPC.messages_Messages messagesRes, int resCo } } } - if (loaderLogger != null) { - loaderLogger.reload(); - } final long finalHash = hash; AndroidUtilities.runOnUIThread(() -> loadMessagesInternal(dialogId, mergeDialogId, false, count, load_type == LOAD_FROM_UNREAD && queryFromServer ? first_unread : max_id, offset_date, false, 0, classGuid, load_type, last_message_id, mode, threadMessageId, loadIndex, first_unread, unread_count, last_date, queryFromServer, mentionsCount, true, needProcess, isTopic, loaderLogger, finalHash)); if (messagesRes.messages.isEmpty()) { @@ -10485,9 +10651,6 @@ public void processLoadedMessages(TLRPC.messages_Messages messagesRes, int resCo if (BuildVars.LOGS_ENABLED) { FileLog.d("process time=" + (SystemClock.elapsedRealtime() - startProcessTime) + " count=" + objects.size() + " for dialog " + dialogId); } - if (loaderLogger != null) { - loaderLogger.logStageQueueProcessing(); - } if (mode == ChatActivity.MODE_SCHEDULED) { Collections.sort(objects, (o1, o2) -> { if (o1.messageOwner.date == o2.messageOwner.date && o1.getId() >= 0 && o2.getId() >= 0) { @@ -10519,13 +10682,15 @@ public void processLoadedMessages(TLRPC.messages_Messages messagesRes, int resCo } } } + + Timer.done(t1); + Timer.Task t2 = Timer.start(loaderLogger, "processLoadedMessages: runOnUIThread"); AndroidUtilities.runOnUIThread(() -> { + Timer.done(t2); + Timer.Task t3 = Timer.start(loaderLogger, "processLoadedMessages: post runOnUIThread"); putUsers(messagesRes.users, isCache); putChats(messagesRes.chats, isCache); - if (loaderLogger != null) { - loaderLogger.finish(); - } if (messagesRes.animatedEmoji != null && needProcess) { AnimatedEmojiDrawable.getDocumentFetcher(currentAccount).processDocuments(messagesRes.animatedEmoji); } @@ -10552,13 +10717,15 @@ public void processLoadedMessages(TLRPC.messages_Messages messagesRes, int resCo if (!DialogObject.isEncryptedDialog(dialogId) && mode != ChatActivity.MODE_QUICK_REPLIES) { int finalFirst_unread_final = first_unread_final; + Timer.Task t5 = Timer.start(loaderLogger, "loadReplyMessagesForMessages"); getMediaDataController().loadReplyMessagesForMessages(objects, dialogId, mode, threadMessageId, () -> { + Timer.done(t5); if (!needProcess) { getNotificationCenter().postNotificationName(NotificationCenter.messagesDidLoadWithoutProcess, classGuid, resCount, isCache, isEnd, last_message_id); } else { getNotificationCenter().postNotificationName(NotificationCenter.messagesDidLoad, dialogId, count, objects, isCache, finalFirst_unread_final, last_message_id, unread_count, last_date, load_type, isEnd, classGuid, loadIndex, max_id, mentionsCount, mode); } - }, classGuid); + }, classGuid, loaderLogger); } else { getNotificationCenter().postNotificationName(NotificationCenter.messagesDidLoad, dialogId, count, objects, isCache, first_unread_final, last_message_id, unread_count, last_date, load_type, isEnd, classGuid, loadIndex, max_id, mentionsCount, mode); } @@ -10569,6 +10736,11 @@ public void processLoadedMessages(TLRPC.messages_Messages messagesRes, int resCo if (!webpagesToReload.isEmpty()) { reloadWebPages(dialogId, webpagesToReload, mode); } + + Timer.done(t3); + if (loaderLogger != null) { + loaderLogger.finish(); + } }); } @@ -13453,16 +13625,26 @@ public void toggleChatJoinRequest(long chatId, boolean enabled, Runnable onSucce }, ConnectionsManager.RequestFlagInvokeAfter); } - public void toggleChannelSignatures(long chatId, boolean enabled) { + public void toggleChannelSignatures(long chatId, boolean signaturesEnabled, boolean profilesEnabled) { + TLRPC.Chat chat = getChat(chatId); + if (chat != null) { + chat.signatures = signaturesEnabled; + chat.signature_profiles = profilesEnabled; + putChat(chat, true); + } + TLRPC.TL_channels_toggleSignatures req = new TLRPC.TL_channels_toggleSignatures(); req.channel = getInputChannel(chatId); - req.enabled = enabled; + req.signatures_enabled = signaturesEnabled; + req.profiles_enabled = profilesEnabled; getConnectionsManager().sendRequest(req, (response, error) -> { if (response != null) { processUpdates((TLRPC.Updates) response, false); AndroidUtilities.runOnUIThread(() -> getNotificationCenter().postNotificationName(NotificationCenter.updateInterfaces, UPDATE_MASK_CHAT)); } }, ConnectionsManager.RequestFlagInvokeAfter); + + getNotificationCenter().postNotificationName(NotificationCenter.updateAllMessages, -chatId); } public void toggleChannelForum(long chatId, boolean enabled) { @@ -15046,7 +15228,7 @@ public void getDifference(int pts, int date, int qts, boolean slice) { updateInterfaceWithMessages(dialogId, arr, 0); getNotificationCenter().postNotificationName(NotificationCenter.dialogsNeedReload); }); - }, 0); + }, 0, null); } }); @@ -17297,8 +17479,21 @@ public boolean processUpdateArray(ArrayList<TLRPC.Update> updates, ArrayList<TLR message.out = true; } } - if (!message.out && message.from_id instanceof TLRPC.TL_peerUser && message.from_id.user_id == clientUserId) { - message.out = true; + if (!message.out) { + long from_id = DialogObject.getPeerDialogId(message.from_id); + if (from_id == clientUserId) { + message.out = true; + } else { + TLRPC.TL_channels_sendAsPeers peers = getSendAsPeers(MessageObject.getDialogId(message)); + if (peers != null) { + for (TLRPC.TL_sendAsPeer peer : peers.peers) { + if (peer != null && from_id == DialogObject.getPeerDialogId(peer.peer)) { + message.out = true; + break; + } + } + } + } } if (!fromGetDifference) { for (int a = 0, count = message.entities.size(); a < count; a++) { @@ -18275,6 +18470,11 @@ public boolean processUpdateArray(ArrayList<TLRPC.Update> updates, ArrayList<TLR } else if (baseUpdate instanceof TLRPC.TL_updateMessageReactions) { TLRPC.TL_updateMessageReactions update = (TLRPC.TL_updateMessageReactions) baseUpdate; long dialogId = MessageObject.getPeerId(update.peer); + long pendingPaid = StarsController.getInstance(currentAccount).getPendingPaidReactions(dialogId, update.msg_id); + if (pendingPaid != 0) { + final StarsController starsController = StarsController.getInstance(currentAccount); + MessageObject.addPaidReactions(currentAccount, update.reactions, (int) pendingPaid, starsController.arePaidReactionsAnonymous(StarsController.MessageId.from(dialogId, update.msg_id), update.reactions), true); + } getNotificationCenter().postNotificationName(NotificationCenter.didUpdateReactions, dialogId, update.msg_id, update.reactions); } else if (baseUpdate instanceof TLRPC.TL_updateMessageExtendedMedia) { TLRPC.TL_updateMessageExtendedMedia extendedMedia = (TLRPC.TL_updateMessageExtendedMedia) baseUpdate; @@ -18296,8 +18496,8 @@ public boolean processUpdateArray(ArrayList<TLRPC.Update> updates, ArrayList<TLR getNotificationCenter().postNotificationName(NotificationCenter.webViewResultSent, resultSent.query_id); } else if (baseUpdate instanceof TLRPC.TL_updateAttachMenuBots) { getMediaDataController().loadAttachMenuBots(false, true); - } else if (baseUpdate instanceof TLRPC.TL_updateBotMenuButton) { - TLRPC.TL_updateBotMenuButton updateBotMenuButton = (TLRPC.TL_updateBotMenuButton) baseUpdate; + } else if (baseUpdate instanceof TL_bots.TL_updateBotMenuButton) { + TL_bots.TL_updateBotMenuButton updateBotMenuButton = (TL_bots.TL_updateBotMenuButton) baseUpdate; getNotificationCenter().postNotificationName(NotificationCenter.updateBotMenuButton, updateBotMenuButton.bot_id, updateBotMenuButton.button); } else if (baseUpdate instanceof TLRPC.TL_updateReadChannelDiscussionInbox) { TLRPC.TL_updateReadChannelDiscussionInbox update = (TLRPC.TL_updateReadChannelDiscussionInbox) baseUpdate; @@ -18563,7 +18763,7 @@ public boolean processUpdateArray(ArrayList<TLRPC.Update> updates, ArrayList<TLR } } } - getMediaDataController().loadReplyMessagesForMessages(arrayList, dialogId, 0, 0,null, 0); + getMediaDataController().loadReplyMessagesForMessages(arrayList, dialogId, 0, 0,null, 0, null); getNotificationCenter().postNotificationName(NotificationCenter.replaceMessagesObjects, dialogId, arrayList, false); } } @@ -19082,7 +19282,6 @@ public SponsoredMessagesInfo getSponsoredMessages(long dialogId) { for (int a = 0, N = res.messages.size(); a < N; a++) { TLRPC.TL_sponsoredMessage sponsoredMessage = res.messages.get(a); TLRPC.TL_message message = new TLRPC.TL_message(); - message.message = sponsoredMessage.message; if (!sponsoredMessage.entities.isEmpty()) { message.entities = sponsoredMessage.entities; message.flags |= 128; @@ -19091,6 +19290,11 @@ public SponsoredMessagesInfo getSponsoredMessages(long dialogId) { message.flags |= 256; message.date = getConnectionsManager().getCurrentTime(); message.id = messageId--; + message.message = sponsoredMessage.message; + if (sponsoredMessage.media != null) { + message.flags |= 512; + } + message.media = sponsoredMessage.media; MessageObject messageObject = new MessageObject(currentAccount, message, usersDict, chatsDict, true, true); messageObject.sponsoredId = sponsoredMessage.random_id; messageObject.sponsoredTitle = sponsoredMessage.title; @@ -19102,6 +19306,10 @@ public SponsoredMessagesInfo getSponsoredMessages(long dialogId) { messageObject.sponsoredButtonText = sponsoredMessage.button_text; messageObject.sponsoredCanReport = sponsoredMessage.can_report; messageObject.sponsoredColor = sponsoredMessage.color; + messageObject.sponsoredMedia = sponsoredMessage.media; + messageObject.setType(); + messageObject.textLayoutBlocks = new ArrayList<>(); + messageObject.generateThumbs(true); result.add(messageObject); } } @@ -19154,17 +19362,6 @@ public TLRPC.TL_channels_sendAsPeers getSendAsPeers(long dialogId) { putUsers(res.users, false); putChats(res.chats, false); }); - final LongSparseArray<TLRPC.User> usersDict = new LongSparseArray<>(); - final LongSparseArray<TLRPC.Chat> chatsDict = new LongSparseArray<>(); - - for (int a = 0; a < res.users.size(); a++) { - TLRPC.User u = res.users.get(a); - usersDict.put(u.id, u); - } - for (int a = 0; a < res.chats.size(); a++) { - TLRPC.Chat c = res.chats.get(a); - chatsDict.put(c.id, c); - } } } else { result = null; @@ -19317,7 +19514,7 @@ public boolean updateInterfaceWithMessages(long dialogId, ArrayList<MessageObjec } } } - getMediaDataController().loadReplyMessagesForMessages(messages, dialogId, mode, 0, null, 0); + getMediaDataController().loadReplyMessagesForMessages(messages, dialogId, mode, 0, null, 0, null); if (mode == ChatActivity.MODE_QUICK_REPLIES) { QuickRepliesController.getInstance(currentAccount).checkLocalMessages(messages); } @@ -19790,12 +19987,14 @@ private void addDialogToItsFolder(int index, TLRPC.Dialog dialog) { } } - public static String getRestrictionReason(ArrayList<TLRPC.TL_restrictionReason> reasons) { + public String getRestrictionReason(ArrayList<TLRPC.RestrictionReason> reasons) { if (reasons.isEmpty()) { return null; } for (int a = 0, N = reasons.size(); a < N; a++) { - TLRPC.TL_restrictionReason reason = reasons.get(a); + TLRPC.RestrictionReason reason = reasons.get(a); + if (ignoreRestrictionReasons != null && ignoreRestrictionReasons.contains(reason.reason)) continue; + if ("sensitive".equals(reason.reason)) continue; if ("all".equals(reason.platform) || !ApplicationLoader.isStandaloneBuild() && !BuildVars.isBetaApp() && "android".equals(reason.platform)) { return reason.text; } @@ -19803,6 +20002,83 @@ public static String getRestrictionReason(ArrayList<TLRPC.TL_restrictionReason> return null; } + public boolean isSensitive(ArrayList<TLRPC.RestrictionReason> reasons) { + if (reasons == null || reasons.isEmpty()) { + return false; + } + for (int a = 0, N = reasons.size(); a < N; a++) { + TLRPC.RestrictionReason reason = reasons.get(a); + if (ignoreRestrictionReasons != null && ignoreRestrictionReasons.contains(reason.reason)) continue; + if ("all".equals(reason.platform) || !ApplicationLoader.isStandaloneBuild() && !BuildVars.isBetaApp() && "android".equals(reason.platform)) { + if ("sensitive".equals(reason.reason)) return true; + } + } + return false; + } + + public void checkSensitive(BaseFragment fragment, long did, Runnable done, Runnable canceled) { + ArrayList<TLRPC.RestrictionReason> reasons = null; + if (did < 0) { + TLRPC.Chat chat = getChat(-did); + reasons = chat != null ? chat.restriction_reason : null; + } else if (did >= 0) { + TLRPC.User user = getUser(did); + reasons = user != null ? user.restriction_reason : null; + } + if (!isSensitive(reasons) || sensitiveAgreed.contains(did)) { + if (done != null) { + done.run(); + } + return; + } + final AlertDialog progressDialog = new AlertDialog(fragment.getContext(), AlertDialog.ALERT_TYPE_SPINNER); + progressDialog.showDelayed(200); + getContentSettings(settings -> { + progressDialog.dismissUnless(200); + boolean[] always = new boolean[1]; + FrameLayout frameLayout = new FrameLayout(fragment.getContext()); + if (settings != null && settings.sensitive_can_change) { + CheckBoxCell checkbox = new CheckBoxCell(fragment.getContext(), 1, fragment.getResourceProvider()); + checkbox.setBackground(Theme.getSelectorDrawable(false)); + checkbox.setText(getString(R.string.MessageShowSensitiveContentAlways), "", always[0], false); + checkbox.setPadding(LocaleController.isRTL ? dp(16) : dp(8), 0, LocaleController.isRTL ? dp(8) : dp(16), 0); + frameLayout.addView(checkbox, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.TOP | Gravity.LEFT, 0, 0, 0, 0)); + checkbox.setOnClickListener(v -> { + CheckBoxCell cell1 = (CheckBoxCell) v; + always[0] = !always[0]; + cell1.setChecked(always[0], true); + }); + } + final boolean[] doneSet = new boolean[1]; + new AlertDialog.Builder(fragment.getContext(), fragment.getResourceProvider()) + .setTitle(getString(R.string.MessageShowSensitiveContentChannelTitle)) + .setMessage(getString(R.string.MessageShowSensitiveContentChannelText)) + .setView(frameLayout).setCustomViewOffset(9) + .setNegativeButton(getString(R.string.Cancel), null) + .setPositiveButton(getString(R.string.MessageShowSensitiveContentButton), (di, w) -> { + doneSet[0] = true; + sensitiveAgreed.add(did); + if (always[0] && settings != null && settings.sensitive_can_change) { + getMessagesController().setContentSettings(true); + BulletinFactory.of(fragment) + .createSimpleBulletinDetail(R.raw.chats_infotip, AndroidUtilities.replaceArrows(AndroidUtilities.premiumText(getString(R.string.SensitiveContentSettingsToast), () -> { + fragment.presentFragment(new ThemeActivity(ThemeActivity.THEME_TYPE_BASIC).highlightSensitiveRow()); + }), true)) + .show(true); + } + if (done != null) { + done.run(); + } + }) + .setOnDismissListener(di -> { + if (!doneSet[0] && canceled != null) { + canceled.run(); + } + }) + .show(); + }); + } + public static void showCantOpenAlert(BaseFragment fragment, String reason) { if (fragment == null || fragment.getParentActivity() == null) { return; @@ -19827,6 +20103,8 @@ public boolean checkCanOpenChat(Bundle bundle, BaseFragment fragment, MessageObj return checkCanOpenChat(bundle, fragment, originalMessage, null); } + private final HashSet<Long> sensitiveAgreed = new HashSet<>(); + public boolean checkCanOpenChat(Bundle bundle, BaseFragment fragment, MessageObject originalMessage, Browser.Progress progress) { if (bundle == null || fragment == null) { return true; @@ -19836,9 +20114,12 @@ public boolean checkCanOpenChat(Bundle bundle, BaseFragment fragment, MessageObj long userId = bundle.getLong("user_id", 0); long chatId = bundle.getLong("chat_id", 0); int messageId = bundle.getInt("message_id", 0); + long dialogId = 0; if (userId != 0) { + dialogId = userId; user = getUser(userId); } else if (chatId != 0) { + dialogId = -chatId; chat = getChat(chatId); } if (user == null && chat == null) { @@ -19936,7 +20217,7 @@ public void onError() { return true; } - public static void openChatOrProfileWith(TLRPC.User user, TLRPC.Chat chat, BaseFragment fragment, int type, boolean closeLast) { + public void openChatOrProfileWith(TLRPC.User user, TLRPC.Chat chat, BaseFragment fragment, int type, boolean closeLast) { if (user == null && chat == null || fragment == null) { return; } @@ -20201,7 +20482,7 @@ public void deleteMessagesRange(long dialogId, long channelId, int minDate, int }); } - public void setCustomChatReactions(long chatId, int type, List<TLRPC.Reaction> reactions, int reactionsCount, Utilities.Callback<TLRPC.TL_error> onError, Runnable onSuccess) { + public void setCustomChatReactions(long chatId, int type, List<TLRPC.Reaction> reactions, int reactionsCount, Boolean allow_paid, Utilities.Callback<TLRPC.TL_error> onError, Runnable onSuccess) { TLRPC.TL_messages_setChatAvailableReactions req = new TLRPC.TL_messages_setChatAvailableReactions(); req.peer = getInputPeer(-chatId); if (type == ChatReactionsEditActivity.SELECT_TYPE_NONE || reactions.isEmpty()) { @@ -20213,6 +20494,10 @@ public void setCustomChatReactions(long chatId, int type, List<TLRPC.Reaction> r req.available_reactions = someReactions; someReactions.reactions.addAll(reactions); } + if (allow_paid != null) { + req.flags |= 2; + req.paid_enabled = allow_paid; + } req.flags |= 1; req.reactions_limit = reactionsCount; getConnectionsManager().sendRequest(req, (response, error) -> { @@ -20252,6 +20537,9 @@ public void setCustomChatReactions(long chatId, int type, List<TLRPC.Reaction> r chatFull.flags |= 1048576; } chatFull.reactions_limit = reactionsCount; + if (allow_paid != null) { + chatFull.paid_reactions_available = allow_paid; + } getMessagesStorage().updateChatInfo(chatFull, false); } } @@ -21485,4 +21773,219 @@ protected boolean emitLocal(Integer arguments) { return true; } }; + + public static boolean equals(TLRPC.MessageMedia a, TLRPC.MessageMedia b) { + if (a instanceof TLRPC.TL_messageMediaDocument) { + if (!(b instanceof TLRPC.TL_messageMediaDocument)) return false; + return a.document.id == b.document.id; + } else if (b instanceof TLRPC.TL_messageMediaPhoto) { + if (!(b instanceof TLRPC.TL_messageMediaPhoto)) return false; + return a.photo.id == b.photo.id; + } + return false; + } + + public static TLRPC.InputDocument toInputDocument(TLRPC.Document document) { + TLRPC.TL_inputDocument id = new TLRPC.TL_inputDocument(); + id.id = document.id; + id.access_hash = document.access_hash; + id.file_reference = document.file_reference; + return id; + } + + public static TLRPC.InputMedia toInputMedia(TLRPC.MessageMedia media) { + if (media instanceof TLRPC.TL_messageMediaDocument) { + TLRPC.TL_inputMediaDocument input = new TLRPC.TL_inputMediaDocument(); + input.id = new TLRPC.TL_inputDocument(); + input.id.id = media.document.id; + input.id.access_hash = media.document.access_hash; + input.id.file_reference = media.document.file_reference; + return input; + } else if (media instanceof TLRPC.TL_messageMediaPhoto) { + TLRPC.TL_inputMediaPhoto input = new TLRPC.TL_inputMediaPhoto(); + input.id = new TLRPC.TL_inputPhoto(); + input.id.id = media.photo.id; + input.id.access_hash = media.photo.access_hash; + input.id.file_reference = media.photo.file_reference; + return input; + } + return null; + } + + public void openApp(TLRPC.User bot, int classGuid) { + openApp(null, bot, classGuid, null); + } + public void openApp(BaseFragment _fragment, TLRPC.User bot, int classGuid, Browser.Progress progress) { + if (bot == null) return; + + boolean[] cancelled = new boolean[] { false }; + if (progress != null) { + progress.onCancel(() -> cancelled[0] = true); + progress.init(); + } + + final TL_bots.BotInfo[] botInfo = new TL_bots.BotInfo[1]; + Runnable open = () -> { + BaseFragment fragment = _fragment != null ? _fragment : LaunchActivity.getSafeLastFragment(); + if (fragment == null) return; + if (progress != null) { + progress.end(); + } + if (cancelled[0]) return; + if (bot.bot_has_main_app) { + if (fragment.getParentLayout() instanceof ActionBarLayout) { + fragment = ((ActionBarLayout) fragment.getParentLayout()).getSheetFragment(); + } + AndroidUtilities.hideKeyboard(fragment.getFragmentView()); + WebViewRequestProps props = WebViewRequestProps.of(currentAccount, bot.id, bot.id, null, null, BotWebViewAttachedSheet.TYPE_WEB_VIEW_BOT_MAIN, 0, false, null, false, null, bot, 0, false); + if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(props) != null) { + return; + } + if (AndroidUtilities.isTablet()) { + BotWebViewSheet webViewSheet = new BotWebViewSheet(fragment.getContext(), fragment.getResourceProvider()); + webViewSheet.setDefaultFullsize(true); + webViewSheet.setNeedsContext(true); + webViewSheet.setParentActivity(fragment.getParentActivity()); + webViewSheet.requestWebView(null, props); + webViewSheet.show(); + } else { + BotWebViewAttachedSheet sheet = fragment.createBotViewer(); + sheet.setDefaultFullsize(true); + sheet.setNeedsContext(false); + sheet.setParentActivity(fragment.getParentActivity()); + sheet.requestWebView(null, props); + sheet.show(); + } + } else if (botInfo[0] != null && botInfo[0].menu_button instanceof TL_bots.TL_botMenuButton) { + if (fragment.getParentLayout() instanceof ActionBarLayout) { + fragment = ((ActionBarLayout) fragment.getParentLayout()).getSheetFragment(); + } + TL_bots.TL_botMenuButton btn = (TL_bots.TL_botMenuButton) botInfo[0].menu_button; + AndroidUtilities.hideKeyboard(fragment.getFragmentView()); + WebViewRequestProps props = WebViewRequestProps.of(currentAccount, bot.id, bot.id, btn.text, btn.url, BotWebViewAttachedSheet.TYPE_BOT_MENU_BUTTON, 0, false, null, false, null, bot, 0, false); + if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(props) != null) { + return; + } + if (AndroidUtilities.isTablet()) { + BotWebViewSheet webViewSheet = new BotWebViewSheet(fragment.getContext(), fragment.getResourceProvider()); + webViewSheet.setDefaultFullsize(false); + webViewSheet.setNeedsContext(true); + webViewSheet.setParentActivity(fragment.getParentActivity()); + webViewSheet.requestWebView(null, props); + webViewSheet.show(); + } else { + BotWebViewAttachedSheet sheet = fragment.createBotViewer(); + sheet.setDefaultFullsize(false); + sheet.setNeedsContext(false); + sheet.setParentActivity(fragment.getParentActivity()); + sheet.requestWebView(null, props); + sheet.show(); + } + } else { + fragment.presentFragment(ChatActivity.of(bot.id)); + } + }; + + botInfo[0] = getMediaDataController().getBotInfoCached(bot.id, bot.id); + if (bot.bot_has_main_app) { + open.run(); + } else if (botInfo[0] == null) { + getMediaDataController().loadBotInfo(bot.id, bot.id, false, classGuid, _botInfo -> { + if (cancelled[0]) return; + botInfo[0] = _botInfo; + if (botInfo[0] == null) { + TLRPC.UserFull userFull = getUserFull(bot.id); + if (userFull == null) { + if (cancelled[0]) return; + loadFullUser(bot, classGuid, true, userFull1 -> { + if (cancelled[0]) return; + if (userFull1 != null) { + botInfo[0] = userFull1.bot_info; + } + AndroidUtilities.runOnUIThread(open); + }); + } else { + botInfo[0] = userFull.bot_info; + open.run(); + } + } else { + open.run(); + } + }); + } else { + open.run(); + } + } + + + private boolean contentSettingsLoading; + private ArrayList<Utilities.Callback<TL_account.contentSettings>> contentSettingsCallbacks; + private long contentSettingsLoadedTime; + private TL_account.contentSettings contentSettings; + + public TL_account.contentSettings getContentSettings() { + return contentSettings; + } + + public void getContentSettings(Utilities.Callback<TL_account.contentSettings> whenReceived) { + if (contentSettings != null && System.currentTimeMillis() - contentSettingsLoadedTime < 1000 * 60 * 60) { + if (whenReceived != null) whenReceived.run(contentSettings); + return; + } + + if (contentSettingsCallbacks == null) contentSettingsCallbacks = new ArrayList<>(); + if (whenReceived != null) contentSettingsCallbacks.add(whenReceived); + if (contentSettingsLoading) return; + contentSettingsLoading = true; + + TL_account.getContentSettings req = new TL_account.getContentSettings(); + getConnectionsManager().sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + if (res instanceof TL_account.contentSettings) { + contentSettings = (TL_account.contentSettings) res; + contentSettingsLoadedTime = System.currentTimeMillis(); + } + contentSettingsLoading = false; + if (contentSettingsCallbacks != null) { + for (Utilities.Callback<TL_account.contentSettings> callback : contentSettingsCallbacks) { + callback.run(contentSettings); + } + contentSettingsCallbacks.clear(); + contentSettingsCallbacks = null; + } + })); + } + + public void invalidateContentSettings() { + contentSettings = null; + contentSettingsLoadedTime = 0; + } + + public void setContentSettings(boolean showSensitiveContent) { + if (contentSettings != null) { + if (!contentSettings.sensitive_can_change) { + return; + } + contentSettings.sensitive_enabled = showSensitiveContent; + } + + if (ignoreRestrictionReasons == null) ignoreRestrictionReasons = new HashSet<>(); + if (showSensitiveContent) ignoreRestrictionReasons.add("sensitive"); + else ignoreRestrictionReasons.remove("sensitive"); + + TL_account.setContentSettings req = new TL_account.setContentSettings(); + req.sensitive_enabled = showSensitiveContent; + getConnectionsManager().sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + if (err != null) { + BulletinFactory.showError(err); + } + })); + } + + public boolean showSensitiveContent() { + if (contentSettings != null && System.currentTimeMillis() - contentSettingsLoadedTime < 1000 * 60 * 60) { + return contentSettings.sensitive_enabled; + } + return ignoreRestrictionReasons == null || ignoreRestrictionReasons.contains("sensitive"); + } + } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java index 73590c2fbee..5fd1117293a 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java @@ -38,6 +38,7 @@ import org.telegram.tgnet.RequestDelegate; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.tgnet.tl.TL_stories; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Adapters.DialogsSearchAdapter; @@ -1404,6 +1405,7 @@ public void clearLocalDatabase() { database.executeFast("DELETE FROM business_replies").stepThis().dispose(); database.executeFast("DELETE FROM quick_replies_messages").stepThis().dispose(); database.executeFast("DELETE FROM effects").stepThis().dispose(); + database.executeFast("DELETE FROM app_config").stepThis().dispose(); cursor = database.queryFinalized("SELECT did FROM dialogs WHERE 1"); @@ -2183,6 +2185,9 @@ public void readAllDialogs(int folderId) { for (int a = 0; a < dialogs.size(); a++) { long did = dialogs.keyAt(a); ReadDialog dialog = dialogs.valueAt(a); + if (getMessagesController().isForum(did)) { + getMessagesController().markAllTopicsAsRead(did); + } getMessagesController().markDialogAsRead(did, dialog.lastMid, dialog.lastMid, dialog.date, false, 0, dialog.unreadCount, true, 0); } }); @@ -7453,7 +7458,7 @@ private TLRPC.ChatFull loadChatInfoInternal(long chatId, boolean isChannel, bool cursor.dispose(); cursor = null; for (int a = 0; a < info.bot_info.size(); a++) { - TLRPC.BotInfo botInfo = info.bot_info.get(a); + TL_bots.BotInfo botInfo = info.bot_info.get(a); usersToLoad.add(botInfo.user_id); } } @@ -8282,7 +8287,7 @@ public void getMessagesCount(long dialog_id, IntCallback callback) { }); } - public Runnable getMessagesInternal(long dialogId, long mergeDialogId, int count, int max_id, int offset_date, int minDate, int classGuid, int load_type, int mode, long threadMessageId, int loadIndex, boolean processMessages, boolean isTopic, MessageLoaderLogger loaderLogger) { + public Runnable getMessagesInternal(long dialogId, long mergeDialogId, int count, int max_id, int offset_date, int minDate, int classGuid, int load_type, int mode, long threadMessageId, int loadIndex, boolean processMessages, boolean isTopic, Timer loaderLogger) { TLRPC.TL_messages_messages res = new TLRPC.TL_messages_messages(); long currentUserId = getUserConfig().clientUserId; int count_unread = 0; @@ -9267,19 +9272,16 @@ public void getAnimatedEmoji(String join, ArrayList<TLRPC.Document> documents) { } } - public void getMessages(long dialogId, long mergeDialogId, boolean loadInfo, int count, int max_id, int offset_date, int minDate, int classGuid, int load_type, int mode, long replyMessageId, int loadIndex, boolean processMessages, boolean isTopic, MessageLoaderLogger loaderLogger) { + public void getMessages(long dialogId, long mergeDialogId, boolean loadInfo, int count, int max_id, int offset_date, int minDate, int classGuid, int load_type, int mode, long replyMessageId, int loadIndex, boolean processMessages, boolean isTopic, Timer loaderLogger) { + Timer.Task t1 = Timer.start(loaderLogger, "MessagesStorage.getMessages: storageQueue.postRunnable"); storageQueue.postRunnable(() -> { - if (loaderLogger != null) { - loaderLogger.logStorageQueuePost(); - } + Timer.done(t1); + Timer.Task t2 = Timer.start(loaderLogger, "MessagesStorage.getMessages"); Runnable processMessagesRunnable = getMessagesInternal(dialogId, mergeDialogId, count, max_id, offset_date, minDate, classGuid, load_type, mode, replyMessageId, loadIndex, processMessages, isTopic, loaderLogger); - if (loaderLogger != null) { - loaderLogger.logStorageProccessing(); - } + Timer.done(t2); + Timer.Task t3 = Timer.start(loaderLogger, "MessagesStorage.getMessages: stageQueue.postRunnable"); Utilities.stageQueue.postRunnable(() -> { - if (loaderLogger != null) { - loaderLogger.logStageQueuePost(); - } + Timer.done(t3); processMessagesRunnable.run(); }); }); @@ -14819,6 +14821,9 @@ public void putMessages(TLRPC.messages_Messages messages, long dialogId, int loa } else if (oldMessage.media instanceof TLRPC.TL_messageMediaDocument && message.media instanceof TLRPC.TL_messageMediaDocument && oldMessage.media.document != null && message.media.document != null) { sameMedia = oldMessage.media.document.id == message.media.document.id; } + if (oldMessage.out && !message.out) { + message.out = oldMessage.out; + } if (!sameMedia) { addFilesToDelete(oldMessage, filesToDelete, idsToDelete, namesToDelete, false); } @@ -15362,6 +15367,14 @@ public static void addUsersAndChatsFromMessage(TLRPC.Message message, ArrayList< } } } + if (message.reactions != null && message.reactions.top_reactors != null) { + for (int i = 0; i < message.reactions.top_reactors.size(); ++i) { + final TLRPC.MessageReactor reactor = message.reactions.top_reactors.get(i); + if (reactor != null && reactor.peer_id != null) { + addLoadPeerInfo(reactor.peer_id, usersToLoad, chatsToLoad); + } + } + } } public static void addLoadPeerInfo(TLRPC.Peer peer, ArrayList<Long> usersToLoad, ArrayList<Long> chatsToLoad) { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/NotificationCenter.java b/TMessagesProj/src/main/java/org/telegram/messenger/NotificationCenter.java index cc9a314263c..ea5cfb9b646 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/NotificationCenter.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/NotificationCenter.java @@ -105,6 +105,7 @@ public class NotificationCenter { public static final int wasUnableToFindCurrentLocation = totalEvents++; public static final int reloadHints = totalEvents++; public static final int reloadInlineHints = totalEvents++; + public static final int reloadWebappsHints = totalEvents++; public static final int newDraftReceived = totalEvents++; public static final int recentDocumentsDidLoad = totalEvents++; public static final int needAddArchivedStickers = totalEvents++; @@ -143,6 +144,8 @@ public class NotificationCenter { public static final int businessMessagesUpdated = totalEvents++; public static final int quickRepliesUpdated = totalEvents++; public static final int quickRepliesDeleted = totalEvents++; + public static final int bookmarkAdded = totalEvents++; + public static final int starReactionAnonymousUpdate = totalEvents++; public static final int businessLinksUpdated = totalEvents++; public static final int businessLinkCreated = totalEvents++; @@ -250,12 +253,16 @@ public class NotificationCenter { public static final int premiumFloodWaitReceived = totalEvents++; public static final int availableEffectsUpdate = totalEvents++; public static final int starOptionsLoaded = totalEvents++; + public static final int starGiftOptionsLoaded = totalEvents++; public static final int starBalanceUpdated = totalEvents++; public static final int starTransactionsLoaded = totalEvents++; + public static final int starSubscriptionsLoaded = totalEvents++; public static final int factCheckLoaded = totalEvents++; public static final int botStarsUpdated = totalEvents++; public static final int botStarsTransactionsLoaded = totalEvents++; public static final int channelStarsUpdated = totalEvents++; + public static final int webViewResolved = totalEvents++; + public static final int updateAllMessages = totalEvents++; //global public static final int pushMessagesUpdated = totalEvents++; diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java b/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java index 58c0536b954..770c07adbfd 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java @@ -34,7 +34,6 @@ import android.text.Spannable; import android.text.TextUtils; import android.util.Base64; -import android.util.Log; import android.util.SparseArray; import android.util.TypedValue; import android.view.Gravity; @@ -85,12 +84,12 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -100,6 +99,8 @@ import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; public class SendMessagesHelper extends BaseController implements NotificationCenter.NotificationCenterDelegate { @@ -3098,7 +3099,15 @@ protected long getVoteSendTime(long pollId) { return voteSendTime.get(pollId, 0L); } - public void sendReaction(MessageObject messageObject, ArrayList<ReactionsLayoutInBubble.VisibleReaction> visibleReactions, ReactionsLayoutInBubble.VisibleReaction addedReaction, boolean big, boolean addToRecent, BaseFragment parentFragment, Runnable callback) { + public void sendReaction( + MessageObject messageObject, + ArrayList<ReactionsLayoutInBubble.VisibleReaction> visibleReactions, + ReactionsLayoutInBubble.VisibleReaction addedReaction, + boolean big, + boolean addToRecent, + BaseFragment parentFragment, + Runnable callback + ) { if (messageObject == null || parentFragment == null) { return; } @@ -3148,7 +3157,7 @@ public void requestUrlAuth(String url, ChatActivity parentFragment, boolean ask) TLRPC.TL_messages_requestUrlAuth req = new TLRPC.TL_messages_requestUrlAuth(); req.url = url; req.flags |= 4; - getConnectionsManager().sendRequest(req, (response, error) -> { + getConnectionsManager().sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> { if (response != null) { if (response instanceof TLRPC.TL_urlAuthResultRequest) { TLRPC.TL_urlAuthResultRequest res = (TLRPC.TL_urlAuthResultRequest) response; @@ -3162,7 +3171,7 @@ public void requestUrlAuth(String url, ChatActivity parentFragment, boolean ask) } else { AlertsCreator.showOpenUrlAlert(parentFragment, url, false, ask); } - }, ConnectionsManager.RequestFlagFailOnServerErrors); + }), ConnectionsManager.RequestFlagFailOnServerErrors); } public void sendCallback(final boolean cache, final MessageObject messageObject, final TLRPC.KeyboardButton button, final ChatActivity parentFragment) { @@ -3654,7 +3663,7 @@ public void sendMessage(SendMessageParams sendMessageParams) { user.phone = newMsg.media.phone_number; user.first_name = newMsg.media.first_name; user.last_name = newMsg.media.last_name; - TLRPC.TL_restrictionReason reason = new TLRPC.TL_restrictionReason(); + TLRPC.RestrictionReason reason = new TLRPC.RestrictionReason(); reason.platform = ""; reason.reason = ""; reason.text = newMsg.media.vcard; @@ -3936,7 +3945,8 @@ public void sendMessage(SendMessageParams sendMessageParams) { } newMsg.local_id = newMsg.id = getUserConfig().getNewMessageId(); newMsg.out = true; - if (isChannel && sendToPeer != null) { + TLRPC.Chat chat = sendToPeer != null ? getMessagesController().getChat(sendToPeer.channel_id) : null; + if (isChannel && sendToPeer != null && (chat == null || !chat.signatures)) { newMsg.from_id = new TLRPC.TL_peerChannel(); newMsg.from_id.channel_id = sendToPeer.channel_id; } else if (fromPeer != null) { @@ -4006,10 +4016,10 @@ public void sendMessage(SendMessageParams sendMessageParams) { newMsg.unread = true; } else { newMsg.post = true; - if (chat.signatures) { - newMsg.from_id = new TLRPC.TL_peerUser(); - newMsg.from_id.user_id = myId; - } +// if (chat.signatures && !chat.signature_profiles) { +// newMsg.from_id = new TLRPC.TL_peerUser(); +// newMsg.from_id.user_id = myId; +// } } } } else { @@ -7029,7 +7039,46 @@ public void prepareImportHistory(long dialogId, Uri uri, ArrayList<Uri> mediaUri continue; } - String path = MediaController.copyFileToCache(mediaUri, "txt"); + String ext = "txt"; + String filename = FileLoader.fixFileName(MediaController.getFileName(uri)); + if (filename != null && filename.endsWith(".zip")) { + ext = "zip"; + } + + String path = MediaController.copyFileToCache(mediaUri, ext); + if ("zip".equals(ext)) { + File zipfile = new File(path); + try { + try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipfile))) { + ZipEntry zipEntry = zis.getNextEntry(); + while (zipEntry != null) { + if (zipEntry.getName().endsWith(".txt")) { + File newFile = MediaController.createFileInCache(zipEntry.getName(), "txt"); + path = newFile.getAbsolutePath(); + FileOutputStream fos = new FileOutputStream(newFile); + byte[] buffer = new byte[1024]; + int len; + while ((len = zis.read(buffer)) > 0) { + fos.write(buffer, 0, len); + } + fos.close(); + break; + } + zipEntry = zis.getNextEntry(); + } + zis.closeEntry(); + } catch (IOException e) { + FileLog.e(e); + } + } catch (Exception e2) { + FileLog.e(e2); + } + try { + zipfile.delete(); + } catch (Exception e) { + FileLog.e(e); + } + } if (path == null) { continue; } @@ -8064,7 +8113,7 @@ public static void prepareSendingBotContextResult(BaseFragment fragment, Account user.phone = result.send_message.phone_number; user.first_name = result.send_message.first_name; user.last_name = result.send_message.last_name; - TLRPC.TL_restrictionReason reason = new TLRPC.TL_restrictionReason(); + TLRPC.RestrictionReason reason = new TLRPC.RestrictionReason(); reason.text = result.send_message.vcard; reason.platform = ""; reason.reason = ""; diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/SharedConfig.java b/TMessagesProj/src/main/java/org/telegram/messenger/SharedConfig.java index 778dfb3ee67..bf5844d4b45 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/SharedConfig.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/SharedConfig.java @@ -275,12 +275,16 @@ private static boolean isWhitelisted(MediaCodecInfo codecInfo) { // public static int saveToGalleryFlags; public static int mapPreviewType = 2; + public static int searchEngineType = 0; + public static String searchEngineCustomURLQuery, searchEngineCustomURLAutocomplete; public static boolean chatBubbles = Build.VERSION.SDK_INT >= 30; public static boolean raiseToSpeak = false; public static boolean raiseToListen = true; public static boolean nextMediaTap = true; public static boolean recordViaSco = false; public static boolean customTabs = true; + public static boolean inappBrowser = true; + public static boolean adaptableColorInBrowser = true; public static boolean directShare = true; public static boolean inappCamera = true; public static boolean roundCamera16to9 = true; @@ -578,11 +582,14 @@ public static void loadConfig() { preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE); SaveToGallerySettingsHelper.load(preferences); mapPreviewType = preferences.getInt("mapPreviewType", 2); + searchEngineType = preferences.getInt("searchEngineType", 0); raiseToListen = preferences.getBoolean("raise_to_listen", true); raiseToSpeak = preferences.getBoolean("raise_to_speak", false); nextMediaTap = preferences.getBoolean("next_media_on_tap", true); recordViaSco = preferences.getBoolean("record_via_sco", false); customTabs = preferences.getBoolean("custom_tabs", true); + inappBrowser = preferences.getBoolean("inapp_browser", true); + adaptableColorInBrowser = preferences.getBoolean("adaptableBrowser", false); directShare = preferences.getBoolean("direct_share", true); shuffleMusic = preferences.getBoolean("shuffleMusic", false); playOrderReversed = !shuffleMusic && preferences.getBoolean("playOrderReversed", false); @@ -1185,6 +1192,14 @@ public static void setSecretMapPreviewType(int value) { editor.apply(); } + public static void setSearchEngineType(int value) { + searchEngineType = value; + SharedPreferences preferences = MessagesController.getGlobalMainSettings(); + SharedPreferences.Editor editor = preferences.edit(); + editor.putInt("searchEngineType", searchEngineType); + editor.apply(); + } + public static void setNoSoundHintShowed(boolean value) { if (noSoundHintShowed == value) { return; @@ -1224,14 +1239,30 @@ public static boolean enabledRaiseTo(boolean speak) { return raiseToListen && (!speak || raiseToSpeak); } - public static void toggleCustomTabs() { - customTabs = !customTabs; + public static void toggleCustomTabs(boolean newValue) { + customTabs = newValue; SharedPreferences preferences = MessagesController.getGlobalMainSettings(); SharedPreferences.Editor editor = preferences.edit(); editor.putBoolean("custom_tabs", customTabs); editor.apply(); } + public static void toggleInappBrowser() { + inappBrowser = !inappBrowser; + SharedPreferences preferences = MessagesController.getGlobalMainSettings(); + SharedPreferences.Editor editor = preferences.edit(); + editor.putBoolean("inapp_browser", inappBrowser); + editor.apply(); + } + + public static void toggleBrowserAdaptableColors() { + adaptableColorInBrowser = !adaptableColorInBrowser; + SharedPreferences preferences = MessagesController.getGlobalMainSettings(); + SharedPreferences.Editor editor = preferences.edit(); + editor.putBoolean("adaptableBrowser", adaptableColorInBrowser); + editor.apply(); + } + public static void toggleDirectShare() { directShare = !directShare; SharedPreferences preferences = MessagesController.getGlobalMainSettings(); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/Timer.java b/TMessagesProj/src/main/java/org/telegram/messenger/Timer.java new file mode 100644 index 00000000000..fb92829b00e --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/messenger/Timer.java @@ -0,0 +1,104 @@ +package org.telegram.messenger; + +import java.util.ArrayList; + +public class Timer { + + public static Timer create(String name) { + if (!BuildVars.LOGS_ENABLED) + return null; + return new Timer(name); + } + + public static Task start(Timer logger, String task) { + if (logger != null) { + return logger.start(task); + } + return null; + } + + public static void log(Timer logger, String log) { + if (logger != null) { + logger.log(log); + } + } + + public static void done(Task task) { + if (task != null) { + task.done(); + } + } + + + int pad = 0; + + final String name; + final long startTime; + + public Timer(String name) { + this.name = name; + this.startTime = System.currentTimeMillis(); + } + + public ArrayList<Task> tasks = new ArrayList<>(); + + public Task start(String task) { + Task timer = new Task(task); + tasks.add(timer); + return timer; + } + + public void log(String log) { + tasks.add(new Log(log)); + } + + public void finish() { + final long totalTime = System.currentTimeMillis() - startTime; + StringBuilder s = new StringBuilder(); + s.append(name).append(" total=").append(totalTime).append("ms\n"); + for (int i = 0; i < tasks.size(); i++) { + if (tasks.get(i) == null) continue; + s.append("#").append(i); + final int pad = tasks.get(i).pad; + for (int j = 0; j < pad; ++j) s.append(" "); + s.append(" ").append(tasks.get(i)).append("\n"); + } + FileLog.d(s.toString()); + } + + public class Task { + final long startTime; + long endTime = -1; + + final String task; + int pad; + + public Task(String task) { + startTime = System.currentTimeMillis(); + this.task = task; + Timer.this.pad++; + } + + public void done() { + if (this.endTime < 0) + this.pad = Timer.this.pad--; + this.endTime = System.currentTimeMillis(); + } + + @Override + public String toString() { + return task + ": " + (endTime < 0 ? "not done" : (endTime - startTime) + "ms"); + } + } + + public class Log extends Task { + public Log(String task) { + super(task); + } + @Override + public String toString() { + return task; + } + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/UserConfig.java b/TMessagesProj/src/main/java/org/telegram/messenger/UserConfig.java index b6f521b2928..151002867d2 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/UserConfig.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/UserConfig.java @@ -46,6 +46,7 @@ public class UserConfig extends BaseController { public TLRPC.TL_account_tmpPassword tmpPassword; public int ratingLoadTime; public int botRatingLoadTime; + public int webappRatingLoadTime; public boolean contactsReimported; public boolean hasValidDialogLoadIds; public int migrateOffsetId = -1; @@ -154,6 +155,7 @@ public void saveConfig(boolean withFile) { editor.putBoolean("unreadDialogsLoaded", unreadDialogsLoaded); editor.putInt("ratingLoadTime", ratingLoadTime); editor.putInt("botRatingLoadTime", botRatingLoadTime); + editor.putInt("webappRatingLoadTime", webappRatingLoadTime); editor.putBoolean("contactsReimported", contactsReimported); editor.putInt("loginTime", loginTime); editor.putBoolean("syncContacts", syncContacts); @@ -298,6 +300,7 @@ private void checkPremiumSelf(TLRPC.User oldUser, TLRPC.User newUser) { contactsReimported = preferences.getBoolean("contactsReimported", false); ratingLoadTime = preferences.getInt("ratingLoadTime", 0); botRatingLoadTime = preferences.getInt("botRatingLoadTime", 0); + webappRatingLoadTime = preferences.getInt("webappRatingLoadTime", 0); loginTime = preferences.getInt("loginTime", currentAccount); syncContacts = preferences.getBoolean("syncContacts", true); suggestContacts = preferences.getBoolean("suggestContacts", true); @@ -466,6 +469,7 @@ public void clearConfig() { migrateOffsetAccess = -1; ratingLoadTime = 0; botRatingLoadTime = 0; + webappRatingLoadTime = 0; draftsLoaded = false; contactsReimported = true; syncContacts = true; diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/UserObject.java b/TMessagesProj/src/main/java/org/telegram/messenger/UserObject.java index 8a042abab55..19658ad6661 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/UserObject.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/UserObject.java @@ -121,7 +121,7 @@ public static String getForcedFirstName(TLRPC.User user) { if (name == null) { return LocaleController.getString(R.string.HiddenName); } - int index = name.indexOf(" "); + int index = name.indexOf(" ", 2); if (index >= 0) { name = name.substring(0, index); } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/Utilities.java b/TMessagesProj/src/main/java/org/telegram/messenger/Utilities.java index c24bb729f57..edfe41d9e3e 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/Utilities.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/Utilities.java @@ -14,6 +14,7 @@ import android.graphics.Paint; import android.graphics.Path; import android.graphics.Rect; +import android.net.Uri; import com.carrotsearch.randomizedtesting.Xoroshiro128PlusRandom; @@ -612,4 +613,12 @@ public static boolean isNullOrEmpty(final Collection<?> list) { return list == null || list.isEmpty(); } + public static Uri uriParseSafe(String link) { + try { + return Uri.parse(link); + } catch (Exception ignore) { + return null; + } + } + } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/VideoEditedInfo.java b/TMessagesProj/src/main/java/org/telegram/messenger/VideoEditedInfo.java index 30aeb038349..257537b8726 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/VideoEditedInfo.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/VideoEditedInfo.java @@ -26,6 +26,7 @@ import org.telegram.ui.Components.Point; import org.telegram.ui.Components.Reactions.ReactionsLayoutInBubble; import org.telegram.ui.Stories.recorder.StoryEntry; +import org.telegram.ui.Stories.recorder.Weather; import java.util.ArrayList; import java.util.Locale; @@ -127,6 +128,7 @@ public static class MediaEntity { public static final byte TYPE_ROUND = 5; public static final byte TYPE_MESSAGE = 6; public static final byte TYPE_LINK = 7; + public static final byte TYPE_WEATHER = 8; public byte type; public byte subType; @@ -175,6 +177,7 @@ public static class MediaEntity { public TL_stories.MediaArea mediaArea; public TLRPC.MessageMedia media; + public Weather.State weather; public float density; public long roundOffset; @@ -255,6 +258,11 @@ public MediaEntity(AbstractSerializedData data, boolean full, boolean exception) roundDuration = data.readInt64(exception); } else if (type == TYPE_PHOTO) { segmentedPath = data.readString(exception); + } else if (type == TYPE_WEATHER) { + int magic = data.readInt32(exception); + if (magic == 0x7EA7539) { + weather = Weather.State.TLdeserialize(data); + } } } @@ -321,6 +329,13 @@ public void serializeTo(AbstractSerializedData data, boolean full) { data.writeInt64(roundDuration); } else if (type == TYPE_PHOTO) { data.writeString(segmentedPath); + } else if (type == TYPE_WEATHER) { + if (weather == null) { + data.writeInt32(0xdeadbeef); + } else { + data.writeInt32(0x7EA7539); + weather.serializeToStream(data); + } } } @@ -374,6 +389,7 @@ public MediaEntity copy() { entity.roundLeft = roundLeft; entity.roundRight = roundRight; entity.linkSettings = linkSettings; + entity.weather = weather; return entity; } } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/browser/Browser.java b/TMessagesProj/src/main/java/org/telegram/messenger/browser/Browser.java index 4bf72a64a5c..f558a3b1af7 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/browser/Browser.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/browser/Browser.java @@ -13,10 +13,10 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; -import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.BitmapFactory; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.text.TextUtils; @@ -43,15 +43,20 @@ import org.telegram.messenger.support.customtabsclient.shared.ServiceConnectionCallback; import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.TLRPC; +import org.telegram.ui.ActionBar.ActionBarLayout; import org.telegram.ui.ActionBar.AlertDialog; +import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.ActionBar.BottomSheetTabs; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.LaunchActivity; +import org.telegram.ui.web.RestrictedDomainsList; import java.lang.ref.WeakReference; +import java.net.IDN; import java.net.URLEncoder; -import java.util.Collections; import java.util.List; import java.util.regex.Matcher; +import java.util.regex.Pattern; public class Browser { @@ -221,9 +226,12 @@ public void init() {} public void end() { end(false); } - public void end(boolean replaced) {} + public void end(boolean replaced) { + if (onEndListener != null) { + onEndListener.run(); + } + } - private Runnable onCancelListener; public void cancel() { cancel(false); } @@ -233,20 +241,27 @@ public void cancel(boolean replaced) { } end(replaced); } + + private Runnable onCancelListener; public void onCancel(Runnable onCancelListener) { this.onCancelListener = onCancelListener; } + + private Runnable onEndListener; + public void onEnd(Runnable onEndListener) { + this.onEndListener = onEndListener; + } } public static void openUrl(final Context context, Uri uri, final boolean allowCustom, boolean tryTelegraph) { - openUrl(context, uri, allowCustom, tryTelegraph, false, null, null); + openUrl(context, uri, allowCustom, tryTelegraph, false, null, null, false); } public static void openUrl(final Context context, Uri uri, final boolean allowCustom, boolean tryTelegraph, Progress inCaseLoading) { - openUrl(context, uri, allowCustom, tryTelegraph, false, inCaseLoading, null); + openUrl(context, uri, allowCustom, tryTelegraph, false, inCaseLoading, null, false); } - public static void openUrl(final Context context, Uri uri, boolean _allowCustom, boolean tryTelegraph, boolean forceNotInternalForApps, Progress inCaseLoading, String browser) { + public static void openUrl(final Context context, Uri uri, boolean _allowCustom, boolean tryTelegraph, boolean forceNotInternalForApps, Progress inCaseLoading, String browser, boolean allowIntent) { if (context == null || uri == null) { return; } @@ -338,56 +353,8 @@ public static void openUrl(final Context context, Uri uri, boolean _allowCustom, } uri = Uri.parse("https://" + finalPath); } - if (allowCustom && SharedConfig.customTabs && !internalUri && !scheme.equals("tel")) { - String[] browserPackageNames = null; - try { - Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")); - List<ResolveInfo> list = context.getPackageManager().queryIntentActivities(browserIntent, 0); - if (list != null && !list.isEmpty()) { - browserPackageNames = new String[list.size()]; - for (int a = 0; a < list.size(); a++) { - browserPackageNames[a] = list.get(a).activityInfo.packageName; - if (BuildVars.LOGS_ENABLED) { - FileLog.d("default browser name = " + browserPackageNames[a]); - } - } - } - } catch (Exception ignore) { - - } - - List<ResolveInfo> allActivities = null; - try { - Intent viewIntent = new Intent(Intent.ACTION_VIEW, uri); - allActivities = context.getPackageManager().queryIntentActivities(viewIntent, 0); - if (browserPackageNames != null) { - for (int a = 0; a < allActivities.size(); a++) { - for (int b = 0; b < browserPackageNames.length; b++) { - if (browserPackageNames[b].equals(allActivities.get(a).activityInfo.packageName)) { - allActivities.remove(a); - a--; - break; - } - } - } - } else { - for (int a = 0; a < allActivities.size(); a++) { - if (allActivities.get(a).activityInfo.packageName.toLowerCase().contains("browser") || allActivities.get(a).activityInfo.packageName.toLowerCase().contains("chrome")) { - allActivities.remove(a); - a--; - } - } - } - if (BuildVars.LOGS_ENABLED) { - for (int a = 0; a < allActivities.size(); a++) { - FileLog.d("device has " + allActivities.get(a).activityInfo.packageName + " to open " + uri.toString()); - } - } - } catch (Exception ignore) { - - } - - if (forceBrowser[0] || allActivities == null || allActivities.isEmpty()) { + if (allowCustom && !SharedConfig.inappBrowser && SharedConfig.customTabs && !internalUri && !scheme.equals("tel") && !isTonsite(uri.toString())) { + if (forceBrowser[0] || !openInExternalApp(context, uri.toString(), false) || !hasAppToOpen(context, uri.toString())) { if (MessagesController.getInstance(currentAccount).authDomains.contains(host)) { Intent intent = new Intent(Intent.ACTION_VIEW, uri); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); @@ -401,11 +368,13 @@ public static void openUrl(final Context context, Uri uri, boolean _allowCustom, PendingIntent copy = PendingIntent.getBroadcast(ApplicationLoader.applicationContext, 0, new Intent(ApplicationLoader.applicationContext, CustomTabsCopyReceiver.class), PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(getSession()); - builder.addMenuItem(LocaleController.getString("CopyLink", R.string.CopyLink), copy); + + builder.addMenuItem(LocaleController.getString(R.string.CopyLink), copy); builder.setToolbarColor(Theme.getColor(Theme.key_actionBarBrowser)); builder.setShowTitle(true); builder.setActionButton(BitmapFactory.decodeResource(context.getResources(), R.drawable.msg_filled_shareout), LocaleController.getString("ShareFile", R.string.ShareFile), PendingIntent.getBroadcast(ApplicationLoader.applicationContext, 0, share, PendingIntent.FLAG_MUTABLE ), true); + CustomTabsIntent intent = builder.build(); intent.setUseNewTask(); intent.launchUrl(context, uri); @@ -416,34 +385,212 @@ public static void openUrl(final Context context, Uri uri, boolean _allowCustom, FileLog.e(e); } try { - Intent intent = new Intent(Intent.ACTION_VIEW, uri); - if (internalUri) { - ComponentName componentName = new ComponentName(context.getPackageName(), LaunchActivity.class.getName()); - intent.setComponent(componentName); + final boolean inappBrowser = ( + SharedConfig.inappBrowser && + TextUtils.isEmpty(browserPackage) && + !RestrictedDomainsList.getInstance().isRestricted(AndroidUtilities.getHostAuthority(uri, true)) && + (uri.getScheme() == null || "https".equals(uri.getScheme()) || "http".equals(uri.getScheme()) || "tonsite".equals(uri.getScheme())) + || + isTonsite(uri.toString()) + ); + if (internalUri && LaunchActivity.instance != null) { + LaunchActivity.dismissAllWeb(); + openAsInternalIntent(LaunchActivity.instance, uri.toString(), forceNotInternalForApps, inCaseLoading); + } else { + if (inappBrowser) { + if (!openInExternalApp(context, uri.toString(), allowIntent)) { + openInTelegramBrowser(context, uri.toString(), inCaseLoading); + } + } else { + openInExternalBrowser(context, uri.toString(), allowIntent, browserPackage); + } } - if (!TextUtils.isEmpty(browserPackage)) { - intent.setPackage(browserPackage); + } catch (Exception e) { + FileLog.e(e); + } + } + + public static boolean openAsInternalIntent(Context context, String url) { + return openAsInternalIntent(context, url, false, null); + } + public static boolean openAsInternalIntent(Context context, String url, Browser.Progress progress) { + return openAsInternalIntent(context, url, false, progress); + } + public static boolean openAsInternalIntent(Context context, String url, boolean forceNotInternalForApps) { + return openAsInternalIntent(context, url, forceNotInternalForApps, null); + } + public static boolean openAsInternalIntent(Context context, String url, boolean forceNotInternalForApps, Browser.Progress progress) { + if (url == null) return false; + LaunchActivity activity = null; + if (AndroidUtilities.findActivity(context) instanceof LaunchActivity) { + activity = (LaunchActivity) AndroidUtilities.findActivity(context); + } else if (LaunchActivity.instance != null) { + activity = LaunchActivity.instance; + } else { + return false; + } + if (activity == null) return false; + final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + ComponentName componentName = new ComponentName(context.getPackageName(), LaunchActivity.class.getName()); + intent.setComponent(componentName); + intent.putExtra(android.provider.Browser.EXTRA_CREATE_NEW_TAB, true); + intent.putExtra(android.provider.Browser.EXTRA_APPLICATION_ID, context.getPackageName()); + intent.putExtra(LaunchActivity.EXTRA_FORCE_NOT_INTERNAL_APPS, forceNotInternalForApps); + activity.onNewIntent(intent, progress); + return true; + } + + public static boolean openInTelegramBrowser(Context context, String url, Browser.Progress progress) { + if (LaunchActivity.instance != null) { + BottomSheetTabs tabs = LaunchActivity.instance.getBottomSheetTabs(); + if (tabs != null && tabs.tryReopenTab(url) != null) { + return true; + } + } + BaseFragment fragment = LaunchActivity.getSafeLastFragment(); + if (fragment != null && fragment.getParentLayout() instanceof ActionBarLayout) { + fragment = ((ActionBarLayout) fragment.getParentLayout()).getSheetFragment(); + } + if (fragment == null) { + return false; + } + fragment.createArticleViewer(false).open(url, progress); + return true; + } + + public static boolean openInExternalBrowser(Context context, String url, boolean allowIntent) { + return openInExternalBrowser(context, url, allowIntent, null); + } + public static boolean openInExternalBrowser(Context context, String url, boolean allowIntent, String browser) { + if (url == null) return false; + try { + Uri uri = Uri.parse(url); + final boolean isIntentScheme = uri.getScheme() != null && uri.getScheme().equalsIgnoreCase("intent"); + if (isIntentScheme && !allowIntent) return false; + final Intent intent = isIntentScheme ? + Intent.parseUri(uri.toString(), Intent.URI_INTENT_SCHEME) : + new Intent(Intent.ACTION_VIEW, uri); + if (!TextUtils.isEmpty(browser)) { + intent.setPackage(browser); } intent.putExtra(android.provider.Browser.EXTRA_CREATE_NEW_TAB, true); intent.putExtra(android.provider.Browser.EXTRA_APPLICATION_ID, context.getPackageName()); - if (internalUri && context instanceof LaunchActivity) { - intent.putExtra(LaunchActivity.EXTRA_FORCE_NOT_INTERNAL_APPS, forceNotInternalForApps); - ((LaunchActivity) context).onNewIntent(intent, inCaseLoading); - } else { - try { - context.startActivity(intent); - } catch (Exception e2) { - if (browserPackage != null) { - intent.setPackage(browserPackage = null); - context.startActivity(intent); - } else { - FileLog.e(e2); - } - } + context.startActivity(intent); + return true; + } catch (Exception e) { + FileLog.e(e); + } + return false; + } + + public static boolean isTonsite(String url) { + String domain = AndroidUtilities.getHostAuthority(url, true); + if (domain != null && (domain.endsWith(".ton") || domain.endsWith(".adnl"))) { + return true; + } + Uri uri = Uri.parse(url); + if (uri.getScheme() != null && uri.getScheme().equalsIgnoreCase("tonsite")) { + return true; + } + return false; + } + + private static Pattern domainPattern; + public static boolean isTonsitePunycode(String url) { + if (domainPattern == null) domainPattern = Pattern.compile("^[a-zA-Z0-9\\-\\_\\.]+\\.[a-zA-Z0-9\\-\\_]+$"); + String domain = AndroidUtilities.getHostAuthority(url, true); + if (domain != null && (domain.endsWith(".ton") || domain.endsWith(".adnl"))) { + return !domainPattern.matcher(domain).matches(); + } + Uri uri = Uri.parse(url); + if (uri.getScheme() != null && uri.getScheme().equalsIgnoreCase("tonsite")) { + return !domainPattern.matcher(uri.getScheme()).matches(); + } + return false; + } + + public static boolean openInExternalApp(Context context, String url, boolean allowIntent) { + if (url == null) return false; + try { + if (isTonsite(url) || isInternalUrl(url, null)) return false; + Uri uri = Uri.parse(url); + url = Browser.replace( + uri, + uri.getScheme() == null ? "https" : uri.getScheme(), + uri.getHost() != null ? uri.getHost().toLowerCase() : uri.getHost(), + TextUtils.isEmpty(uri.getPath()) ? "/" : uri.getPath() + ); + uri = Uri.parse(url); + final boolean isIntentScheme = uri.getScheme() != null && uri.getScheme().equalsIgnoreCase("intent"); + if (isIntentScheme && !allowIntent) return false; + final Intent intent = isIntentScheme ? + Intent.parseUri(uri.toString(), Intent.URI_INTENT_SCHEME) : + new Intent(Intent.ACTION_VIEW, uri); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + intent.addCategory(Intent.CATEGORY_BROWSABLE); + intent.addCategory(Intent.CATEGORY_DEFAULT); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.addFlags(Intent.FLAG_ACTIVITY_REQUIRE_NON_BROWSER); + } else if (!hasAppToOpen(context, url)) { + return false; } + context.startActivity(intent); + return true; } catch (Exception e) { FileLog.e(e); } + return false; + } + + public static boolean hasAppToOpen(Context context, String url) { + if (url == null) return false; + + String[] browserPackageNames = null; + try { + Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")); + List<ResolveInfo> list = context.getPackageManager().queryIntentActivities(browserIntent, 0); + if (list != null && !list.isEmpty()) { + browserPackageNames = new String[list.size()]; + for (int a = 0; a < list.size(); a++) { + browserPackageNames[a] = list.get(a).activityInfo.packageName; + if (BuildVars.LOGS_ENABLED) { + FileLog.d("default browser name = " + browserPackageNames[a]); + } + } + } + } catch (Exception ignore) {} + + List<ResolveInfo> allActivities = null; + try { + Intent viewIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + allActivities = context.getPackageManager().queryIntentActivities(viewIntent, 0); + if (browserPackageNames != null) { + for (int a = 0; a < allActivities.size(); a++) { + for (int b = 0; b < browserPackageNames.length; b++) { + if (browserPackageNames[b].equals(allActivities.get(a).activityInfo.packageName)) { + allActivities.remove(a); + a--; + break; + } + } + } + } else { + for (int a = 0; a < allActivities.size(); a++) { + final String packageName = allActivities.get(a).activityInfo.packageName.toLowerCase(); + if (isBrowserPackageName(packageName)) { + allActivities.remove(a); + a--; + } + } + } + if (BuildVars.LOGS_ENABLED) { + for (int a = 0; a < allActivities.size(); a++) { + FileLog.d("device has " + allActivities.get(a).activityInfo.packageName + " to open " + url); + } + } + } catch (Exception ignore) {} + + return allActivities != null && !allActivities.isEmpty(); } public static boolean isInternalUrl(String url, boolean[] forceBrowser) { @@ -596,30 +743,76 @@ public static String getBrowserPackageName(String browser) { return null; } - public static String replaceHostname(Uri originalUri, String newHostname) { - String scheme = originalUri.getScheme(); - String userInfo = originalUri.getUserInfo(); - int port = originalUri.getPort(); - String path = originalUri.getPath(); - String query = originalUri.getQuery(); - String fragment = originalUri.getFragment(); + public static boolean isBrowserPackageName(String name) { + return name != null && ( + name.contains("browser") || + name.contains("chrome") || + name.contains("firefox") || + "com.microsoft.emmx".equals(name) || + "com.opera.mini.native".equals(name) || + "com.duckduckgo.mobile.android".equals(name) || + "com.UCMobile.intl".equals(name) + ); + } + + public static boolean isPunycodeAllowed(String host) { + if (host == null) return true; + String[] levels = host.split("\\."); + if (levels.length <= 0) return true; + String topLevel = levels[levels.length - 1]; + return topLevel.startsWith("xn--"); + } + + public static String IDN_toUnicode(String host) { + try { + host = IDN.toASCII(host, IDN.ALLOW_UNASSIGNED); + } catch (Exception e) { + FileLog.e(e); + } + if (!isPunycodeAllowed(host)) return host; + try { + host = IDN.toUnicode(host, IDN.ALLOW_UNASSIGNED); + } catch (Exception e) { + FileLog.e(e); + } + return host; + } + + public static String replaceHostname(Uri originalUri, String newHostname, String newScheme) { + return replace(originalUri, newScheme, newHostname, null); + } - StringBuilder modifiedUriBuilder = new StringBuilder(); - modifiedUriBuilder.append(scheme).append("://"); - if (userInfo != null) { - modifiedUriBuilder.append(userInfo).append("@"); + public static String replace(Uri originalUri, String newScheme, String newHostname, String newPath) { + final StringBuilder modifiedUriBuilder = new StringBuilder(); + final String scheme = newScheme == null ? originalUri.getScheme() : newScheme; + if (scheme != null) { + modifiedUriBuilder.append(scheme).append("://"); } - modifiedUriBuilder.append(newHostname); - if (port != -1) { - modifiedUriBuilder.append(":").append(port); + if (originalUri.getUserInfo() != null) { + modifiedUriBuilder.append(originalUri.getUserInfo()).append("@"); + } + if (newHostname == null) { + if (originalUri.getHost() != null) { + modifiedUriBuilder.append(originalUri.getHost()); + } + } else { + modifiedUriBuilder.append(newHostname); } - modifiedUriBuilder.append(path); - if (query != null) { - modifiedUriBuilder.append("?").append(query); + if (originalUri.getPort() != -1) { + modifiedUriBuilder.append(":").append(originalUri.getPort()); } - if (fragment != null) { - modifiedUriBuilder.append("#").append(fragment); + if (newPath != null) { + modifiedUriBuilder.append(newPath); + } else { + modifiedUriBuilder.append(originalUri.getPath()); + } + if (originalUri.getQuery() != null) { + modifiedUriBuilder.append("?").append(originalUri.getQuery()); + } + if (originalUri.getFragment() != null) { + modifiedUriBuilder.append("#").append(originalUri.getFragment()); } return modifiedUriBuilder.toString(); } + } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/camera/Camera2Session.java b/TMessagesProj/src/main/java/org/telegram/messenger/camera/Camera2Session.java index bc37ca6d8e9..207b15f9ff5 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/camera/Camera2Session.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/camera/Camera2Session.java @@ -355,6 +355,17 @@ public void setZoom(float value) { } } + private boolean flashing; + public void setFlash(boolean flash) { + if (flashing != flash) { + flashing = flash; + updateCaptureRequest(); + } + } + public boolean getFlash() { + return flashing; + } + public float getZoom() { return currentZoom; } @@ -476,6 +487,8 @@ private void updateCaptureRequest() { captureRequestBuilder.set(CaptureRequest.CONTROL_SCENE_MODE, isFront ? CameraMetadata.CONTROL_SCENE_MODE_NIGHT_PORTRAIT : CameraMetadata.CONTROL_SCENE_MODE_NIGHT); } + captureRequestBuilder.set(CaptureRequest.FLASH_MODE, flashing ? (recordingVideo ? CaptureRequest.FLASH_MODE_TORCH : CaptureRequest.FLASH_MODE_SINGLE) : CaptureRequest.FLASH_MODE_OFF); + if (recordingVideo) { captureRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, new Range<Integer>(30, 60)); captureRequestBuilder.set(CaptureRequest.CONTROL_CAPTURE_INTENT, CaptureRequest.CONTROL_CAPTURE_INTENT_VIDEO_RECORD); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraController.java b/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraController.java index 1f493014d24..7349338bfe2 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraController.java @@ -554,6 +554,22 @@ public void openRound(final CameraSession session, final SurfaceTexture texture, } Camera.Parameters params = camera.getParameters(); + List<String> rawFlashModes = params.getSupportedFlashModes(); + session.availableFlashModes.clear(); + if (rawFlashModes != null) { + for (int a = 0; a < rawFlashModes.size(); a++) { + String rawFlashMode = rawFlashModes.get(a); + if (rawFlashMode.equals(Camera.Parameters.FLASH_MODE_OFF) || rawFlashMode.equals(Camera.Parameters.FLASH_MODE_ON) || rawFlashMode.equals(Camera.Parameters.FLASH_MODE_AUTO)) { + session.availableFlashModes.add(rawFlashMode); + } + } + if (!TextUtils.equals(session.getCurrentFlashMode(), params.getFlashMode()) || !session.availableFlashModes.contains(session.getCurrentFlashMode())) { + session.checkFlashMode(session.availableFlashModes.get(0)); + } else { + session.checkFlashMode(session.getCurrentFlashMode()); + } + } + session.configureRoundCamera(true); if (configureCallback != null) { configureCallback.run(); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraSession.java b/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraSession.java index ae79192cb69..ce82a9b9199 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraSession.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraSession.java @@ -138,22 +138,34 @@ public void checkFlashMode(String mode) { return; } currentFlashMode = mode; - configurePhotoCamera(); - SharedPreferences sharedPreferences = ApplicationLoader.applicationContext.getSharedPreferences("camera", Activity.MODE_PRIVATE); - sharedPreferences.edit().putString(cameraInfo.frontCamera != 0 ? "flashMode_front" : "flashMode", mode).commit(); + if (isRound) { + configureRoundCamera(false); + } else { + configurePhotoCamera(); + SharedPreferences sharedPreferences = ApplicationLoader.applicationContext.getSharedPreferences("camera", Activity.MODE_PRIVATE); + sharedPreferences.edit().putString(cameraInfo.frontCamera != 0 ? "flashMode_front" : "flashMode", mode).commit(); + } } public void setCurrentFlashMode(String mode) { currentFlashMode = mode; - configurePhotoCamera(); - SharedPreferences sharedPreferences = ApplicationLoader.applicationContext.getSharedPreferences("camera", Activity.MODE_PRIVATE); - sharedPreferences.edit().putString(cameraInfo.frontCamera != 0 ? "flashMode_front" : "flashMode", mode).commit(); + if (isRound) { + configureRoundCamera(false); + } else { + configurePhotoCamera(); + SharedPreferences sharedPreferences = ApplicationLoader.applicationContext.getSharedPreferences("camera", Activity.MODE_PRIVATE); + sharedPreferences.edit().putString(cameraInfo.frontCamera != 0 ? "flashMode_front" : "flashMode", mode).commit(); + } } public void setTorchEnabled(boolean enabled) { try { currentFlashMode = enabled ? Camera.Parameters.FLASH_MODE_TORCH : Camera.Parameters.FLASH_MODE_OFF; - configurePhotoCamera(); + if (isRound) { + configureRoundCamera(false); + } else { + configurePhotoCamera(); + } } catch (Exception e) { FileLog.e(e); } @@ -262,7 +274,7 @@ protected boolean configureRoundCamera(boolean initial) { } catch (Exception e) { // } - params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); + params.setFlashMode(currentFlashMode); params.setZoom((int) (currentZoom * maxZoom)); try { camera.setParameters(params); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/ringtone/RingtoneUploader.java b/TMessagesProj/src/main/java/org/telegram/messenger/ringtone/RingtoneUploader.java index f0566c216e9..69b1fb34caa 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/ringtone/RingtoneUploader.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/ringtone/RingtoneUploader.java @@ -89,7 +89,7 @@ public void error(TLRPC.TL_error error) { } else if (error.text.equals("RINGTONE_SIZE_TOO_BIG")) { NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.showBulletin, Bulletin.TYPE_ERROR_SUBTITLE, LocaleController.formatString("TooLargeError", R.string.TooLargeError), LocaleController.formatString("ErrorRingtoneSizeTooBig", R.string.ErrorRingtoneSizeTooBig, (MessagesController.getInstance(currentAccount).ringtoneSizeMax / 1024))); } else { - NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.showBulletin, Bulletin.TYPE_ERROR_SUBTITLE, LocaleController.formatString("InvalidFormatError", R.string.InvalidFormatError), LocaleController.formatString("ErrorRingtoneInvalidFormat", R.string.ErrorRingtoneInvalidFormat)); + NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.showBulletin, Bulletin.TYPE_ERROR_SUBTITLE, LocaleController.formatString("InvalidFormatError", R.string.InvalidFormatError), LocaleController.getString(R.string.ErrorRingtoneInvalidFormat)); } }); } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/utils/BillingUtilities.java b/TMessagesProj/src/main/java/org/telegram/messenger/utils/BillingUtilities.java index 1c819bf6c4f..41bdd821d12 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/utils/BillingUtilities.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/utils/BillingUtilities.java @@ -1,6 +1,8 @@ package org.telegram.messenger.utils; +import android.app.Activity; import android.content.Context; +import android.content.SharedPreferences; import android.util.Base64; import androidx.core.util.Pair; @@ -15,7 +17,10 @@ import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.FileLog; import org.telegram.messenger.UserConfig; +import org.telegram.messenger.Utilities; +import org.telegram.tgnet.AbstractSerializedData; import org.telegram.tgnet.SerializedData; +import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; import java.io.InputStream; @@ -28,8 +33,6 @@ public class BillingUtilities { private static final String CURRENCY_FILE = "currencies.json"; private static final String CURRENCY_EXP = "exp"; - private static TLRPC.InputStorePaymentPurpose remPaymentPurpose; - @SuppressWarnings("ConstantConditions") public static void extractCurrencyExp(Map<String, Integer> currencyExpMap) { if (!currencyExpMap.isEmpty()) { @@ -55,21 +58,146 @@ public static Pair<String, String> createDeveloperPayload(TLRPC.InputStorePaymen long currentAccountId = accountInstance.getUserConfig().getClientUserId(); byte[] currentAccountIdBytes = String.valueOf(currentAccountId).getBytes(Charsets.UTF_8); String obfuscatedAccountId = Base64.encodeToString(currentAccountIdBytes, Base64.DEFAULT); + return Pair.create(obfuscatedAccountId, savePurpose(paymentPurpose)); + } + + public static String savePurpose(TLRPC.InputStorePaymentPurpose paymentPurpose) { + final long id = Utilities.random.nextLong(); + FileLog.d("BillingUtilities.savePurpose id=" + id + " paymentPurpose=" + paymentPurpose); + + SerializedData id_data = new SerializedData(8); + id_data.writeInt64(id); + String id_hex = Utilities.bytesToHex(id_data.toByteArray()); + id_data.cleanup(); + + FileLog.d("BillingUtilities.savePurpose id_hex=" + id_hex + " paymentPurpose=" + paymentPurpose); + + TL_savedPurpose savedPurpose = new TL_savedPurpose(); + savedPurpose.id = id; + savedPurpose.flags = 1; + savedPurpose.purpose = paymentPurpose; + + SerializedData data = new SerializedData(savedPurpose.getObjectSize()); + savedPurpose.serializeToStream(data); + String full_data_hex = Utilities.bytesToHex(data.toByteArray()); + data.cleanup(); - SerializedData serializedData = new SerializedData(paymentPurpose.getObjectSize()); - paymentPurpose.serializeToStream(serializedData); - String obfuscatedData = Base64.encodeToString(serializedData.toByteArray(), Base64.DEFAULT); - serializedData.cleanup(); - if ( - paymentPurpose instanceof TLRPC.TL_inputStorePaymentPremiumGiftCode || - paymentPurpose instanceof TLRPC.TL_inputStorePaymentPremiumGiveaway - ) { - remPaymentPurpose = paymentPurpose; - return Pair.create(obfuscatedAccountId, obfuscatedAccountId); - } else { - remPaymentPurpose = null; + if (savedPurpose.getObjectSize() > 28) { + FileLog.d("BillingUtilities.savePurpose: sending short version, original size is " + savedPurpose.getObjectSize() + " bytes"); + + savedPurpose.flags = 0; + savedPurpose.purpose = null; + } + + data = new SerializedData(savedPurpose.getObjectSize()); + savedPurpose.serializeToStream(data); + String data_hex = Utilities.bytesToHex(data.toByteArray()); + data.cleanup(); + + SharedPreferences prefs = ApplicationLoader.applicationContext.getSharedPreferences("purchases", Activity.MODE_PRIVATE); + prefs.edit().putString(id_hex, full_data_hex).apply(); + FileLog.d("BillingUtilities.savePurpose: saved {" + full_data_hex + "} under " + id_hex); + FileLog.d("BillingUtilities.savePurpose: but sending {" + data_hex + "}"); + + return data_hex; + } + + public static TLRPC.InputStorePaymentPurpose getPurpose(String data_hex) throws RuntimeException { + FileLog.d("BillingUtilities.getPurpose " + data_hex); + + SerializedData data = new SerializedData(Utilities.hexToBytes(data_hex)); + TL_savedPurpose savedPurpose = TL_savedPurpose.TLdeserialize(data, data.readInt32(true), true); + data.cleanup(); + + if (savedPurpose.purpose != null) { + FileLog.d("BillingUtilities.getPurpose: got purpose from received obfuscated profile id"); + return savedPurpose.purpose; + } + + SerializedData id_data = new SerializedData(8); + id_data.writeInt64(savedPurpose.id); + String id_hex = Utilities.bytesToHex(id_data.toByteArray()); + id_data.cleanup(); + + FileLog.d("BillingUtilities.getPurpose: searching purpose under " + id_hex); + + SharedPreferences prefs = ApplicationLoader.applicationContext.getSharedPreferences("purchases", Activity.MODE_PRIVATE); + String full_data_hex = prefs.getString(id_hex, null); + if (full_data_hex == null) { + FileLog.d("BillingUtilities.getPurpose: purpose under " + id_hex + " not found"); + throw new RuntimeException("no purpose under " + id_hex + " found :("); + } + + FileLog.d("BillingUtilities.getPurpose: got {" + full_data_hex + "} under " + id_hex); + + SerializedData full_data = new SerializedData(Utilities.hexToBytes(full_data_hex)); + savedPurpose = TL_savedPurpose.TLdeserialize(full_data, full_data.readInt32(true), true); + full_data.cleanup(); + + return savedPurpose.purpose; + } + + public static void clearPurpose(String data_hex) { + try { + FileLog.d("BillingUtilities.clearPurpose: got {" + data_hex + "}"); + + SerializedData data = new SerializedData(Utilities.hexToBytes(data_hex)); + TL_savedPurpose savedPurpose = TL_savedPurpose.TLdeserialize(data, data.readInt32(true), true); + + SerializedData id_data = new SerializedData(8); + id_data.writeInt64(savedPurpose.id); + String id_hex = Utilities.bytesToHex(id_data.toByteArray()); + id_data.cleanup(); + FileLog.d("BillingUtilities.clearPurpose: id_hex = " + id_hex); + + SharedPreferences prefs = ApplicationLoader.applicationContext.getSharedPreferences("purchases", Activity.MODE_PRIVATE); + prefs.edit().remove(id_hex).apply(); + } catch (Exception e) { + FileLog.e(e); + } + } + + public static class TL_savedPurpose extends TLObject { + public static final int constructor = 0x1d8ad892; + + public int flags; + public long id; + public TLRPC.InputStorePaymentPurpose purpose; + + public static TL_savedPurpose TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + TL_savedPurpose result = null; + switch (constructor) { + case TL_savedPurpose.constructor: + result = new TL_savedPurpose(); + break; + } + if (result == null && exception) { + throw new RuntimeException(String.format("can't parse magic %x in TL_savedPurpose", constructor)); + } + if (result != null) { + result.readParams(stream, exception); + } + return result; + } + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + id = stream.readInt64(exception); + if ((flags & 1) != 0) { + purpose = TLRPC.InputStorePaymentPurpose.TLdeserialize(stream, stream.readInt32(exception), exception); + } + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + stream.writeInt64(id); + if ((flags & 1) != 0) { + purpose.serializeToStream(stream); + } } - return Pair.create(obfuscatedAccountId, obfuscatedData); } private static AccountInstance findAccountById(long accountId) { @@ -99,19 +227,11 @@ public static Pair<AccountInstance, TLRPC.InputStorePaymentPurpose> extractDevel try { TLRPC.InputStorePaymentPurpose purpose; - if (remPaymentPurpose == null) { - try { - byte[] obfuscatedDataBytes = Base64.decode(obfuscatedData, Base64.DEFAULT); - SerializedData data = new SerializedData(obfuscatedDataBytes); - purpose = TLRPC.InputStorePaymentPurpose.TLdeserialize(data, data.readInt32(true), true); - data.cleanup(); - } catch (Exception e) { - FileLog.e("Billing: Extract payload, no remPaymentPurpose; failed to get purpose", e); - purpose = null; - } - } else { - purpose = remPaymentPurpose; - remPaymentPurpose = null; + try { + purpose = getPurpose(obfuscatedData); + } catch (Exception e) { + FileLog.e("Billing: Extract payload, failed to get purpose", e); + purpose = null; } byte[] obfuscatedAccountIdBytes = Base64.decode(obfuscatedAccountId, Base64.DEFAULT); @@ -128,4 +248,9 @@ public static Pair<AccountInstance, TLRPC.InputStorePaymentPurpose> extractDevel return null; } } + + public static void cleanupPurchase(Purchase purchase) { + AccountIdentifiers identifiers = purchase.getAccountIdentifiers(); + clearPurpose(identifiers.getObfuscatedProfileId()); + } } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/video/TextureRenderer.java b/TMessagesProj/src/main/java/org/telegram/messenger/video/TextureRenderer.java index 95ad2484103..c0176b15144 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/video/TextureRenderer.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/video/TextureRenderer.java @@ -41,11 +41,7 @@ import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; -import androidx.exifinterface.media.ExifInterface; - -import com.google.zxing.common.detector.MathUtils; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ApplicationLoader; @@ -1342,9 +1338,14 @@ public void draw(@NonNull Canvas canvas, CharSequence charSequence, int start, i } private void initLocationEntity(VideoEditedInfo.MediaEntity entity) { - LocationMarker marker = new LocationMarker(ApplicationLoader.applicationContext, entity.density, 0); + final int variant = entity.type == VideoEditedInfo.MediaEntity.TYPE_LOCATION ? LocationMarker.VARIANT_LOCATION : LocationMarker.VARIANT_WEATHER; + LocationMarker marker = new LocationMarker(ApplicationLoader.applicationContext, variant, entity.density, 0); + marker.setIsVideo(true); marker.setText(entity.text); marker.setType(entity.subType, entity.color); + if (entity.weather != null && entity.entities.isEmpty()) { + marker.setCodeEmoji(UserConfig.selectedAccount, entity.weather.getEmoji()); + } marker.setMaxWidth(entity.viewWidth); if (entity.entities.size() == 1) { marker.forceEmoji(); diff --git a/TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java b/TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java index 795ca50a9d0..b09615521b3 100644 --- a/TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java +++ b/TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java @@ -372,8 +372,9 @@ private void sendRequestInternal(TLObject object, RequestDelegate onComplete, Re if (response != 0) { NativeByteBuffer buff = NativeByteBuffer.wrap(response); buff.reused = true; + int magic = buff.readInt32(true); try { - resp = object.deserializeResponse(buff, buff.readInt32(true), true); + resp = object.deserializeResponse(buff, magic, true); } catch (Exception e2) { if (BuildVars.DEBUG_PRIVATE_VERSION) { throw e2; diff --git a/TMessagesProj/src/main/java/org/telegram/tgnet/TLRPC.java b/TMessagesProj/src/main/java/org/telegram/tgnet/TLRPC.java index 7fac04eac3c..f7ee2e99a27 100644 --- a/TMessagesProj/src/main/java/org/telegram/tgnet/TLRPC.java +++ b/TMessagesProj/src/main/java/org/telegram/tgnet/TLRPC.java @@ -26,6 +26,7 @@ import org.telegram.messenger.MessagesController; import org.telegram.messenger.SvgHelper; import org.telegram.messenger.Utilities; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.tgnet.tl.TL_stats; import org.telegram.tgnet.tl.TL_stories; import org.telegram.ui.Stories.MessageMediaStoryFull; @@ -78,7 +79,7 @@ public class TLRPC { public static final int MESSAGE_FLAG_HAS_BOT_ID = 0x00000800; public static final int MESSAGE_FLAG_EDITED = 0x00008000; - public static final int LAYER = 183; + public static final int LAYER = 186; public static abstract class EmailVerifyPurpose extends TLObject { @@ -1745,6 +1746,7 @@ public static abstract class DocumentAttribute extends TLObject { public boolean voice; public byte[] waveform; public int preload_prefix_size; + public double video_start_ts; public boolean nosound; public static DocumentAttribute TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { @@ -1768,9 +1770,12 @@ public static DocumentAttribute TLdeserialize(AbstractSerializedData stream, int case 0x15590068: result = new TL_documentAttributeFilename(); break; - case 0xd38ff1c2: + case TL_documentAttributeVideo.constructor: result = new TL_documentAttributeVideo(); break; + case TL_documentAttributeVideo_layer184.constructor: + result = new TL_documentAttributeVideo_layer184(); + break; case 0x5910cccb: result = new TL_documentAttributeVideo_layer65(); break; @@ -1886,6 +1891,43 @@ public void serializeToStream(AbstractSerializedData stream) { } public static class TL_documentAttributeVideo extends DocumentAttribute { + public static final int constructor = 0x17399fad; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + round_message = (flags & 1) != 0; + supports_streaming = (flags & 2) != 0; + nosound = (flags & 8) != 0; + duration = stream.readDouble(exception); + w = stream.readInt32(exception); + h = stream.readInt32(exception); + if ((flags & 4) != 0) { + preload_prefix_size = stream.readInt32(exception); + } + if ((flags & 16) != 0) { + video_start_ts = stream.readDouble(exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = round_message ? (flags | 1) : (flags &~ 1); + flags = supports_streaming ? (flags | 2) : (flags &~ 2); + flags = nosound ? (flags | 8) : (flags &~ 8); + stream.writeInt32(flags); + stream.writeDouble(duration); + stream.writeInt32(w); + stream.writeInt32(h); + if ((flags & 4) != 0) { + stream.writeInt32(preload_prefix_size); + } + if ((flags & 16) != 0) { + stream.writeDouble(video_start_ts); + } + } + } + + public static class TL_documentAttributeVideo_layer184 extends TL_documentAttributeVideo { public static final int constructor = 0xd38ff1c2; public void readParams(AbstractSerializedData stream, boolean exception) { @@ -6069,7 +6111,10 @@ public static abstract class ChatInvite extends TLObject { public boolean verified; public boolean scam; public boolean fake; + public boolean can_refulfill_subscription; public int color; + public TL_starsSubscriptionPricing subscription_pricing; + public long subscription_form_id; public static ChatInvite TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { ChatInvite result = null; @@ -6077,6 +6122,9 @@ public static ChatInvite TLdeserialize(AbstractSerializedData stream, int constr case TL_chatInvite.constructor: result = new TL_chatInvite(); break; + case TL_chatInvite_layer185.constructor: + result = new TL_chatInvite_layer185(); + break; case TL_chatInvite_layer165.constructor: result = new TL_chatInvite_layer165(); break; @@ -6098,6 +6146,90 @@ public static ChatInvite TLdeserialize(AbstractSerializedData stream, int constr } public static class TL_chatInvite extends ChatInvite { + public static final int constructor = 0xfe65389d; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + channel = (flags & 1) != 0; + broadcast = (flags & 2) != 0; + isPublic = (flags & 4) != 0; + megagroup = (flags & 8) != 0; + request_needed = (flags & 64) != 0; + verified = (flags & 128) != 0; + scam = (flags & 256) != 0; + fake = (flags & 512) != 0; + can_refulfill_subscription = (flags & 2048) != 0; + title = stream.readString(exception); + boolean hasAbout = (flags & 32) != 0; + if (hasAbout) { + about = stream.readString(exception); + } + photo = Photo.TLdeserialize(stream, stream.readInt32(exception), exception); + participants_count = stream.readInt32(exception); + if ((flags & 16) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + User object = User.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + participants.add(object); + } + } + color = stream.readInt32(exception); + if ((flags & 1024) != 0) { + subscription_pricing = TL_starsSubscriptionPricing.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 4096) != 0) { + subscription_form_id = stream.readInt64(exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = channel ? (flags | 1) : (flags &~ 1); + flags = broadcast ? (flags | 2) : (flags &~ 2); + flags = isPublic ? (flags | 4) : (flags &~ 4); + flags = megagroup ? (flags | 8) : (flags &~ 8); + flags = about != null ? (flags | 32) : (flags &~ 32); + flags = request_needed ? (flags | 64) : (flags &~ 64); + flags = verified ? (flags | 128) : (flags &~ 128); + flags = scam ? (flags | 256) : (flags &~ 256); + flags = fake ? (flags | 512) : (flags &~ 512); + flags = can_refulfill_subscription ? (flags | 2048) : (flags &~ 2048); + stream.writeInt32(flags); + stream.writeString(title); + if (about != null) { + stream.writeString(about); + } + photo.serializeToStream(stream); + stream.writeInt32(participants_count); + if ((flags & 16) != 0) { + stream.writeInt32(0x1cb5c415); + int count = participants.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + participants.get(a).serializeToStream(stream); + } + } + stream.writeInt32(color); + if ((flags & 1024) != 0) { + subscription_pricing.serializeToStream(stream); + } + if ((flags & 4096) != 0) { + stream.writeInt64(subscription_form_id); + } + } + } + + public static class TL_chatInvite_layer185 extends TL_chatInvite { public static final int constructor = 0xcde0ec40; public void readParams(AbstractSerializedData stream, boolean exception) { @@ -11230,375 +11362,6 @@ public void serializeToStream(AbstractSerializedData stream) { } } - public static class TL_bots_setBotInfo extends TLObject { - public static final int constructor = 0x10cf3123; - - public int flags; - public InputUser bot; - public String lang_code; - public String name; - public String about; - public String description; - - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return Bool.TLdeserialize(stream, constructor, exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32(flags); - if ((flags & 4) != 0) { - bot.serializeToStream(stream); - } - stream.writeString(lang_code); - if ((flags & 8) != 0) { - stream.writeString(name); - } - if ((flags & 1) != 0) { - stream.writeString(about); - } - if ((flags & 2) != 0) { - stream.writeString(description); - } - } - } - - public static class TL_bots_getBotInfo extends TLObject { - public static final int constructor = 0xdcd914fd; - - public int flags; - public InputUser bot; - public String lang_code; - - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return BotInfo.TLdeserialize(stream, constructor, exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32(flags); - if ((flags & 1) != 0) { - bot.serializeToStream(stream); - } - stream.writeString(lang_code); - } - } - - public static class TL_bots_reorderUsernames extends TLObject { - public static final int constructor = 0x9709b1c2; - - public InputUser bot; - public ArrayList<String> order = new ArrayList<>(); - - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return Bool.TLdeserialize(stream, constructor, exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - bot.serializeToStream(stream); - stream.writeInt32(0x1cb5c415); - int count = order.size(); - stream.writeInt32(count); - for (int a = 0; a < count; a++) { - stream.writeString(order.get(a)); - } - } - } - - public static class TL_bots_toggleUsername extends TLObject { - public static final int constructor = 0x53ca973; - - public InputUser bot; - public String username; - public boolean active; - - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return Bool.TLdeserialize(stream, constructor, exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - bot.serializeToStream(stream); - stream.writeString(username); - stream.writeBool(active); - } - } - - public static abstract class BotInfo extends TLObject { - public long user_id; - public String description; - public ArrayList<TL_botCommand> commands = new ArrayList<>(); - public int version; - public BotMenuButton menu_button; - public int flags; - public Photo description_photo; - public Document description_document; - - public static BotInfo TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { - BotInfo result = null; - switch (constructor) { - case 0xe4169b5d: - result = new TL_botInfo_layer140(); - break; - case 0xbb2e37ce: - result = new TL_botInfoEmpty_layer48(); - break; - case 0x98e81d3a: - result = new TL_botInfo_layer131(); - break; - case 0x9cf585d: - result = new TL_botInfo_layer48(); - break; - case 0x1b74b335: - result = new TL_botInfo_layer139(); - break; - case 0x8f300b57: - result = new TL_botInfo(); - break; - } - if (result == null && exception) { - throw new RuntimeException(String.format("can't parse magic %x in BotInfo", constructor)); - } - if (result != null) { - result.readParams(stream, exception); - } - return result; - } - } - - public static class TL_botInfoEmpty_layer48 extends TL_botInfo { - public static final int constructor = 0xbb2e37ce; - - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - } - } - - public static class TL_botInfo_layer131 extends TL_botInfo { - public static final int constructor = 0x98e81d3a; - - - public void readParams(AbstractSerializedData stream, boolean exception) { - user_id = stream.readInt32(exception); - description = stream.readString(exception); - int magic = stream.readInt32(exception); - if (magic != 0x1cb5c415) { - if (exception) { - throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); - } - return; - } - int count = stream.readInt32(exception); - for (int a = 0; a < count; a++) { - TL_botCommand object = TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); - if (object == null) { - return; - } - commands.add(object); - } - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32((int) user_id); - stream.writeString(description); - stream.writeInt32(0x1cb5c415); - int count = commands.size(); - stream.writeInt32(count); - for (int a = 0; a < count; a++) { - commands.get(a).serializeToStream(stream); - } - } - } - - public static class TL_botInfo_layer48 extends TL_botInfo { - public static final int constructor = 0x9cf585d; - - - public void readParams(AbstractSerializedData stream, boolean exception) { - user_id = stream.readInt32(exception); - version = stream.readInt32(exception); - stream.readString(exception); - description = stream.readString(exception); - int magic = stream.readInt32(exception); - if (magic != 0x1cb5c415) { - if (exception) { - throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); - } - return; - } - int count = stream.readInt32(exception); - for (int a = 0; a < count; a++) { - TL_botCommand object = TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); - if (object == null) { - return; - } - commands.add(object); - } - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32((int) user_id); - stream.writeInt32(version); - stream.writeString(""); - stream.writeString(description); - stream.writeInt32(0x1cb5c415); - int count = commands.size(); - stream.writeInt32(count); - for (int a = 0; a < count; a++) { - commands.get(a).serializeToStream(stream); - } - } - } - - public static class TL_botInfo_layer139 extends BotInfo { - public static final int constructor = 0x1b74b335; - - - public void readParams(AbstractSerializedData stream, boolean exception) { - user_id = stream.readInt64(exception); - description = stream.readString(exception); - int magic = stream.readInt32(exception); - if (magic != 0x1cb5c415) { - if (exception) { - throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); - } - return; - } - int count = stream.readInt32(exception); - for (int a = 0; a < count; a++) { - TL_botCommand object = TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); - if (object == null) { - return; - } - commands.add(object); - } - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt64(user_id); - stream.writeString(description); - stream.writeInt32(0x1cb5c415); - int count = commands.size(); - stream.writeInt32(count); - for (int a = 0; a < count; a++) { - commands.get(a).serializeToStream(stream); - } - } - } - - public static class TL_botInfo extends BotInfo { - public static final int constructor = 0x8f300b57; - - - public void readParams(AbstractSerializedData stream, boolean exception) { - flags = stream.readInt32(exception); - if ((flags & 1) != 0) { - user_id = stream.readInt64(exception); - } - if ((flags & 2) != 0) { - description = stream.readString(exception); - } - if ((flags & 16) != 0) { - description_photo = Photo.TLdeserialize(stream, stream.readInt32(exception), exception); - } - if ((flags & 32) != 0) { - description_document = Document.TLdeserialize(stream, stream.readInt32(exception), exception); - } - if ((flags & 4) != 0) { - int magic = stream.readInt32(exception); - if (magic != 0x1cb5c415) { - if (exception) { - throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); - } - return; - } - int count = stream.readInt32(exception); - for (int a = 0; a < count; a++) { - TL_botCommand object = TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); - if (object == null) { - return; - } - commands.add(object); - } - } - if ((flags & 8) != 0) { - menu_button = BotMenuButton.TLdeserialize(stream, stream.readInt32(exception), exception); - } - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32(flags); - if ((flags & 1) != 0) { - stream.writeInt64(user_id); - } - if ((flags & 2) != 0) { - stream.writeString(description); - } - if ((flags & 16) != 0) { - description_photo.serializeToStream(stream); - } - if ((flags & 32) != 0) { - description_document.serializeToStream(stream); - } - if ((flags & 4) != 0) { - stream.writeInt32(0x1cb5c415); - int count = commands.size(); - stream.writeInt32(count); - for (int a = 0; a < count; a++) { - commands.get(a).serializeToStream(stream); - } - } - if ((flags & 8) != 0) { - menu_button.serializeToStream(stream); - } - } - } - - public static class TL_botInfo_layer140 extends TL_botInfo { - public static final int constructor = 0xe4169b5d; - - - public void readParams(AbstractSerializedData stream, boolean exception) { - user_id = stream.readInt64(exception); - description = stream.readString(exception); - int magic = stream.readInt32(exception); - if (magic != 0x1cb5c415) { - if (exception) { - throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); - } - return; - } - int count = stream.readInt32(exception); - for (int a = 0; a < count; a++) { - TL_botCommand object = TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); - if (object == null) { - return; - } - commands.add(object); - } - menu_button = BotMenuButton.TLdeserialize(stream, stream.readInt32(exception), exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt64(user_id); - stream.writeString(description); - stream.writeInt32(0x1cb5c415); - int count = commands.size(); - stream.writeInt32(count); - for (int a = 0; a < count; a++) { - commands.get(a).serializeToStream(stream); - } - menu_button.serializeToStream(stream); - } - } - public static abstract class InputGame extends TLObject { public InputUser bot_id; public String short_name; @@ -12995,7 +12758,7 @@ public static abstract class ChatFull extends TLObject { public Photo chat_photo; public PeerNotifySettings notify_settings; public TL_chatInviteExported exported_invite; - public ArrayList<BotInfo> bot_info = new ArrayList<>(); + public ArrayList<TL_bots.BotInfo> bot_info = new ArrayList<>(); public int flags; public boolean can_view_participants; public boolean can_set_username; @@ -13055,6 +12818,7 @@ public static abstract class ChatFull extends TLObject { public boolean can_view_revenue; public boolean can_view_stars_revenue; public boolean paid_media_allowed; + public boolean paid_reactions_available; public long inviterId; //custom public int invitesCount; //custom @@ -13265,7 +13029,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -13405,7 +13169,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -13512,7 +13276,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -13694,7 +13458,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -13795,7 +13559,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -13950,7 +13714,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -14043,7 +13807,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -14162,7 +13926,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -14356,7 +14120,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -14454,7 +14218,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -14599,7 +14363,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -14845,7 +14609,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -15086,7 +14850,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -15279,7 +15043,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -15416,7 +15180,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -15547,7 +15311,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -15690,6 +15454,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { can_view_revenue = (flags2 & 4096) != 0; can_view_stars_revenue = (flags2 & 32768) != 0; paid_media_allowed = (flags2 & 16384) != 0; + paid_reactions_available = (flags2 & 65536) != 0; id = stream.readInt64(exception); about = stream.readString(exception); if ((flags & 1) != 0) { @@ -15724,7 +15489,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -15852,6 +15617,7 @@ public void serializeToStream(AbstractSerializedData stream) { flags2 = can_view_revenue ? (flags2 | 4096) : (flags2 &~ 4096); flags2 = paid_media_allowed ? (flags2 | 16384) : (flags2 &~ 16384); flags2 = can_view_stars_revenue ? (flags2 | 32768) : (flags2 &~ 32768); + flags2 = paid_reactions_available ? (flags2 | 65536) : (flags2 &~ 65536); stream.writeInt32(flags2); stream.writeInt64(id); stream.writeString(about); @@ -16034,7 +15800,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -16334,7 +16100,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -16630,7 +16396,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -16908,7 +16674,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -17178,7 +16944,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -17437,7 +17203,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -17706,7 +17472,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -17974,7 +17740,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -18183,7 +17949,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -18361,7 +18127,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -18527,7 +18293,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -18672,7 +18438,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -18810,7 +18576,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -18942,7 +18708,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19042,7 +18808,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19108,7 +18874,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19230,7 +18996,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19345,7 +19111,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19441,7 +19207,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19521,7 +19287,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19594,7 +19360,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19658,7 +19424,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19734,7 +19500,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19831,7 +19597,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -19925,7 +19691,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -20018,7 +19784,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - BotInfo object = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + TL_bots.BotInfo object = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -25321,6 +25087,7 @@ public static abstract class User extends TLObject { public boolean bot_nochats; public boolean bot_can_edit; public boolean bot_business; + public boolean bot_has_main_app; public boolean verified; public boolean restricted; public boolean min; @@ -25339,7 +25106,7 @@ public static abstract class User extends TLObject { public String lang_code; public boolean inactive; public boolean explicit_content; - public ArrayList<TL_restrictionReason> restriction_reason = new ArrayList<>(); + public ArrayList<RestrictionReason> restriction_reason = new ArrayList<>(); public boolean bot_attach_menu; public boolean bot_menu_webview; public boolean attach_menu_enabled; @@ -25348,6 +25115,7 @@ public static abstract class User extends TLObject { public int stories_max_id; public TL_peerColor color; public TL_peerColor profile_color; + public int bot_active_users; public static User TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { User result = null; @@ -25355,6 +25123,12 @@ public static User TLdeserialize(AbstractSerializedData stream, int constructor, case TL_user.constructor: result = new TL_user(); break; + case TL_user_layer185.constructor: + result = new TL_user_layer185(); + break; + case TL_user_layer184.constructor: + result = new TL_user_layer184(); + break; case TL_user_layer166.constructor: result = new TL_user_layer166(); break; @@ -25501,6 +25275,444 @@ public void serializeToStream(AbstractSerializedData stream) { } public static class TL_user extends User { + public static final int constructor = 0x83314fca; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + self = (flags & 1024) != 0; + contact = (flags & 2048) != 0; + mutual_contact = (flags & 4096) != 0; + deleted = (flags & 8192) != 0; + bot = (flags & 16384) != 0; + bot_chat_history = (flags & 32768) != 0; + bot_nochats = (flags & 65536) != 0; + verified = (flags & 131072) != 0; + restricted = (flags & 262144) != 0; + min = (flags & 1048576) != 0; + bot_inline_geo = (flags & 2097152) != 0; + support = (flags & 8388608) != 0; + scam = (flags & 16777216) != 0; + apply_min_photo = (flags & 33554432) != 0; + fake = (flags & 67108864) != 0; + bot_attach_menu = (flags & 134217728) != 0; + premium = (flags & 268435456) != 0; + attach_menu_enabled = (flags & 536870912) != 0; + flags2 = stream.readInt32(exception); + bot_can_edit = (flags2 & 2) != 0; + close_friend = (flags2 & 4) != 0; + stories_hidden = (flags2 & 8) != 0; + stories_unavailable = (flags2 & 16) != 0; + contact_require_premium = (flags2 & 1024) != 0; + bot_business = (flags2 & 2048) != 0; + bot_has_main_app = (flags2 & 8192) != 0; + id = stream.readInt64(exception); + if ((flags & 1) != 0) { + access_hash = stream.readInt64(exception); + } + if ((flags & 2) != 0) { + first_name = stream.readString(exception); + } + if ((flags & 4) != 0) { + last_name = stream.readString(exception); + } + if ((flags & 8) != 0) { + username = stream.readString(exception); + } + if ((flags & 16) != 0) { + phone = stream.readString(exception); + } + if ((flags & 32) != 0) { + photo = UserProfilePhoto.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 64) != 0) { + status = UserStatus.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 16384) != 0) { + bot_info_version = stream.readInt32(exception); + } + if ((flags & 262144) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + restriction_reason.add(object); + } + } + if ((flags & 524288) != 0) { + bot_inline_placeholder = stream.readString(exception); + } + if ((flags & 4194304) != 0) { + lang_code = stream.readString(exception); + } + if ((flags & 1073741824) != 0) { + emoji_status = EmojiStatus.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags2 & 1) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TL_username object = TL_username.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + usernames.add(object); + } + } + try { + if ((flags2 & 32) != 0) { + stories_max_id = stream.readInt32(exception); + } + } catch (Throwable e) { + FileLog.e(e); + } + if ((flags2 & 256) != 0) { + color = TL_peerColor.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags2 & 512) != 0) { + profile_color = TL_peerColor.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags2 & 4096) != 0) { + bot_active_users = stream.readInt32(exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + if (username == null) { + flags = flags & ~8; + } + stream.writeInt32(constructor); + flags = self ? (flags | 1024) : (flags &~ 1024); + flags = contact ? (flags | 2048) : (flags &~ 2048); + flags = mutual_contact ? (flags | 4096) : (flags &~ 4096); + flags = deleted ? (flags | 8192) : (flags &~ 8192); + flags = bot ? (flags | 16384) : (flags &~ 16384); + flags = bot_chat_history ? (flags | 32768) : (flags &~ 32768); + flags = bot_nochats ? (flags | 65536) : (flags &~ 65536); + flags = verified ? (flags | 131072) : (flags &~ 131072); + flags = restricted ? (flags | 262144) : (flags &~ 262144); + flags = min ? (flags | 1048576) : (flags &~ 1048576); + flags = bot_inline_geo ? (flags | 2097152) : (flags &~ 2097152); + flags = support ? (flags | 8388608) : (flags &~ 8388608); + flags = scam ? (flags | 16777216) : (flags &~ 16777216); + flags = apply_min_photo ? (flags | 33554432) : (flags &~ 33554432); + flags = fake ? (flags | 67108864) : (flags &~ 67108864); + flags = bot_attach_menu ? (flags | 134217728) : (flags &~ 134217728); + flags = premium ? (flags | 268435456) : (flags &~ 268435456); + flags = attach_menu_enabled ? (flags | 536870912) : (flags &~ 536870912); + stream.writeInt32(flags); + flags2 = bot_can_edit ? (flags2 | 2) : (flags2 &~ 2); + flags2 = close_friend ? (flags2 | 4) : (flags2 &~ 4); + flags2 = stories_hidden ? (flags2 | 8) : (flags2 &~ 8); + flags2 = stories_unavailable ? (flags2 | 16) : (flags2 &~ 16); + flags2 = contact_require_premium ? (flags2 | 1024) : (flags2 &~ 1024); + flags2 = bot_business ? (flags2 | 2048) : (flags2 &~ 2048); + flags2 = bot_has_main_app ? (flags2 | 8192) : (flags2 &~ 8192); + stream.writeInt32(flags2); + stream.writeInt64(id); + if ((flags & 1) != 0) { + stream.writeInt64(access_hash); + } + if ((flags & 2) != 0) { + stream.writeString(first_name); + } + if ((flags & 4) != 0) { + stream.writeString(last_name); + } + if ((flags & 8) != 0) { + stream.writeString(username); + } + if ((flags & 16) != 0) { + stream.writeString(phone); + } + if ((flags & 32) != 0) { + photo.serializeToStream(stream); + } + if ((flags & 64) != 0) { + status.serializeToStream(stream); + } + if ((flags & 16384) != 0) { + stream.writeInt32(bot_info_version); + } + if ((flags & 262144) != 0) { + stream.writeInt32(0x1cb5c415); + int count = restriction_reason.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + restriction_reason.get(a).serializeToStream(stream); + } + } + if ((flags & 524288) != 0) { + stream.writeString(bot_inline_placeholder); + } + if ((flags & 4194304) != 0) { + stream.writeString(lang_code); + } + if ((flags & 1073741824) != 0) { + emoji_status.serializeToStream(stream); + } + if ((flags2 & 1) != 0) { + stream.writeInt32(0x1cb5c415); + int count = usernames.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + usernames.get(a).serializeToStream(stream); + } + } + if ((flags2 & 32) != 0) { + stream.writeInt32(stories_max_id); + } + if ((flags2 & 256) != 0) { + if (color == null) { + color = new TL_peerColor(); + } + color.serializeToStream(stream); + } + if ((flags2 & 512) != 0) { + if (profile_color == null) { + profile_color = new TL_peerColor(); + } + profile_color.serializeToStream(stream); + } + if ((flags2 & 4096) != 0) { + stream.writeInt32(bot_active_users); + } + } + } + + public static class TL_user_layer185 extends TL_user { + public static final int constructor = 0x4fe9cce0; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + self = (flags & 1024) != 0; + contact = (flags & 2048) != 0; + mutual_contact = (flags & 4096) != 0; + deleted = (flags & 8192) != 0; + bot = (flags & 16384) != 0; + bot_chat_history = (flags & 32768) != 0; + bot_nochats = (flags & 65536) != 0; + verified = (flags & 131072) != 0; + restricted = (flags & 262144) != 0; + min = (flags & 1048576) != 0; + bot_inline_geo = (flags & 2097152) != 0; + support = (flags & 8388608) != 0; + scam = (flags & 16777216) != 0; + apply_min_photo = (flags & 33554432) != 0; + fake = (flags & 67108864) != 0; + bot_attach_menu = (flags & 134217728) != 0; + premium = (flags & 268435456) != 0; + attach_menu_enabled = (flags & 536870912) != 0; + flags2 = stream.readInt32(exception); + bot_can_edit = (flags2 & 2) != 0; + close_friend = (flags2 & 4) != 0; + stories_hidden = (flags2 & 8) != 0; + stories_unavailable = (flags2 & 16) != 0; + contact_require_premium = (flags2 & 1024) != 0; + bot_business = (flags2 & 2048) != 0; + id = stream.readInt64(exception); + if ((flags & 1) != 0) { + access_hash = stream.readInt64(exception); + } + if ((flags & 2) != 0) { + first_name = stream.readString(exception); + } + if ((flags & 4) != 0) { + last_name = stream.readString(exception); + } + if ((flags & 8) != 0) { + username = stream.readString(exception); + } + if ((flags & 16) != 0) { + phone = stream.readString(exception); + } + if ((flags & 32) != 0) { + photo = UserProfilePhoto.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 64) != 0) { + status = UserStatus.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 16384) != 0) { + bot_info_version = stream.readInt32(exception); + } + if ((flags & 262144) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + restriction_reason.add(object); + } + } + if ((flags & 524288) != 0) { + bot_inline_placeholder = stream.readString(exception); + } + if ((flags & 4194304) != 0) { + lang_code = stream.readString(exception); + } + if ((flags & 1073741824) != 0) { + emoji_status = EmojiStatus.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags2 & 1) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TL_username object = TL_username.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + usernames.add(object); + } + } + try { + if ((flags2 & 32) != 0) { + stories_max_id = stream.readInt32(exception); + } + } catch (Throwable e) { + FileLog.e(e); + } + if ((flags2 & 256) != 0) { + color = TL_peerColor.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags2 & 512) != 0) { + profile_color = TL_peerColor.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags2 & 4096) != 0) { + bot_active_users = stream.readInt32(exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + if (username == null) { + flags = flags & ~8; + } + stream.writeInt32(constructor); + flags = self ? (flags | 1024) : (flags &~ 1024); + flags = contact ? (flags | 2048) : (flags &~ 2048); + flags = mutual_contact ? (flags | 4096) : (flags &~ 4096); + flags = deleted ? (flags | 8192) : (flags &~ 8192); + flags = bot ? (flags | 16384) : (flags &~ 16384); + flags = bot_chat_history ? (flags | 32768) : (flags &~ 32768); + flags = bot_nochats ? (flags | 65536) : (flags &~ 65536); + flags = verified ? (flags | 131072) : (flags &~ 131072); + flags = restricted ? (flags | 262144) : (flags &~ 262144); + flags = min ? (flags | 1048576) : (flags &~ 1048576); + flags = bot_inline_geo ? (flags | 2097152) : (flags &~ 2097152); + flags = support ? (flags | 8388608) : (flags &~ 8388608); + flags = scam ? (flags | 16777216) : (flags &~ 16777216); + flags = apply_min_photo ? (flags | 33554432) : (flags &~ 33554432); + flags = fake ? (flags | 67108864) : (flags &~ 67108864); + flags = bot_attach_menu ? (flags | 134217728) : (flags &~ 134217728); + flags = premium ? (flags | 268435456) : (flags &~ 268435456); + flags = attach_menu_enabled ? (flags | 536870912) : (flags &~ 536870912); + stream.writeInt32(flags); + flags2 = bot_can_edit ? (flags2 | 2) : (flags2 &~ 2); + flags2 = close_friend ? (flags2 | 4) : (flags2 &~ 4); + flags2 = stories_hidden ? (flags2 | 8) : (flags2 &~ 8); + flags2 = stories_unavailable ? (flags2 | 16) : (flags2 &~ 16); + flags2 = contact_require_premium ? (flags2 | 1024) : (flags2 &~ 1024); + flags2 = bot_business ? (flags2 | 2048) : (flags2 &~ 2048); + stream.writeInt32(flags2); + stream.writeInt64(id); + if ((flags & 1) != 0) { + stream.writeInt64(access_hash); + } + if ((flags & 2) != 0) { + stream.writeString(first_name); + } + if ((flags & 4) != 0) { + stream.writeString(last_name); + } + if ((flags & 8) != 0) { + stream.writeString(username); + } + if ((flags & 16) != 0) { + stream.writeString(phone); + } + if ((flags & 32) != 0) { + photo.serializeToStream(stream); + } + if ((flags & 64) != 0) { + status.serializeToStream(stream); + } + if ((flags & 16384) != 0) { + stream.writeInt32(bot_info_version); + } + if ((flags & 262144) != 0) { + stream.writeInt32(0x1cb5c415); + int count = restriction_reason.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + restriction_reason.get(a).serializeToStream(stream); + } + } + if ((flags & 524288) != 0) { + stream.writeString(bot_inline_placeholder); + } + if ((flags & 4194304) != 0) { + stream.writeString(lang_code); + } + if ((flags & 1073741824) != 0) { + emoji_status.serializeToStream(stream); + } + if ((flags2 & 1) != 0) { + stream.writeInt32(0x1cb5c415); + int count = usernames.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + usernames.get(a).serializeToStream(stream); + } + } + if ((flags2 & 32) != 0) { + stream.writeInt32(stories_max_id); + } + if ((flags2 & 256) != 0) { + if (color == null) { + color = new TL_peerColor(); + } + color.serializeToStream(stream); + } + if ((flags2 & 512) != 0) { + if (profile_color == null) { + profile_color = new TL_peerColor(); + } + profile_color.serializeToStream(stream); + } + if ((flags2 & 4096) != 0) { + stream.writeInt32(bot_active_users); + } + } + } + + public static class TL_user_layer184 extends TL_user { public static final int constructor = 0x215c4438; public void readParams(AbstractSerializedData stream, boolean exception) { @@ -25565,7 +25777,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -25775,7 +25987,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -25981,7 +26193,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -26170,7 +26382,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -26344,7 +26556,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -26485,7 +26697,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -26618,7 +26830,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -27716,6 +27928,8 @@ public static abstract class MessageAction extends TLObject { public String cryptoCurrency; public long cryptoAmount; public WallPaper wallpaper; + public Peer peer; + public byte[] payload; public static MessageAction TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { MessageAction result = null; @@ -27915,6 +28129,12 @@ public static MessageAction TLdeserialize(AbstractSerializedData stream, int con case TL_messageActionRequestedPeer.constructor: result = new TL_messageActionRequestedPeer(); break; + case TL_messageActionPaymentRefunded.constructor: + result = new TL_messageActionPaymentRefunded(); + break; + case TL_messageActionGiftStars.constructor: + result = new TL_messageActionGiftStars(); + break; } if (result == null && exception) { throw new RuntimeException(String.format("can't parse magic %x in MessageAction", constructor)); @@ -27942,6 +28162,72 @@ public void serializeToStream(AbstractSerializedData stream) { } } + public static class TL_messageActionPaymentRefunded extends MessageAction { + public static final int constructor = 0x41b3e202; + + public TL_paymentCharge charge; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + peer = Peer.TLdeserialize(stream, stream.readInt32(exception), exception); + currency = stream.readString(exception); + total_amount = stream.readInt64(exception); + if ((flags & 1) != 0) { + payload = stream.readByteArray(exception); + } + charge = TL_paymentCharge.TLdeserialize(stream, stream.readInt32(exception), exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + peer.serializeToStream(stream); + stream.writeString(currency); + stream.writeInt64(total_amount); + if ((flags & 1) != 0) { + stream.writeByteArray(payload); + } + charge.serializeToStream(stream); + } + } + + public static class TL_messageActionGiftStars extends MessageAction { + public static final int constructor = 0x45d5b021; + + public long stars; + public TL_paymentCharge charge; + public String transaction_id; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + currency = stream.readString(exception); + amount = stream.readInt64(exception); + stars = stream.readInt64(exception); + if ((flags & 1) != 0) { + cryptoCurrency = stream.readString(exception); + cryptoAmount = stream.readInt64(exception); + } + if ((flags & 2) != 0) { + transaction_id = stream.readString(exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + stream.writeString(currency); + stream.writeInt64(amount); + stream.writeInt64(stars); + if ((flags & 1) != 0) { + stream.writeString(cryptoCurrency); + stream.writeInt64(cryptoAmount); + } + if ((flags & 2) != 0) { + stream.writeString(transaction_id); + } + } + } + public static class TL_messageEncryptedAction extends MessageAction { public static final int constructor = 0x555555F7; @@ -28984,6 +29270,7 @@ public static class TL_messageActionPaymentSentMe extends MessageAction { public byte[] payload; public TL_paymentRequestedInfo info; public String shipping_option_id; + public TL_paymentCharge charge; public void readParams(AbstractSerializedData stream, boolean exception) { flags = stream.readInt32(exception); @@ -28998,6 +29285,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { if ((flags & 2) != 0) { shipping_option_id = stream.readString(exception); } + charge = TL_paymentCharge.TLdeserialize(stream, stream.readInt32(exception), exception); } public void serializeToStream(AbstractSerializedData stream) { @@ -29014,6 +29302,7 @@ public void serializeToStream(AbstractSerializedData stream) { if ((flags & 2) != 0) { stream.writeString(shipping_option_id); } + charge.serializeToStream(stream); } } @@ -29952,6 +30241,83 @@ public void serializeToStream(AbstractSerializedData stream) { } } + public static class MessageReactor extends TLObject { + + public int flags; + public boolean top; + public boolean my; + public boolean anonymous; + public Peer peer_id; + public int count; + + public static MessageReactor TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + MessageReactor result = null; + switch (constructor) { + case TL_messageReactor.constructor: + result = new TL_messageReactor(); + break; + case TL_messageReactor_old.constructor: + result = new TL_messageReactor_old(); + break; + } + if (result == null && exception) { + throw new RuntimeException(String.format("can't parse magic %x in MessageReactor", constructor)); + } + if (result != null) { + result.readParams(stream, exception); + } + return result; + } + } + + public static class TL_messageReactor extends MessageReactor { + public static final int constructor = 0x4ba3a95a; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + top = (flags & 1) != 0; + my = (flags & 2) != 0; + anonymous = (flags & 4) != 0; + if ((flags & 8) != 0) { + peer_id = Peer.TLdeserialize(stream, stream.readInt32(exception), exception); + } + count = stream.readInt32(exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = top ? (flags | 1) : (flags &~ 1); + flags = my ? (flags | 2) : (flags &~ 2); + flags = anonymous ? (flags | 4) : (flags &~ 4); + stream.writeInt32(flags); + if ((flags & 8) != 0) { + peer_id.serializeToStream(stream); + } + stream.writeInt32(count); + } + } + + public static class TL_messageReactor_old extends TL_messageReactor { + public static final int constructor = 0xef00d448; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + top = (flags & 1) != 0; + my = (flags & 2) != 0; + peer_id = Peer.TLdeserialize(stream, stream.readInt32(exception), exception); + count = stream.readInt32(exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = top ? (flags | 1) : (flags &~ 1); + flags = my ? (flags | 2) : (flags &~ 2); + stream.writeInt32(flags); + peer_id.serializeToStream(stream); + stream.writeInt32(count); + } + } + public static abstract class MessageReactions extends TLObject { public int flags; @@ -29960,6 +30326,7 @@ public static abstract class MessageReactions extends TLObject { public boolean reactions_as_tags; public ArrayList<ReactionCount> results = new ArrayList<>(); public ArrayList<MessagePeerReaction> recent_reactions = new ArrayList<>(); + public ArrayList<MessageReactor> top_reactors = new ArrayList<>(); public static TL_messageReactions TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { TL_messageReactions result = null; @@ -29967,9 +30334,12 @@ public static TL_messageReactions TLdeserialize(AbstractSerializedData stream, i case 0x87b6e36: result = new TL_messageReactionsOld(); break; - case 0x4f2b9479: + case TL_messageReactions.constructor: result = new TL_messageReactions(); break; + case TL_messageReactions_layer185.constructor: + result = new TL_messageReactions_layer185(); + break; case 0xb87a24d1: result = new TL_messageReactions_layer137(); break; @@ -29985,6 +30355,96 @@ public static TL_messageReactions TLdeserialize(AbstractSerializedData stream, i } public static class TL_messageReactions extends MessageReactions { + public static final int constructor = 0xa339f0b; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + min = (flags & 1) != 0; + can_see_list = (flags & 4) != 0; + reactions_as_tags = (flags & 8) != 0; + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + ReactionCount object = ReactionCount.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + results.add(object); + } + if ((flags & 2) != 0) { + magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + MessagePeerReaction object = MessagePeerReaction.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + recent_reactions.add(object); + } + } + if ((flags & 16) != 0) { + magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + MessageReactor object = MessageReactor.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + top_reactors.add(object); + } + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = min ? (flags | 1) : (flags &~ 1); + flags = can_see_list ? (flags | 4) : (flags &~ 4); + flags = reactions_as_tags ? (flags | 8) : (flags &~ 8); + stream.writeInt32(flags); + stream.writeInt32(0x1cb5c415); + int count = results.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + results.get(a).serializeToStream(stream); + } + if ((flags & 2) != 0) { + stream.writeInt32(0x1cb5c415); + count = recent_reactions.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + recent_reactions.get(a).serializeToStream(stream); + } + } + if ((flags & 16) != 0) { + stream.writeInt32(0x1cb5c415); + count = top_reactors.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + top_reactors.get(a).serializeToStream(stream); + } + } + } + } + + public static class TL_messageReactions_layer185 extends TL_messageReactions { public static final int constructor = 0x4f2b9479; public void readParams(AbstractSerializedData stream, boolean exception) { @@ -30739,6 +31199,9 @@ public static TopPeerCategory TLdeserialize(AbstractSerializedData stream, int c case 0x637b7ed: result = new TL_topPeerCategoryCorrespondents(); break; + case TL_topPeerCategoryBotsApp.constructor: + result = new TL_topPeerCategoryBotsApp(); + break; } if (result == null && exception) { throw new RuntimeException(String.format("can't parse magic %x in TopPeerCategory", constructor)); @@ -30822,6 +31285,15 @@ public void serializeToStream(AbstractSerializedData stream) { } } + public static class TL_topPeerCategoryBotsApp extends TopPeerCategory { + public static final int constructor = 0xfd9e7bec; + + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + } + } + public static abstract class MessageReplyHeader extends TLObject { public int flags; @@ -32385,6 +32857,8 @@ public static abstract class PageBlock extends TLObject { public int groupId; //custom public PhotoSize thumb; //custom public TLObject thumbObject; //custom + public int cachedWidth; //custom + public int cachedHeight; //custom public static PageBlock TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { PageBlock result = null; @@ -35764,8 +36238,8 @@ public static Update TLdeserialize(AbstractSerializedData stream, int constructo case TL_updateChatDefaultBannedRights.constructor: result = new TL_updateChatDefaultBannedRights(); break; - case TL_updateBotMenuButton.constructor: - result = new TL_updateBotMenuButton(); + case TL_bots.TL_updateBotMenuButton.constructor: + result = new TL_bots.TL_updateBotMenuButton(); break; case TL_updateChannelPinnedTopics.constructor: result = new TL_updateChannelPinnedTopics(); @@ -42734,7 +43208,7 @@ public static ChannelMessagesFilter TLdeserialize(AbstractSerializedData stream, } public static class TL_sponsoredMessage extends TLObject { - public static final int constructor = 0xbdedf566; + public static final int constructor = 0x4d93a990; public int flags; public boolean recommended; @@ -42749,6 +43223,7 @@ public static class TL_sponsoredMessage extends TLObject { public String sponsor_info; public String additional_info; public TL_peerColor color; + public MessageMedia media; public static TL_sponsoredMessage TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { if (TL_sponsoredMessage.constructor != constructor) { @@ -42791,6 +43266,9 @@ public void readParams(AbstractSerializedData stream, boolean exception) { if ((flags & 64) != 0) { photo = Photo.TLdeserialize(stream, stream.readInt32(exception), exception); } + if ((flags & 16384) != 0) { + media = MessageMedia.TLdeserialize(stream, stream.readInt32(exception), exception); + } if ((flags & 8192) != 0) { color = TL_peerColor.TLdeserialize(stream, stream.readInt32(exception), exception); } @@ -42823,6 +43301,9 @@ public void serializeToStream(AbstractSerializedData stream) { if ((flags & 64) != 0) { photo.serializeToStream(stream); } + if ((flags & 16384) != 0) { + media.serializeToStream(stream); + } if ((flags & 8192) != 0) { color.serializeToStream(stream); } @@ -43831,6 +44312,7 @@ public static abstract class ChannelParticipant extends TLObject { public String rank; public boolean via_invite; public long user_id; + public int subscription_until_date; public static ChannelParticipant TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { ChannelParticipant result = null; @@ -43859,9 +44341,12 @@ public static ChannelParticipant TLdeserialize(AbstractSerializedData stream, in case 0x34c3bb53: result = new TL_channelParticipantAdmin(); break; - case 0xc00c07c0: + case TL_channelParticipant.constructor: result = new TL_channelParticipant(); break; + case TL_channelParticipant_layer185.constructor: + result = new TL_channelParticipant_layer185(); + break; case 0x2fe601d3: result = new TL_channelParticipantCreator(); break; @@ -43871,9 +44356,12 @@ public static ChannelParticipant TLdeserialize(AbstractSerializedData stream, in case 0xa82fa898: result = new TL_channelParticipantAdmin_layer92(); break; - case 0x35a8bfa7: + case TL_channelParticipantSelf.constructor: result = new TL_channelParticipantSelf(); break; + case TL_channelParticipantSelf_layer185.constructor: + result = new TL_channelParticipantSelf_layer185(); + break; case 0x28a8bc67: result = new TL_channelParticipantSelf_layer133(); break; @@ -43913,6 +44401,31 @@ public static ChannelParticipant TLdeserialize(AbstractSerializedData stream, in } public static class TL_channelParticipant extends ChannelParticipant { + public static final int constructor = 0xcb397619; + + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + peer = new TLRPC.TL_peerUser(); + peer.user_id = stream.readInt64(exception); + date = stream.readInt32(exception); + if ((flags & 1) != 0) { + subscription_until_date = stream.readInt32(exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + stream.writeInt64(peer.user_id); + stream.writeInt32(date); + if ((flags & 1) != 0) { + stream.writeInt32(subscription_until_date); + } + } + } + + public static class TL_channelParticipant_layer185 extends TL_channelParticipant { public static final int constructor = 0xc00c07c0; @@ -43930,6 +44443,33 @@ public void serializeToStream(AbstractSerializedData stream) { } public static class TL_channelParticipantSelf extends ChannelParticipant { + public static final int constructor = 0x4f607bef; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + via_invite = (flags & 1) != 0; + user_id = stream.readInt64(exception); + inviter_id = stream.readInt64(exception); + date = stream.readInt32(exception); + if ((flags & 2) != 0) { + subscription_until_date = stream.readInt32(exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = via_invite ? (flags | 1) : (flags &~ 1); + stream.writeInt32(flags); + stream.writeInt64(user_id); + stream.writeInt64(inviter_id); + stream.writeInt32(date); + if ((flags & 2) != 0) { + stream.writeInt32(subscription_until_date); + } + } + } + + public static class TL_channelParticipantSelf_layer185 extends TL_channelParticipantSelf { public static final int constructor = 0x35a8bfa7; public void readParams(AbstractSerializedData stream, boolean exception) { @@ -46531,6 +47071,9 @@ public static ChannelAdminLogEventAction TLdeserialize(AbstractSerializedData st case TL_channelAdminLogEventActionChangeEmojiStatus.constructor: result = new TL_channelAdminLogEventActionChangeEmojiStatus(); break; + case TL_channelAdminLogEventActionToggleSignatureProfiles.constructor: + result = new TL_channelAdminLogEventActionToggleSignatureProfiles(); + break; } if (result == null && exception) { throw new RuntimeException(String.format("can't parse magic %x in ChannelAdminLogEventAction", constructor)); @@ -47178,6 +47721,21 @@ public void serializeToStream(AbstractSerializedData stream) { } } + public static class TL_channelAdminLogEventActionToggleSignatureProfiles extends ChannelAdminLogEventAction { + public static final int constructor = 0x60a79c79; + + public boolean value; + + public void readParams(AbstractSerializedData stream, boolean exception) { + value = stream.readBool(exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeBool(value); + } + } + public static class TL_channelAdminLogEventActionPinTopic extends ChannelAdminLogEventAction { public static final int constructor = 0x5d8d353b; @@ -47815,7 +48373,7 @@ public static abstract class Chat extends TLObject { public boolean gigagroup; public boolean noforwards; public boolean forum; - public ArrayList<TL_restrictionReason> restriction_reason = new ArrayList<>(); + public ArrayList<RestrictionReason> restriction_reason = new ArrayList<>(); public TL_channelAdminRights_layer92 admin_rights_layer92; public TL_channelBannedRights_layer92 banned_rights_layer92; public TL_chatAdminRights admin_rights; @@ -47827,11 +48385,13 @@ public static abstract class Chat extends TLObject { public boolean stories_hidden; public boolean stories_hidden_min; public boolean stories_unavailable; + public boolean signature_profiles; public int stories_max_id; public TL_peerColor color; public TL_peerColor profile_color; public EmojiStatus emoji_status; public int level; + public int subscription_until_date; public ArrayList<TL_username> usernames = new ArrayList<>(); @@ -47857,6 +48417,9 @@ public static Chat TLdeserialize(AbstractSerializedData stream, int constructor, case TL_channel.constructor: result = new TL_channel(); break; + case TL_channel_layer185.constructor: + result = new TL_channel_layer185(); + break; case TL_channel_layer167_3.constructor: result = new TL_channel_layer167_3(); break; @@ -48358,7 +48921,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -48479,189 +49042,382 @@ public void serializeToStream(AbstractSerializedData stream) { if ((flags2 & 256) != 0) { profile_color.serializeToStream(stream); } - } - } - - public static class TL_channel_layer167_3 extends TL_channel { - public static final int constructor = 0xdb12acb; - - public void readParams(AbstractSerializedData stream, boolean exception) { - flags = stream.readInt32(exception); - creator = (flags & 1) != 0; - left = (flags & 4) != 0; - broadcast = (flags & 32) != 0; - verified = (flags & 128) != 0; - megagroup = (flags & 256) != 0; - restricted = (flags & 512) != 0; - signatures = (flags & 2048) != 0; - min = (flags & 4096) != 0; - scam = (flags & 524288) != 0; - has_link = (flags & 1048576) != 0; - has_geo = (flags & 2097152) != 0; - slowmode_enabled = (flags & 4194304) != 0; - call_active = (flags & 8388608) != 0; - call_not_empty = (flags & 16777216) != 0; - fake = (flags & 33554432) != 0; - gigagroup = (flags & 67108864) != 0; - noforwards = (flags & 134217728) != 0; - join_to_send = (flags & 268435456) != 0; - join_request = (flags & 536870912) != 0; - forum = (flags & 1073741824) != 0; - flags2 = stream.readInt32(exception); - stories_hidden = (flags2 & 2) != 0; - stories_hidden_min = (flags2 & 4) != 0; - stories_unavailable = (flags2 & 8) != 0; - id = stream.readInt64(exception); - if ((flags & 8192) != 0) { - access_hash = stream.readInt64(exception); - } - title = stream.readString(exception); - if ((flags & 64) != 0) { - username = stream.readString(exception); - } - photo = ChatPhoto.TLdeserialize(stream, stream.readInt32(exception), exception); - date = stream.readInt32(exception); - if ((flags & 512) != 0) { - int magic = stream.readInt32(exception); - if (magic != 0x1cb5c415) { - if (exception) { - throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); - } - return; - } - int count = stream.readInt32(exception); - for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); - if (object == null) { - return; - } - restriction_reason.add(object); - } - } - if ((flags & 16384) != 0) { - admin_rights = TL_chatAdminRights.TLdeserialize(stream, stream.readInt32(exception), exception); - } - if ((flags & 32768) != 0) { - banned_rights = TL_chatBannedRights.TLdeserialize(stream, stream.readInt32(exception), exception); - } - if ((flags & 262144) != 0) { - default_banned_rights = TL_chatBannedRights.TLdeserialize(stream, stream.readInt32(exception), exception); - } - if ((flags & 131072) != 0) { - participants_count = stream.readInt32(exception); - } - if ((flags2 & 1) != 0) { - int magic = stream.readInt32(exception); - if (magic != 0x1cb5c415) { - if (exception) { - throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); - } - return; - } - int count = stream.readInt32(exception); - for (int a = 0; a < count; a++) { - TL_username object = TL_username.TLdeserialize(stream, stream.readInt32(exception), exception); - if (object == null) { - return; - } - usernames.add(object); - } - } - if ((flags2 & 16) != 0) { - stories_max_id = stream.readInt32(exception); - } - if ((flags2 & 128) != 0) { - color = TL_peerColor.TLdeserialize(stream, stream.readInt32(exception), exception); - } - if ((flags2 & 256) != 0) { - profile_color = TL_peerColor.TLdeserialize(stream, stream.readInt32(exception), exception); - } + } + } + + public static class TL_channel_layer167_3 extends TL_channel { + public static final int constructor = 0xdb12acb; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + creator = (flags & 1) != 0; + left = (flags & 4) != 0; + broadcast = (flags & 32) != 0; + verified = (flags & 128) != 0; + megagroup = (flags & 256) != 0; + restricted = (flags & 512) != 0; + signatures = (flags & 2048) != 0; + min = (flags & 4096) != 0; + scam = (flags & 524288) != 0; + has_link = (flags & 1048576) != 0; + has_geo = (flags & 2097152) != 0; + slowmode_enabled = (flags & 4194304) != 0; + call_active = (flags & 8388608) != 0; + call_not_empty = (flags & 16777216) != 0; + fake = (flags & 33554432) != 0; + gigagroup = (flags & 67108864) != 0; + noforwards = (flags & 134217728) != 0; + join_to_send = (flags & 268435456) != 0; + join_request = (flags & 536870912) != 0; + forum = (flags & 1073741824) != 0; + flags2 = stream.readInt32(exception); + stories_hidden = (flags2 & 2) != 0; + stories_hidden_min = (flags2 & 4) != 0; + stories_unavailable = (flags2 & 8) != 0; + id = stream.readInt64(exception); + if ((flags & 8192) != 0) { + access_hash = stream.readInt64(exception); + } + title = stream.readString(exception); + if ((flags & 64) != 0) { + username = stream.readString(exception); + } + photo = ChatPhoto.TLdeserialize(stream, stream.readInt32(exception), exception); + date = stream.readInt32(exception); + if ((flags & 512) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + restriction_reason.add(object); + } + } + if ((flags & 16384) != 0) { + admin_rights = TL_chatAdminRights.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 32768) != 0) { + banned_rights = TL_chatBannedRights.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 262144) != 0) { + default_banned_rights = TL_chatBannedRights.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 131072) != 0) { + participants_count = stream.readInt32(exception); + } + if ((flags2 & 1) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TL_username object = TL_username.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + usernames.add(object); + } + } + if ((flags2 & 16) != 0) { + stories_max_id = stream.readInt32(exception); + } + if ((flags2 & 128) != 0) { + color = TL_peerColor.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags2 & 256) != 0) { + profile_color = TL_peerColor.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags2 & 512) != 0) { + emoji_status = EmojiStatus.TLdeserialize(stream, stream.readInt32(exception), exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = creator ? (flags | 1) : (flags &~ 1); + flags = left ? (flags | 4) : (flags &~ 4); + flags = broadcast ? (flags | 32) : (flags &~ 32); + flags = verified ? (flags | 128) : (flags &~ 128); + flags = megagroup ? (flags | 256) : (flags &~ 256); + flags = restricted ? (flags | 512) : (flags &~ 512); + flags = signatures ? (flags | 2048) : (flags &~ 2048); + flags = min ? (flags | 4096) : (flags &~ 4096); + flags = scam ? (flags | 524288) : (flags &~ 524288); + flags = has_link ? (flags | 1048576) : (flags &~ 1048576); + flags = has_geo ? (flags | 2097152) : (flags &~ 2097152); + flags = slowmode_enabled ? (flags | 4194304) : (flags &~ 4194304); + flags = call_active ? (flags | 8388608) : (flags &~ 8388608); + flags = call_not_empty ? (flags | 16777216) : (flags &~ 16777216); + flags = fake ? (flags | 33554432) : (flags &~ 33554432); + flags = gigagroup ? (flags | 67108864) : (flags &~ 67108864); + flags = noforwards ? (flags | 134217728) : (flags &~ 134217728); + flags = join_to_send ? (flags | 268435456) : (flags &~ 268435456); + flags = join_request ? (flags | 536870912) : (flags &~ 536870912); + flags = forum ? (flags | 1073741824) : (flags &~ 1073741824); + stream.writeInt32(flags); + flags2 = stories_hidden ? (flags2 | 2) : (flags2 &~ 2); + flags2 = stories_hidden_min ? (flags2 | 4) : (flags2 &~ 4); + flags2 = stories_unavailable ? (flags2 | 8) : (flags2 &~ 8); + stream.writeInt32(flags2); + stream.writeInt64(id); + if ((flags & 8192) != 0) { + stream.writeInt64(access_hash); + } + stream.writeString(title); + if ((flags & 64) != 0) { + stream.writeString(username); + } + photo.serializeToStream(stream); + stream.writeInt32(date); + if ((flags & 512) != 0) { + stream.writeInt32(0x1cb5c415); + int count = restriction_reason.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + restriction_reason.get(a).serializeToStream(stream); + } + } + if ((flags & 16384) != 0) { + admin_rights.serializeToStream(stream); + } + if ((flags & 32768) != 0) { + banned_rights.serializeToStream(stream); + } + if ((flags & 262144) != 0) { + default_banned_rights.serializeToStream(stream); + } + if ((flags & 131072) != 0) { + stream.writeInt32(participants_count); + } + if ((flags2 & 1) != 0) { + stream.writeInt32(0x1cb5c415); + int count = usernames.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + usernames.get(a).serializeToStream(stream); + } + } + if ((flags2 & 16) != 0) { + stream.writeInt32(stories_max_id); + } + if ((flags2 & 128) != 0) { + color.serializeToStream(stream); + } + if ((flags2 & 256) != 0) { + profile_color.serializeToStream(stream); + } + if ((flags2 & 512) != 0) { + emoji_status.serializeToStream(stream); + } + } + } + + public static class TL_channel extends Chat { + public static final int constructor = 0xfe4478bd; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + creator = (flags & 1) != 0; + left = (flags & 4) != 0; + broadcast = (flags & 32) != 0; + verified = (flags & 128) != 0; + megagroup = (flags & 256) != 0; + restricted = (flags & 512) != 0; + signatures = (flags & 2048) != 0; + min = (flags & 4096) != 0; + scam = (flags & 524288) != 0; + has_link = (flags & 1048576) != 0; + has_geo = (flags & 2097152) != 0; + slowmode_enabled = (flags & 4194304) != 0; + call_active = (flags & 8388608) != 0; + call_not_empty = (flags & 16777216) != 0; + fake = (flags & 33554432) != 0; + gigagroup = (flags & 67108864) != 0; + noforwards = (flags & 134217728) != 0; + join_to_send = (flags & 268435456) != 0; + join_request = (flags & 536870912) != 0; + forum = (flags & 1073741824) != 0; + flags2 = stream.readInt32(exception); + stories_hidden = (flags2 & 2) != 0; + stories_hidden_min = (flags2 & 4) != 0; + stories_unavailable = (flags2 & 8) != 0; + signature_profiles = (flags2 & 4096) != 0; + id = stream.readInt64(exception); + if ((flags & 8192) != 0) { + access_hash = stream.readInt64(exception); + } + title = stream.readString(exception); + if ((flags & 64) != 0) { + username = stream.readString(exception); + } + photo = ChatPhoto.TLdeserialize(stream, stream.readInt32(exception), exception); + date = stream.readInt32(exception); + if ((flags & 512) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + restriction_reason.add(object); + } + } + if ((flags & 16384) != 0) { + admin_rights = TL_chatAdminRights.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 32768) != 0) { + banned_rights = TL_chatBannedRights.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 262144) != 0) { + default_banned_rights = TL_chatBannedRights.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 131072) != 0) { + participants_count = stream.readInt32(exception); + } + if ((flags2 & 1) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TL_username object = TL_username.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + usernames.add(object); + } + } + if ((flags2 & 16) != 0) { + stories_max_id = stream.readInt32(exception); + } + if ((flags2 & 128) != 0) { + color = TL_peerColor.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags2 & 256) != 0) { + profile_color = TL_peerColor.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags2 & 512) != 0) { + emoji_status = EmojiStatus.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags2 & 1024) != 0) { + level = stream.readInt32(exception); + } + if ((flags2 & 2048) != 0) { + subscription_until_date = stream.readInt32(exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = creator ? (flags | 1) : (flags &~ 1); + flags = left ? (flags | 4) : (flags &~ 4); + flags = broadcast ? (flags | 32) : (flags &~ 32); + flags = verified ? (flags | 128) : (flags &~ 128); + flags = megagroup ? (flags | 256) : (flags &~ 256); + flags = restricted ? (flags | 512) : (flags &~ 512); + flags = signatures ? (flags | 2048) : (flags &~ 2048); + flags = min ? (flags | 4096) : (flags &~ 4096); + flags = scam ? (flags | 524288) : (flags &~ 524288); + flags = has_link ? (flags | 1048576) : (flags &~ 1048576); + flags = has_geo ? (flags | 2097152) : (flags &~ 2097152); + flags = slowmode_enabled ? (flags | 4194304) : (flags &~ 4194304); + flags = call_active ? (flags | 8388608) : (flags &~ 8388608); + flags = call_not_empty ? (flags | 16777216) : (flags &~ 16777216); + flags = fake ? (flags | 33554432) : (flags &~ 33554432); + flags = gigagroup ? (flags | 67108864) : (flags &~ 67108864); + flags = noforwards ? (flags | 134217728) : (flags &~ 134217728); + flags = join_to_send ? (flags | 268435456) : (flags &~ 268435456); + flags = join_request ? (flags | 536870912) : (flags &~ 536870912); + flags = forum ? (flags | 1073741824) : (flags &~ 1073741824); + stream.writeInt32(flags); + flags2 = stories_hidden ? (flags2 | 2) : (flags2 &~ 2); + flags2 = stories_hidden_min ? (flags2 | 4) : (flags2 &~ 4); + flags2 = stories_unavailable ? (flags2 | 8) : (flags2 &~ 8); + flags2 = signature_profiles ? (flags2 | 4096) : (flags2 &~ 4096); + stream.writeInt32(flags2); + stream.writeInt64(id); + if ((flags & 8192) != 0) { + stream.writeInt64(access_hash); + } + stream.writeString(title); + if ((flags & 64) != 0) { + stream.writeString(username); + } + photo.serializeToStream(stream); + stream.writeInt32(date); + if ((flags & 512) != 0) { + stream.writeInt32(0x1cb5c415); + int count = restriction_reason.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + restriction_reason.get(a).serializeToStream(stream); + } + } + if ((flags & 16384) != 0) { + admin_rights.serializeToStream(stream); + } + if ((flags & 32768) != 0) { + banned_rights.serializeToStream(stream); + } + if ((flags & 262144) != 0) { + default_banned_rights.serializeToStream(stream); + } + if ((flags & 131072) != 0) { + stream.writeInt32(participants_count); + } + if ((flags2 & 1) != 0) { + stream.writeInt32(0x1cb5c415); + int count = usernames.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + usernames.get(a).serializeToStream(stream); + } + } + if ((flags2 & 16) != 0) { + stream.writeInt32(stories_max_id); + } + if ((flags2 & 128) != 0) { + color.serializeToStream(stream); + } + if ((flags2 & 256) != 0) { + profile_color.serializeToStream(stream); + } if ((flags2 & 512) != 0) { - emoji_status = EmojiStatus.TLdeserialize(stream, stream.readInt32(exception), exception); - } - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - flags = creator ? (flags | 1) : (flags &~ 1); - flags = left ? (flags | 4) : (flags &~ 4); - flags = broadcast ? (flags | 32) : (flags &~ 32); - flags = verified ? (flags | 128) : (flags &~ 128); - flags = megagroup ? (flags | 256) : (flags &~ 256); - flags = restricted ? (flags | 512) : (flags &~ 512); - flags = signatures ? (flags | 2048) : (flags &~ 2048); - flags = min ? (flags | 4096) : (flags &~ 4096); - flags = scam ? (flags | 524288) : (flags &~ 524288); - flags = has_link ? (flags | 1048576) : (flags &~ 1048576); - flags = has_geo ? (flags | 2097152) : (flags &~ 2097152); - flags = slowmode_enabled ? (flags | 4194304) : (flags &~ 4194304); - flags = call_active ? (flags | 8388608) : (flags &~ 8388608); - flags = call_not_empty ? (flags | 16777216) : (flags &~ 16777216); - flags = fake ? (flags | 33554432) : (flags &~ 33554432); - flags = gigagroup ? (flags | 67108864) : (flags &~ 67108864); - flags = noforwards ? (flags | 134217728) : (flags &~ 134217728); - flags = join_to_send ? (flags | 268435456) : (flags &~ 268435456); - flags = join_request ? (flags | 536870912) : (flags &~ 536870912); - flags = forum ? (flags | 1073741824) : (flags &~ 1073741824); - stream.writeInt32(flags); - flags2 = stories_hidden ? (flags2 | 2) : (flags2 &~ 2); - flags2 = stories_hidden_min ? (flags2 | 4) : (flags2 &~ 4); - flags2 = stories_unavailable ? (flags2 | 8) : (flags2 &~ 8); - stream.writeInt32(flags2); - stream.writeInt64(id); - if ((flags & 8192) != 0) { - stream.writeInt64(access_hash); - } - stream.writeString(title); - if ((flags & 64) != 0) { - stream.writeString(username); - } - photo.serializeToStream(stream); - stream.writeInt32(date); - if ((flags & 512) != 0) { - stream.writeInt32(0x1cb5c415); - int count = restriction_reason.size(); - stream.writeInt32(count); - for (int a = 0; a < count; a++) { - restriction_reason.get(a).serializeToStream(stream); - } - } - if ((flags & 16384) != 0) { - admin_rights.serializeToStream(stream); - } - if ((flags & 32768) != 0) { - banned_rights.serializeToStream(stream); - } - if ((flags & 262144) != 0) { - default_banned_rights.serializeToStream(stream); - } - if ((flags & 131072) != 0) { - stream.writeInt32(participants_count); - } - if ((flags2 & 1) != 0) { - stream.writeInt32(0x1cb5c415); - int count = usernames.size(); - stream.writeInt32(count); - for (int a = 0; a < count; a++) { - usernames.get(a).serializeToStream(stream); - } - } - if ((flags2 & 16) != 0) { - stream.writeInt32(stories_max_id); - } - if ((flags2 & 128) != 0) { - color.serializeToStream(stream); + emoji_status.serializeToStream(stream); } - if ((flags2 & 256) != 0) { - profile_color.serializeToStream(stream); + if ((flags2 & 1024) != 0) { + stream.writeInt32(level); } - if ((flags2 & 512) != 0) { - emoji_status.serializeToStream(stream); + if ((flags2 & 2048) != 0) { + stream.writeInt32(subscription_until_date); } } } - public static class TL_channel extends Chat { + public static class TL_channel_layer185 extends TL_channel { public static final int constructor = 0xaadfc8f; public void readParams(AbstractSerializedData stream, boolean exception) { @@ -48710,7 +49466,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -48895,7 +49651,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -49062,7 +49818,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -49239,7 +49995,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -49412,7 +50168,7 @@ public void readParams(AbstractSerializedData stream, boolean exception, boolean } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -49563,7 +50319,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -49848,7 +50604,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -50303,25 +51059,32 @@ public void serializeToStream(AbstractSerializedData stream) { } } - public static class TL_restrictionReason extends TLObject { - public static final int constructor = 0xd072acb4; + public static class RestrictionReason extends TLObject { public String platform; public String reason; public String text; - public static TL_restrictionReason TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { - if (TL_restrictionReason.constructor != constructor) { - if (exception) { - throw new RuntimeException(String.format("can't parse magic %x in TL_restrictionReason", constructor)); - } else { - return null; - } + public static RestrictionReason TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + RestrictionReason result = null; + switch (constructor) { + case TL_reastrictionReason.constructor: + result = new TL_reastrictionReason(); + break; + } + if (result == null && exception) { + throw new RuntimeException(String.format("can't parse magic %x in RestrictionReason", constructor)); + } + if (result != null) { + result.readParams(stream, exception); } - TL_restrictionReason result = new TL_restrictionReason(); - result.readParams(stream, exception); return result; } + } + + public static class TL_reastrictionReason extends RestrictionReason { + public static final int constructor = 0xd072acb4; + public void readParams(AbstractSerializedData stream, boolean exception) { platform = stream.readString(exception); @@ -52486,9 +53249,12 @@ public static abstract class ExportedChatInvite extends TLObject { public static TL_chatInviteExported TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { TL_chatInviteExported result = null; switch (constructor) { - case 0xab4a819: + case TL_chatInviteExported.constructor: result = new TL_chatInviteExported(); break; + case TL_chatInviteExported_layer185.constructor: + result = new TL_chatInviteExported_layer185(); + break; case 0xb18105e8: result = new TL_chatInviteExported_layer133(); break; @@ -52516,7 +53282,7 @@ public static TL_chatInviteExported TLdeserialize(AbstractSerializedData stream, } public static class TL_chatInviteExported extends ExportedChatInvite { - public static final int constructor = 0xab4a819; + public static final int constructor = 0xa22cbd96; public int flags; public boolean revoked; @@ -52530,10 +53296,85 @@ public static class TL_chatInviteExported extends ExportedChatInvite { public int usage_limit; public int usage; public int requested; + public int subscription_expired; public String title; + public TL_starsSubscriptionPricing subscription_pricing; public ArrayList<User> importers; //custom public boolean expired; //custom + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + revoked = (flags & 1) != 0; + permanent = (flags & 32) != 0; + request_needed = (flags & 64) != 0; + link = stream.readString(exception); + admin_id = stream.readInt64(exception); + date = stream.readInt32(exception); + if ((flags & 16) != 0) { + start_date = stream.readInt32(exception); + } + if ((flags & 2) != 0) { + expire_date = stream.readInt32(exception); + } + if ((flags & 4) != 0) { + usage_limit = stream.readInt32(exception); + } + if ((flags & 8) != 0) { + usage = stream.readInt32(exception); + } + if ((flags & 128) != 0) { + requested = stream.readInt32(exception); + } + if ((flags & 1024) != 0) { + subscription_expired = stream.readInt32(exception); + } + if ((flags & 256) != 0) { + title = stream.readString(exception); + } + if ((flags & 512) != 0) { + subscription_pricing = TL_starsSubscriptionPricing.TLdeserialize(stream, stream.readInt32(exception), exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = revoked ? (flags | 1) : (flags &~ 1); + flags = permanent ? (flags | 32) : (flags &~ 32); + flags = request_needed ? (flags | 64) : (flags &~ 64); + stream.writeInt32(flags); + stream.writeString(link); + stream.writeInt64(admin_id); + stream.writeInt32(date); + if ((flags & 16) != 0) { + stream.writeInt32(start_date); + } + if ((flags & 2) != 0) { + stream.writeInt32(expire_date); + } + if ((flags & 4) != 0) { + stream.writeInt32(usage_limit); + } + if ((flags & 8) != 0) { + stream.writeInt32(usage); + } + if ((flags & 128) != 0) { + stream.writeInt32(requested); + } + if ((flags & 1024) != 0) { + stream.writeInt32(subscription_expired); + } + if ((flags & 256) != 0) { + stream.writeString(title); + } + if ((flags & 512) != 0) { + subscription_pricing.serializeToStream(stream); + } + } + } + + public static class TL_chatInviteExported_layer185 extends TL_chatInviteExported { + public static final int constructor = 0xab4a819; + public void readParams(AbstractSerializedData stream, boolean exception) { flags = stream.readInt32(exception); revoked = (flags & 1) != 0; @@ -52719,12 +53560,15 @@ public static abstract class InputFile extends TLObject { public static InputFile TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { InputFile result = null; switch (constructor) { - case 0xfa4f0bb5: + case TL_inputFileBig.constructor: result = new TL_inputFileBig(); break; - case 0xf52ff27f: + case TL_inputFile.constructor: result = new TL_inputFile(); break; + case TL_inputFileStoryDocument.constructor: + result = new TL_inputFileStoryDocument(); + break; } if (result == null && exception) { throw new RuntimeException(String.format("can't parse magic %x in InputFile", constructor)); @@ -52754,6 +53598,21 @@ public void serializeToStream(AbstractSerializedData stream) { } } + public static class TL_inputFileStoryDocument extends InputFile { + public static final int constructor = 0x62dc8b48; + + public TLRPC.InputDocument doc; + + public void readParams(AbstractSerializedData stream, boolean exception) { + doc = TLRPC.InputDocument.TLdeserialize(stream, stream.readInt32(exception), exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + doc.serializeToStream(stream); + } + } + public static class TL_inputFile extends InputFile { public static final int constructor = 0xf52ff27f; @@ -53074,7 +53933,7 @@ public static abstract class UserFull extends TLObject { public Photo personal_photo; public Photo profile_photo; public PeerNotifySettings notify_settings; - public BotInfo bot_info; + public TL_bots.BotInfo bot_info; public int pinned_msg_id; public int common_chats_count; public int folder_id; @@ -53199,7 +54058,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -53402,7 +54261,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -53596,7 +54455,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -53784,7 +54643,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -53964,7 +54823,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -54117,7 +54976,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -54265,7 +55124,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -54405,7 +55264,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -54535,7 +55394,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -54658,7 +55517,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -54777,7 +55636,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -54870,7 +55729,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -54952,7 +55811,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -55026,7 +55885,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -55086,7 +55945,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -55142,7 +56001,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -55212,7 +56071,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } notify_settings = PeerNotifySettings.TLdeserialize(stream, stream.readInt32(exception), exception); if ((flags & 8) != 0) { - bot_info = BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + bot_info = TL_bots.BotInfo.TLdeserialize(stream, stream.readInt32(exception), exception); } if ((flags & 64) != 0) { pinned_msg_id = stream.readInt32(exception); @@ -57907,6 +58766,9 @@ public static Reaction TLdeserialize(AbstractSerializedData stream, int construc case 0x1b2286b8: result = new TL_reactionEmoji(); break; + case TL_reactionPaid.constructor: + result = new TL_reactionPaid(); + break; } if (result == null && exception) { throw new RuntimeException(String.format("can't parse magic %x in Reaction", constructor)); @@ -57954,6 +58816,15 @@ public void serializeToStream(AbstractSerializedData stream) { } } + public static class TL_reactionPaid extends Reaction { + public static final int constructor = 0x523da4eb; + + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + } + } + public static class TL_reactionEmoji extends Reaction { public static final int constructor = 0x1b2286b8; @@ -60690,6 +61561,7 @@ public static class TL_contacts_getTopPeers extends TLObject { public boolean forward_chats; public boolean groups; public boolean channels; + public boolean bots_app; public int offset; public int limit; public long hash; @@ -60708,6 +61580,7 @@ public void serializeToStream(AbstractSerializedData stream) { flags = forward_chats ? (flags | 32) : (flags &~ 32); flags = groups ? (flags | 1024) : (flags &~ 1024); flags = channels ? (flags | 32768) : (flags &~ 32768); + flags = bots_app ? (flags | 65536) : (flags &~ 65536); stream.writeInt32(flags); stream.writeInt32(offset); stream.writeInt32(limit); @@ -61807,7 +62680,7 @@ public void serializeToStream(AbstractSerializedData stream) { } public static class TL_messages_exportChatInvite extends TLObject { - public static final int constructor = 0xa02ce5d5; + public static final int constructor = 0xa455de90; public int flags; public boolean legacy_revoke_permanent; @@ -61816,6 +62689,7 @@ public static class TL_messages_exportChatInvite extends TLObject { public int expire_date; public int usage_limit; public String title; + public TL_starsSubscriptionPricing subscription_pricing; public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { return ExportedChatInvite.TLdeserialize(stream, constructor, exception); @@ -61836,6 +62710,9 @@ public void serializeToStream(AbstractSerializedData stream) { if ((flags & 16) != 0) { stream.writeString(title); } + if ((flags & 32) != 0) { + subscription_pricing.serializeToStream(stream); + } } } @@ -63314,6 +64191,50 @@ public void serializeToStream(AbstractSerializedData stream) { } } + public static class TL_messages_sendPaidReaction extends TLObject { + public static final int constructor = 0x25c8fe3e; + + public int flags; + public boolean isPrivate; + public InputPeer peer; + public int msg_id; + public int count; + public long random_id; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return Updates.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = isPrivate ? (flags | 1) : (flags &~ 1); + stream.writeInt32(flags); + peer.serializeToStream(stream); + stream.writeInt32(msg_id); + stream.writeInt32(count); + stream.writeInt64(random_id); + } + } + + public static class TL_messages_togglePaidReactionPrivacy extends TLObject { + public static final int constructor = 0x849ad397; + + public InputPeer peer; + public int msg_id; + public boolean isPrivate; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return Bool.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + peer.serializeToStream(stream); + stream.writeInt32(msg_id); + stream.writeBool(isPrivate); + } + } + public static class TL_messages_setDefaultReaction extends TLObject { public static final int constructor = 0x4f47a016; @@ -63493,12 +64414,13 @@ public void serializeToStream(AbstractSerializedData stream) { } public static class TL_messages_setChatAvailableReactions extends TLObject { - public static final int constructor = 0x5a150bd4; + public static final int constructor = 0x864b2581; public int flags; public InputPeer peer; public ChatReactions available_reactions; public int reactions_limit; + public boolean paid_enabled; public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { return Updates.TLdeserialize(stream, constructor, exception); @@ -63512,6 +64434,9 @@ public void serializeToStream(AbstractSerializedData stream) { if ((flags & 1) != 0) { stream.writeInt32(reactions_limit); } + if ((flags & 2) != 0) { + stream.writeBool(paid_enabled); + } } } @@ -64075,6 +65000,7 @@ public static class TL_messages_getChatInviteImporters extends TLObject { public int flags; public boolean requested; + public boolean subscription_expired; public InputPeer peer; public String link; public String q; @@ -64089,6 +65015,7 @@ public TLObject deserializeResponse(AbstractSerializedData stream, int construct public void serializeToStream(AbstractSerializedData stream) { stream.writeInt32(constructor); flags = requested ? (flags | 1) : (flags &~ 1); + flags = subscription_expired ? (flags | 8) : (flags &~ 8); stream.writeInt32(flags); peer.serializeToStream(stream); if ((flags & 2) != 0) { @@ -65023,10 +65950,12 @@ public void serializeToStream(AbstractSerializedData stream) { } public static class TL_channels_toggleSignatures extends TLObject { - public static final int constructor = 0x1f69b606; + public static final int constructor = 0x418d549c; public InputChannel channel; - public boolean enabled; + public int flags; + public boolean signatures_enabled; + public boolean profiles_enabled; public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { return Updates.TLdeserialize(stream, constructor, exception); @@ -65034,8 +65963,10 @@ public TLObject deserializeResponse(AbstractSerializedData stream, int construct public void serializeToStream(AbstractSerializedData stream) { stream.writeInt32(constructor); + flags = signatures_enabled ? flags | 1 : flags &~ 1; + flags = profiles_enabled ? flags | 2 : flags &~ 2; + stream.writeInt32(flags); channel.serializeToStream(stream); - stream.writeBool(enabled); } } @@ -66517,8 +67448,11 @@ public static InputStorePaymentPurpose TLdeserialize(AbstractSerializedData stre case TL_inputStorePaymentPremiumGiveaway.constructor: result = new TL_inputStorePaymentPremiumGiveaway(); break; - case TL_inputStorePaymentStars.constructor: - result = new TL_inputStorePaymentStars(); + case TL_inputStorePaymentStarsGift.constructor: + result = new TL_inputStorePaymentStarsGift(); + break; + case TL_inputStorePaymentStarsTopup.constructor: + result = new TL_inputStorePaymentStarsTopup(); break; } if (result == null && exception) { @@ -67062,6 +67996,7 @@ public static abstract class MessageMedia extends TLObject { public boolean voice; public long stars_amount; public ArrayList<MessageExtendedMedia> extended_media = new ArrayList<>(); + public String attachPath; //custom for bot previews public static MessageMedia TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { MessageMedia result = null; @@ -67633,7 +68568,7 @@ public static class Message extends TLObject { public String post_author; public long grouped_id; public TL_messageReactions reactions; - public ArrayList<TL_restrictionReason> restriction_reason = new ArrayList<>(); + public ArrayList<RestrictionReason> restriction_reason = new ArrayList<>(); public int ttl_period; public int quick_reply_shortcut_id; public long effect; @@ -68601,7 +69536,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -68825,7 +69760,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -69043,7 +69978,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -69250,7 +70185,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -69452,7 +70387,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -69645,7 +70580,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -69832,7 +70767,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -70013,7 +70948,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -70189,7 +71124,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -70364,7 +71299,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -70532,7 +71467,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -70693,7 +71628,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -70854,7 +71789,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { } int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { - TL_restrictionReason object = TL_restrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); + RestrictionReason object = RestrictionReason.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { return; } @@ -73633,6 +74568,37 @@ public void serializeToStream(AbstractSerializedData stream) { } } + public static class TL_messages_requestMainWebView extends TLObject { + public static final int constructor = 0xc9e01e7b; + + public int flags; + public boolean compact; + public InputPeer peer; + public InputUser bot; + public String start_param; + public TL_dataJSON theme_params; + public String platform; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TL_webViewResultUrl.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = compact ? (flags | 128) : (flags &~ 128); + stream.writeInt32(flags); + peer.serializeToStream(stream); + bot.serializeToStream(stream); + if ((flags & 2) != 0) { + stream.writeString(start_param); + } + if ((flags & 1) != 0) { + theme_params.serializeToStream(stream); + } + stream.writeString(platform); + } + } + public static class TL_messages_prolongWebView extends TLObject { public static final int constructor = 0xb0d81a83; @@ -74168,117 +75134,6 @@ public void serializeToStream(AbstractSerializedData stream) { } } - public static abstract class BotMenuButton extends TLObject { - - public static BotMenuButton TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { - BotMenuButton result = null; - switch (constructor) { - case 0xc7b57ce6: - result = new TL_botMenuButton(); - break; - case 0x7533a588: - result = new TL_botMenuButtonDefault(); - break; - case 0x4258c205: - result = new TL_botMenuButtonCommands(); - break; - } - if (result == null && exception) { - throw new RuntimeException(String.format("can't parse magic %x in BotMenuButton", constructor)); - } - if (result != null) { - result.readParams(stream, exception); - } - return result; - } - } - - public static class TL_botMenuButton extends BotMenuButton { - public static final int constructor = 0xc7b57ce6; - - public String text; - public String url; - - public void readParams(AbstractSerializedData stream, boolean exception) { - text = stream.readString(exception); - url = stream.readString(exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeString(text); - stream.writeString(url); - } - } - - public static class TL_botMenuButtonDefault extends BotMenuButton { - public static final int constructor = 0x7533a588; - - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - } - } - - public static class TL_botMenuButtonCommands extends BotMenuButton { - public static final int constructor = 0x4258c205; - - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - } - } - - public static class TL_updateBotMenuButton extends Update { - public static final int constructor = 0x14b85813; - - public long bot_id; - public BotMenuButton button; - - public void readParams(AbstractSerializedData stream, boolean exception) { - bot_id = stream.readInt64(exception); - button = BotMenuButton.TLdeserialize(stream, stream.readInt32(exception), exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt64(bot_id); - button.serializeToStream(stream); - } - } - - public static class TL_bots_setBotMenuButton extends TLObject { - public static final int constructor = 0x4504d54f; - - public InputUser user_id; - public BotMenuButton button; - - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return Bool.TLdeserialize(stream, constructor, exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - user_id.serializeToStream(stream); - button.serializeToStream(stream); - } - } - - public static class TL_bots_getBotMenuButton extends TLObject { - public static final int constructor = 0x9c60eb28; - - public InputUser user_id; - - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return BotMenuButton.TLdeserialize(stream, constructor, exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - user_id.serializeToStream(stream); - } - } - public static abstract class InputBotApp extends TLObject { public static InputBotApp TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { @@ -74710,9 +75565,12 @@ public static InputInvoice TLdeserialize(AbstractSerializedData stream, int cons case 0xc326caef: result = new TL_inputInvoiceSlug(); break; - case 0x1da33ad8: + case TL_inputInvoiceStars.constructor: result = new TL_inputInvoiceStars(); break; + case TL_inputInvoiceChatInviteSubscription.constructor: + result = new TL_inputInvoiceChatInviteSubscription(); + break; } if (result == null && exception) { throw new RuntimeException(String.format("can't parse magic %x in InputInvoice", constructor)); @@ -76955,55 +77813,6 @@ public void serializeToStream(AbstractSerializedData stream) { } } - public static class TL_bots_canSendMessage extends TLObject { - public static final int constructor = 0x1359f4e6; - - public InputUser bot; - - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return Bool.TLdeserialize(stream, constructor, exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - bot.serializeToStream(stream); - } - } - - public static class TL_bots_allowSendMessage extends TLObject { - public static final int constructor = 0xf132e3ef; - - public InputUser bot; - - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return Updates.TLdeserialize(stream, constructor, exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - bot.serializeToStream(stream); - } - } - - public static class TL_bots_invokeWebViewCustomMethod extends TLObject { - public static final int constructor = 0x87fc5e7; - - public InputUser bot; - public String custom_method; - public TL_dataJSON params; - - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return TL_dataJSON.TLdeserialize(stream, constructor, exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - bot.serializeToStream(stream); - stream.writeString(custom_method); - params.serializeToStream(stream); - } - } - public static class TL_messages_webPage extends TLObject { public static final int constructor = 0xfd5e12bd; @@ -77302,16 +78111,14 @@ public void serializeToStream(AbstractSerializedData stream) { } } - public static class TL_inputStorePaymentStars extends InputStorePaymentPurpose { - public static final int constructor = 0x4f0ee8df; + public static class TL_inputStorePaymentStarsTopup extends InputStorePaymentPurpose { + public static final int constructor = 0xdddd0f56; - public int flags; public long stars; public String currency; public long amount; public void readParams(AbstractSerializedData stream, boolean exception) { - flags = stream.readInt32(exception); stars = stream.readInt64(exception); currency = stream.readString(exception); amount = stream.readInt64(exception); @@ -77319,7 +78126,30 @@ public void readParams(AbstractSerializedData stream, boolean exception) { public void serializeToStream(AbstractSerializedData stream) { stream.writeInt32(constructor); - stream.writeInt32(flags); + stream.writeInt64(stars); + stream.writeString(currency); + stream.writeInt64(amount); + } + } + + public static class TL_inputStorePaymentStarsGift extends InputStorePaymentPurpose { + public static final int constructor = 0x1d741ef7; + + public InputUser user_id; + public long stars; + public String currency; + public long amount; + + public void readParams(AbstractSerializedData stream, boolean exception) { + user_id = InputUser.TLdeserialize(stream, stream.readInt32(exception), exception); + stars = stream.readInt64(exception); + currency = stream.readString(exception); + amount = stream.readInt64(exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + user_id.serializeToStream(stream); stream.writeInt64(stars); stream.writeString(currency); stream.writeInt64(amount); @@ -77345,17 +78175,32 @@ public void serializeToStream(AbstractSerializedData stream) { } public static class TL_inputInvoiceStars extends InputInvoice { - public static int constructor = 0x1da33ad8; + public static final int constructor = 0x65f00ce3; - public TL_starsTopupOption option; + public InputStorePaymentPurpose purpose; public void readParams(AbstractSerializedData stream, boolean exception) { - option = TL_starsTopupOption.TLdeserialize(stream, stream.readInt32(exception), exception); + purpose = InputStorePaymentPurpose.TLdeserialize(stream, stream.readInt32(exception), exception); } public void serializeToStream(AbstractSerializedData stream) { stream.writeInt32(constructor); - option.serializeToStream(stream); + purpose.serializeToStream(stream); + } + } + + public static class TL_inputInvoiceChatInviteSubscription extends InputInvoice { + public static final int constructor = 0x34e793f1; + + public String hash; + + public void readParams(AbstractSerializedData stream, boolean exception) { + hash = stream.readString(exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeString(hash); } } @@ -81400,12 +82245,13 @@ public static class TL_starsTopupOption extends TLObject { public static final int constructor = 0xbd915c0; public int flags; + public boolean extended; public long stars; public String store_product; public String currency; public long amount; - public boolean collapsed; //custom public boolean loadingStorePrice; //custom + public boolean missingStorePrice; //custom public static TL_starsTopupOption TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { if (TL_starsTopupOption.constructor != constructor) { @@ -81422,6 +82268,7 @@ public static TL_starsTopupOption TLdeserialize(AbstractSerializedData stream, i public void readParams(AbstractSerializedData stream, boolean exception) { flags = stream.readInt32(exception); + extended = (flags & 2) != 0; stars = stream.readInt64(exception); if ((flags & 1) != 0) { store_product = stream.readString(exception); @@ -81432,6 +82279,56 @@ public void readParams(AbstractSerializedData stream, boolean exception) { public void serializeToStream(AbstractSerializedData stream) { stream.writeInt32(constructor); + flags = extended ? flags | 2 : flags &~ 2; + stream.writeInt32(flags); + stream.writeInt64(stars); + if ((flags & 1) != 0) { + stream.writeString(store_product); + } + stream.writeString(currency); + stream.writeInt64(amount); + } + } + + public static class TL_starsGiftOption extends TLObject { + public static final int constructor = 0x5e0589f1; + + public int flags; + public boolean extended; + public long stars; + public String store_product; + public String currency; + public long amount; + public boolean loadingStorePrice; //custom + public boolean missingStorePrice; //custom + + public static TL_starsGiftOption TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + if (TL_starsGiftOption.constructor != constructor) { + if (exception) { + throw new RuntimeException(String.format("can't parse magic %x in TL_starsGiftOption", constructor)); + } else { + return null; + } + } + TL_starsGiftOption result = new TL_starsGiftOption(); + result.readParams(stream, exception); + return result; + } + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + extended = (flags & 2) != 0; + stars = stream.readInt64(exception); + if ((flags & 1) != 0) { + store_product = stream.readString(exception); + } + currency = stream.readString(exception); + amount = stream.readInt64(exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = extended ? flags | 2 : flags &~ 2; stream.writeInt32(flags); stream.writeInt64(stars); if ((flags & 1) != 0) { @@ -81560,6 +82457,9 @@ public static class StarsTransaction extends TLObject { public boolean refund; public boolean pending; public boolean failed; + public boolean gift; + public boolean reaction; + public boolean subscription; public String id; public long stars; public int date; @@ -81572,6 +82472,10 @@ public static class StarsTransaction extends TLObject { public byte[] bot_payload; public int msg_id; public ArrayList<MessageMedia> extended_media = new ArrayList<>(); + public int subscription_period; + + public Peer sent_by; //custom + public Peer received_by; //custom public static StarsTransaction TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { StarsTransaction result = null; @@ -81582,6 +82486,9 @@ public static StarsTransaction TLdeserialize(AbstractSerializedData stream, int case TL_starsTransaction_layer182.constructor: result = new TL_starsTransaction_layer182(); break; + case TL_starsTransaction_layer185.constructor: + result = new TL_starsTransaction_layer185(); + break; case TL_starsTransaction.constructor: result = new TL_starsTransaction(); break; @@ -81689,7 +82596,108 @@ public void serializeToStream(AbstractSerializedData stream) { } } - public static class TL_starsTransaction extends StarsTransaction { + public static class TL_starsTransaction extends StarsTransaction { + public static final int constructor = 0x433aeb2b; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + refund = (flags & 8) != 0; + pending = (flags & 16) != 0; + failed = (flags & 64) != 0; + gift = (flags & 1024) != 0; + reaction = (flags & 2048) != 0; + subscription = (flags & 4096) != 0; + id = stream.readString(exception); + stars = stream.readInt64(exception); + date = stream.readInt32(exception); + peer = StarsTransactionPeer.TLdeserialize(stream, stream.readInt32(exception), exception); + if ((flags & 1) != 0) { + title = stream.readString(exception); + } + if ((flags & 2) != 0) { + description = stream.readString(exception); + } + if ((flags & 4) != 0) { + photo = WebDocument.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 32) != 0) { + transaction_date = stream.readInt32(exception); + transaction_url = stream.readString(exception); + } + if ((flags & 128) != 0) { + bot_payload = stream.readByteArray(exception); + } + if ((flags & 256) != 0) { + msg_id = stream.readInt32(exception); + } + if ((flags & 512) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + MessageMedia object = MessageMedia.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + extended_media.add(object); + } + } + if ((flags & 4096) != 0) { + subscription_period = stream.readInt32(exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = refund ? flags | 8 : flags &~ 8; + flags = pending ? flags | 16 : flags &~ 16; + flags = failed ? flags | 64 : flags &~ 64; + flags = gift ? flags | 1024 : flags &~ 1024; + flags = reaction ? flags | 2048 : flags &~ 2048; + flags = subscription ? flags | 4096 : flags &~ 4096; + stream.writeInt32(flags); + stream.writeInt64(stars); + stream.writeInt32(date); + peer.serializeToStream(stream); + if ((flags & 1) != 0) { + stream.writeString(title); + } + if ((flags & 2) != 0) { + stream.writeString(description); + } + if ((flags & 4) != 0) { + photo.serializeToStream(stream); + } + if ((flags & 32) != 0) { + stream.writeInt32(transaction_date); + stream.writeString(transaction_url); + } + if ((flags & 128) != 0) { + stream.writeByteArray(bot_payload); + } + if ((flags & 256) != 0) { + stream.writeInt32(msg_id); + } + if ((flags & 512) != 0) { + stream.writeInt32(0x1cb5c415); + int count = extended_media.size(); + stream.writeInt32(count); + for (int i = 0; i < count; ++i) { + extended_media.get(i).serializeToStream(stream); + } + } + if ((flags & 4096) != 0) { + stream.writeInt32(subscription_period); + } + } + } + + public static class TL_starsTransaction_layer185 extends TL_starsTransaction { public static final int constructor = 0x2db5418f; public void readParams(AbstractSerializedData stream, boolean exception) { @@ -81697,6 +82705,7 @@ public void readParams(AbstractSerializedData stream, boolean exception) { refund = (flags & 8) != 0; pending = (flags & 16) != 0; failed = (flags & 64) != 0; + gift = (flags & 1024) != 0; id = stream.readString(exception); stars = stream.readInt64(exception); date = stream.readInt32(exception); @@ -81744,6 +82753,7 @@ public void serializeToStream(AbstractSerializedData stream) { flags = refund ? flags | 8 : flags &~ 8; flags = pending ? flags | 16 : flags &~ 16; flags = failed ? flags | 64 : flags &~ 64; + flags = gift ? flags | 1024 : flags &~ 1024; stream.writeInt32(flags); stream.writeInt64(stars); stream.writeInt32(date); @@ -81779,10 +82789,13 @@ public void serializeToStream(AbstractSerializedData stream) { } public static class TL_payments_starsStatus extends TLObject { - public static final int constructor = 0x8cf4ee60; + public static final int constructor = 0xbbfa316c; public int flags; public long balance; + public ArrayList<StarsSubscription> subscriptions = new ArrayList<>(); + public String subscriptions_next_offset; + public long subscriptions_missing_balance; public ArrayList<StarsTransaction> history = new ArrayList<>(); public String next_offset; public ArrayList<Chat> chats = new ArrayList<>(); @@ -81804,32 +82817,57 @@ public static TL_payments_starsStatus TLdeserialize(AbstractSerializedData strea public void readParams(AbstractSerializedData stream, boolean exception) { flags = stream.readInt32(exception); balance = stream.readInt64(exception); - int magic = stream.readInt32(exception); - if (magic != 0x1cb5c415) { - if (exception) { - throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + if ((flags & 2) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + StarsSubscription object = StarsSubscription.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + subscriptions.add(object); } - return; } - int count = stream.readInt32(exception); - for (int a = 0; a < count; a++) { - StarsTransaction object = StarsTransaction.TLdeserialize(stream, stream.readInt32(exception), exception); - if (object == null) { + if ((flags & 4) != 0) { + subscriptions_next_offset = stream.readString(exception); + } + if ((flags & 16) != 0) { + subscriptions_missing_balance = stream.readInt64(exception); + } + if ((flags & 8) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } return; } - history.add(object); + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + StarsTransaction object = StarsTransaction.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + history.add(object); + } } if ((flags & 1) != 0) { next_offset = stream.readString(exception); } - magic = stream.readInt32(exception); + int magic = stream.readInt32(exception); if (magic != 0x1cb5c415) { if (exception) { throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); } return; } - count = stream.readInt32(exception); + int count = stream.readInt32(exception); for (int a = 0; a < count; a++) { Chat object = Chat.TLdeserialize(stream, stream.readInt32(exception), exception); if (object == null) { @@ -81858,6 +82896,20 @@ public void serializeToStream(AbstractSerializedData stream) { stream.writeInt32(constructor); stream.writeInt32(flags); stream.writeInt64(balance); + if ((flags & 2) != 0) { + stream.writeInt32(0x1cb5c415); + int count = subscriptions.size(); + stream.writeInt32(count); + for (int i = 0; i < count; ++i) { + subscriptions.get(i).serializeToStream(stream); + } + } + if ((flags & 4) != 0) { + stream.writeString(subscriptions_next_offset); + } + if ((flags & 16) != 0) { + stream.writeInt64(subscriptions_missing_balance); + } stream.writeInt32(0x1cb5c415); int count = history.size(); stream.writeInt32(count); @@ -81903,6 +82955,34 @@ public void serializeToStream(AbstractSerializedData stream) { } } + public static class TL_payments_getStarsGiftOptions extends TLObject { + public static final int constructor = 0xd3c96bc8; + + public int flags; + public InputUser user_id; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + Vector vector = new Vector(); + int size = stream.readInt32(exception); + for (int a = 0; a < size; a++) { + TL_starsGiftOption object = TL_starsGiftOption.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return vector; + } + vector.objects.add(object); + } + return vector; + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + if ((flags & 1) != 0) { + user_id.serializeToStream(stream); + } + } + } + public static class TL_payments_getStarsStatus extends TLObject { public static final int constructor = 0x104fcfa7; @@ -82261,5 +83341,230 @@ public void serializeToStream(AbstractSerializedData stream) { peer.serializeToStream(stream); } } + + public static class TL_paymentCharge extends TLObject { + public static final int constructor = 0xea02c27e; + + public String id; + public String provider_charge_id; + + public static TL_paymentCharge TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + if (TL_paymentCharge.constructor != constructor) { + if (exception) { + throw new RuntimeException(String.format("can't parse magic %x in TL_paymentCharge", constructor)); + } else { + return null; + } + } + TL_paymentCharge result = new TL_paymentCharge(); + result.readParams(stream, exception); + return result; + } + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + id = stream.readString(exception); + provider_charge_id = stream.readString(exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeString(id); + stream.writeString(provider_charge_id); + } + } + + public static class StarsSubscription extends TLObject { + + public int flags; + public boolean canceled; + public boolean can_refulfill; + public boolean missing_balance; + public String id; + public Peer peer; + public int until_date; + public TL_starsSubscriptionPricing pricing; + public String chat_invite_hash; + + public static StarsSubscription TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + StarsSubscription result = null; + switch (constructor) { + case TL_starsSubscription.constructor: + result = new TL_starsSubscription(); + break; + case TL_starsSubscription_old.constructor: + result = new TL_starsSubscription_old(); + break; + } + if (result == null && exception) { + throw new RuntimeException(String.format("can't parse magic %x in StarsTransaction", constructor)); + } + if (result != null) { + result.readParams(stream, exception); + } + return result; + } + + } + + public static class TL_starsSubscription extends StarsSubscription { + public static final int constructor = 0x538ecf18; + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + canceled = (flags & 1) != 0; + can_refulfill = (flags & 2) != 0; + missing_balance = (flags & 4) != 0; + id = stream.readString(exception); + peer = Peer.TLdeserialize(stream, stream.readInt32(exception), exception); + until_date = stream.readInt32(exception); + pricing = TL_starsSubscriptionPricing.TLdeserialize(stream, stream.readInt32(exception), exception); + if ((flags & 8) != 0) { + chat_invite_hash = stream.readString(exception); + } + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = canceled ? (flags | 1) : (flags &~ 1); + flags = can_refulfill ? (flags | 2) : (flags &~ 2); + flags = missing_balance ? (flags | 4) : (flags &~ 4); + stream.writeInt32(flags); + stream.writeString(id); + peer.serializeToStream(stream); + stream.writeInt32(until_date); + pricing.serializeToStream(stream); + if ((flags & 8) != 0) { + stream.writeString(chat_invite_hash); + } + } + } + + public static class TL_starsSubscription_old extends TL_starsSubscription { + public static final int constructor = 0xd073f1e6; + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + canceled = (flags & 1) != 0; + can_refulfill = (flags & 2) != 0; + missing_balance = (flags & 4) != 0; + id = stream.readString(exception); + peer = Peer.TLdeserialize(stream, stream.readInt32(exception), exception); + until_date = stream.readInt32(exception); + pricing = TL_starsSubscriptionPricing.TLdeserialize(stream, stream.readInt32(exception), exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = canceled ? (flags | 1) : (flags &~ 1); + flags = can_refulfill ? (flags | 2) : (flags &~ 2); + flags = missing_balance ? (flags | 4) : (flags &~ 4); + stream.writeInt32(flags); + stream.writeString(id); + peer.serializeToStream(stream); + stream.writeInt32(until_date); + pricing.serializeToStream(stream); + } + } + + public static class TL_starsSubscriptionPricing extends TLObject { + public static final int constructor = 0x5416d58; + + public int period; + public long amount; + + public static TL_starsSubscriptionPricing TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + if (TL_starsSubscriptionPricing.constructor != constructor) { + if (exception) { + throw new RuntimeException(String.format("can't parse magic %x in TL_starsSubscriptionPricing", constructor)); + } else { + return null; + } + } + TL_starsSubscriptionPricing result = new TL_starsSubscriptionPricing(); + result.readParams(stream, exception); + return result; + } + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + period = stream.readInt32(exception); + amount = stream.readInt64(exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(period); + stream.writeInt64(amount); + } + } + + public static class TL_getStarsSubscriptions extends TLObject { + public static final int constructor = 0x32512c5; + + public int flags; + public boolean missing_balance; + public InputPeer peer; + public String offset; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TL_payments_starsStatus.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = missing_balance ? (flags | 1) : (flags &~ 1); + stream.writeInt32(flags); + peer.serializeToStream(stream); + stream.writeString(offset); + } + } + + public static class TL_changeStarsSubscription extends TLObject { + public static final int constructor = 0xc7770878; + + public int flags; + public InputPeer peer; + public String subscription_id; + public Boolean canceled; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return Bool.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = (canceled != null) ? (flags | 1) : (flags &~ 1); + stream.writeInt32(flags); + peer.serializeToStream(stream); + stream.writeString(subscription_id); + if ((flags & 1) != 0) { + stream.writeBool(canceled); + } + } + } + + public static class TL_fulfillStarsSubscription extends TLObject { + public static final int constructor = 0xcc5bebb3; + + public InputPeer peer; + public String subscription_id; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return Bool.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + peer.serializeToStream(stream); + stream.writeString(subscription_id); + } + } } diff --git a/TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_account.java b/TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_account.java new file mode 100644 index 00000000000..34f0b3b0e2b --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_account.java @@ -0,0 +1,78 @@ +package org.telegram.tgnet.tl; + +import org.telegram.tgnet.AbstractSerializedData; +import org.telegram.tgnet.TLObject; +import org.telegram.tgnet.TLRPC; + +public class TL_account { + + public static class contentSettings extends TLObject { + public static final int constructor = 0x57e28221; + + public int flags; + public boolean sensitive_enabled; + public boolean sensitive_can_change; + + public static contentSettings TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + if (contentSettings.constructor != constructor) { + if (exception) { + throw new RuntimeException(String.format("can't parse magic %x in TL_account.contentSettings", constructor)); + } else { + return null; + } + } + contentSettings result = new contentSettings(); + result.readParams(stream, exception); + return result; + } + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + sensitive_enabled = (flags & 1) != 0; + sensitive_can_change = (flags & 2) != 0; + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = sensitive_enabled ? (flags | 1) : (flags &~ 1); + flags = sensitive_can_change ? (flags | 2) : (flags &~ 2); + stream.writeInt32(flags); + } + } + + public static class setContentSettings extends TLObject { + public static final int constructor = 0xb574b16b; + + public int flags; + public boolean sensitive_enabled; + + @Override + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TLRPC.Bool.TLdeserialize(stream, constructor, exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = sensitive_enabled ? (flags | 1) : (flags &~ 1); + stream.writeInt32(flags); + } + } + + public static class getContentSettings extends TLObject { + public static final int constructor = 0x8b9b4dae; + + @Override + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return contentSettings.TLdeserialize(stream, constructor, exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + } + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_bots.java b/TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_bots.java new file mode 100644 index 00000000000..b9fea938dfe --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_bots.java @@ -0,0 +1,937 @@ +package org.telegram.tgnet.tl; + +import org.telegram.tgnet.AbstractSerializedData; +import org.telegram.tgnet.TLObject; +import org.telegram.tgnet.TLRPC; + +import java.util.ArrayList; + +public class TL_bots { + + public static class botPreviewMedia extends TLObject { + public static final int constructor = 0x23e91ba3; + + public int date; + public TLRPC.MessageMedia media; + + public static botPreviewMedia TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + if (botPreviewMedia.constructor != constructor) { + if (exception) { + throw new RuntimeException(String.format("can't parse magic %x in botPreviewMedia", constructor)); + } else { + return null; + } + } + botPreviewMedia result = new botPreviewMedia(); + result.readParams(stream, exception); + return result; + } + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + date = stream.readInt32(exception); + media = TLRPC.MessageMedia.TLdeserialize(stream, stream.readInt32(exception), exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(date); + media.serializeToStream(stream); + } + } + + public static class addPreviewMedia extends TLObject { + public static final int constructor = 0x17aeb75a; + + public TLRPC.InputUser bot; + public String lang_code = ""; + public TLRPC.InputMedia media; + + @Override + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return botPreviewMedia.TLdeserialize(stream, constructor, exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + stream.writeString(lang_code); + media.serializeToStream(stream); + } + } + + public static class editPreviewMedia extends TLObject { + public static final int constructor = 0x8525606f; + + public TLRPC.InputUser bot; + public String lang_code = ""; + + public TLRPC.InputMedia media; + public TLRPC.InputMedia new_media; + + @Override + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return botPreviewMedia.TLdeserialize(stream, constructor, exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + stream.writeString(lang_code); + media.serializeToStream(stream); + new_media.serializeToStream(stream); + } + } + + public static class deletePreviewMedia extends TLObject { + public static final int constructor = 0x2d0135b3; + + public TLRPC.InputUser bot; + public String lang_code = ""; + public ArrayList<TLRPC.InputMedia> media = new ArrayList<>(); + + @Override + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TLRPC.Bool.TLdeserialize(stream, constructor, exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + stream.writeString(lang_code); + stream.writeInt32(0x1cb5c415); + int count = media.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + media.get(a).serializeToStream(stream); + } + } + } + + public static class reorderPreviewMedias extends TLObject { + public static final int constructor = 0xb627f3aa; + + public TLRPC.InputUser bot; + public String lang_code = ""; + public ArrayList<TLRPC.InputMedia> order = new ArrayList<>(); + + @Override + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TLRPC.Bool.TLdeserialize(stream, constructor, exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + stream.writeString(lang_code); + stream.writeInt32(0x1cb5c415); + int count = order.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + order.get(a).serializeToStream(stream); + } + } + } + + public static class getPreviewMedias extends TLObject { + public static final int constructor = 0xa2a5594d; + + public TLRPC.InputUser bot; + + @Override + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + TLRPC.Vector vector = new TLRPC.Vector(); + int size = stream.readInt32(exception); + for (int a = 0; a < size; a++) { + vector.objects.add(botPreviewMedia.TLdeserialize(stream, stream.readInt32(exception), exception)); + } + return vector; + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + } + } + + public static class getPreviewInfo extends TLObject { + public static final int constructor = 0x423ab3ad; + + public TLRPC.InputUser bot; + public String lang_code = ""; + + @Override + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return previewInfo.TLdeserialize(stream, constructor, exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + stream.writeString(lang_code); + } + } + + public static class previewInfo extends TLObject { + public static final int constructor = 0xca71d64; + + public ArrayList<TL_bots.botPreviewMedia> media = new ArrayList<>(); + public ArrayList<String> lang_codes = new ArrayList<>(); + + public static previewInfo TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + if (previewInfo.constructor != constructor) { + if (exception) { + throw new RuntimeException(String.format("can't parse magic %x in previewInfo", constructor)); + } else { + return null; + } + } + previewInfo result = new previewInfo(); + result.readParams(stream, exception); + return result; + } + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + botPreviewMedia object = botPreviewMedia.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + media.add(object); + } + magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + lang_codes.add(stream.readString(exception)); + } + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(0x1cb5c415); + int count = media.size(); + stream.writeInt32(count); + for (int i = 0; i < count; ++i) { + media.get(i).serializeToStream(stream); + } + stream.writeInt32(0x1cb5c415); + count = lang_codes.size(); + stream.writeInt32(count); + for (int i = 0; i < count; ++i) { + stream.writeString(lang_codes.get(i)); + } + } + } + + public static class setBotInfo extends TLObject { + public static final int constructor = 0x10cf3123; + + public int flags; + public TLRPC.InputUser bot; + public String lang_code; + public String name; + public String about; + public String description; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TLRPC.Bool.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + if ((flags & 4) != 0) { + bot.serializeToStream(stream); + } + stream.writeString(lang_code); + if ((flags & 8) != 0) { + stream.writeString(name); + } + if ((flags & 1) != 0) { + stream.writeString(about); + } + if ((flags & 2) != 0) { + stream.writeString(description); + } + } + } + + public static class getBotInfo extends TLObject { + public static final int constructor = 0xdcd914fd; + + public int flags; + public TLRPC.InputUser bot; + public String lang_code; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return BotInfo.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + if ((flags & 1) != 0) { + bot.serializeToStream(stream); + } + stream.writeString(lang_code); + } + } + + public static class reorderUsernames extends TLObject { + public static final int constructor = 0x9709b1c2; + + public TLRPC.InputUser bot; + public ArrayList<String> order = new ArrayList<>(); + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TLRPC.Bool.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + stream.writeInt32(0x1cb5c415); + int count = order.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + stream.writeString(order.get(a)); + } + } + } + + public static class toggleUsername extends TLObject { + public static final int constructor = 0x53ca973; + + public TLRPC.InputUser bot; + public String username; + public boolean active; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TLRPC.Bool.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + stream.writeString(username); + stream.writeBool(active); + } + } + + public static abstract class BotInfo extends TLObject { + public long user_id; + public String description; + public ArrayList<TLRPC.TL_botCommand> commands = new ArrayList<>(); + public int version; + public BotMenuButton menu_button; + public int flags; + public TLRPC.Photo description_photo; + public TLRPC.Document description_document; + public boolean has_preview_medias; + public String privacy_policy_url; + + public static BotInfo TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + BotInfo result = null; + switch (constructor) { + case TL_botInfo_layer140.constructor: + result = new TL_botInfo_layer140(); + break; + case TL_botInfoEmpty_layer48.constructor: + result = new TL_botInfoEmpty_layer48(); + break; + case TL_botInfo_layer131.constructor: + result = new TL_botInfo_layer131(); + break; + case TL_botInfo_layer48.constructor: + result = new TL_botInfo_layer48(); + break; + case TL_botInfo_layer139.constructor: + result = new TL_botInfo_layer139(); + break; + case TL_botInfo_layer185.constructor: + result = new TL_botInfo_layer185(); + break; + case TL_botInfo.constructor: + result = new TL_botInfo(); + break; + } + if (result == null && exception) { + throw new RuntimeException(String.format("can't parse magic %x in BotInfo", constructor)); + } + if (result != null) { + result.readParams(stream, exception); + } + return result; + } + } + + public static class TL_botInfoEmpty_layer48 extends TL_botInfo { + public static final int constructor = 0xbb2e37ce; + + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + } + } + + public static class TL_botInfo_layer131 extends TL_botInfo { + public static final int constructor = 0x98e81d3a; + + + public void readParams(AbstractSerializedData stream, boolean exception) { + user_id = stream.readInt32(exception); + description = stream.readString(exception); + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TLRPC.TL_botCommand object = TLRPC.TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + commands.add(object); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32((int) user_id); + stream.writeString(description); + stream.writeInt32(0x1cb5c415); + int count = commands.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + commands.get(a).serializeToStream(stream); + } + } + } + + public static class TL_botInfo_layer48 extends TL_botInfo { + public static final int constructor = 0x9cf585d; + + + public void readParams(AbstractSerializedData stream, boolean exception) { + user_id = stream.readInt32(exception); + version = stream.readInt32(exception); + stream.readString(exception); + description = stream.readString(exception); + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TLRPC.TL_botCommand object = TLRPC.TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + commands.add(object); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32((int) user_id); + stream.writeInt32(version); + stream.writeString(""); + stream.writeString(description); + stream.writeInt32(0x1cb5c415); + int count = commands.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + commands.get(a).serializeToStream(stream); + } + } + } + + public static class TL_botInfo_layer139 extends BotInfo { + public static final int constructor = 0x1b74b335; + + + public void readParams(AbstractSerializedData stream, boolean exception) { + user_id = stream.readInt64(exception); + description = stream.readString(exception); + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TLRPC.TL_botCommand object = TLRPC.TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + commands.add(object); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt64(user_id); + stream.writeString(description); + stream.writeInt32(0x1cb5c415); + int count = commands.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + commands.get(a).serializeToStream(stream); + } + } + } + + public static class TL_botInfo extends BotInfo { + public static final int constructor = 0x82437e74; + + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + has_preview_medias = (flags & 64) != 0; + if ((flags & 1) != 0) { + user_id = stream.readInt64(exception); + } + if ((flags & 2) != 0) { + description = stream.readString(exception); + } + if ((flags & 16) != 0) { + description_photo = TLRPC.Photo.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 32) != 0) { + description_document = TLRPC.Document.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 4) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TLRPC.TL_botCommand object = TLRPC.TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + commands.add(object); + } + } + if ((flags & 8) != 0) { + menu_button = BotMenuButton.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 128) != 0) { + privacy_policy_url = stream.readString(exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = has_preview_medias ? flags | 64 : flags &~ 64; + stream.writeInt32(flags); + if ((flags & 1) != 0) { + stream.writeInt64(user_id); + } + if ((flags & 2) != 0) { + stream.writeString(description); + } + if ((flags & 16) != 0) { + description_photo.serializeToStream(stream); + } + if ((flags & 32) != 0) { + description_document.serializeToStream(stream); + } + if ((flags & 4) != 0) { + stream.writeInt32(0x1cb5c415); + int count = commands.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + commands.get(a).serializeToStream(stream); + } + } + if ((flags & 8) != 0) { + menu_button.serializeToStream(stream); + } + if ((flags & 128) != 0) { + stream.writeString(privacy_policy_url); + } + } + } + + public static class TL_botInfo_layer185 extends TL_botInfo { + public static final int constructor = 0x8f300b57; + + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + has_preview_medias = (flags & 64) != 0; + if ((flags & 1) != 0) { + user_id = stream.readInt64(exception); + } + if ((flags & 2) != 0) { + description = stream.readString(exception); + } + if ((flags & 16) != 0) { + description_photo = TLRPC.Photo.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 32) != 0) { + description_document = TLRPC.Document.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 4) != 0) { + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TLRPC.TL_botCommand object = TLRPC.TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + commands.add(object); + } + } + if ((flags & 8) != 0) { + menu_button = BotMenuButton.TLdeserialize(stream, stream.readInt32(exception), exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = has_preview_medias ? flags | 64 : flags &~ 64; + stream.writeInt32(flags); + if ((flags & 1) != 0) { + stream.writeInt64(user_id); + } + if ((flags & 2) != 0) { + stream.writeString(description); + } + if ((flags & 16) != 0) { + description_photo.serializeToStream(stream); + } + if ((flags & 32) != 0) { + description_document.serializeToStream(stream); + } + if ((flags & 4) != 0) { + stream.writeInt32(0x1cb5c415); + int count = commands.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + commands.get(a).serializeToStream(stream); + } + } + if ((flags & 8) != 0) { + menu_button.serializeToStream(stream); + } + } + } + + public static class TL_botInfo_layer140 extends TL_botInfo { + public static final int constructor = 0xe4169b5d; + + + public void readParams(AbstractSerializedData stream, boolean exception) { + user_id = stream.readInt64(exception); + description = stream.readString(exception); + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TLRPC.TL_botCommand object = TLRPC.TL_botCommand.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + commands.add(object); + } + menu_button = BotMenuButton.TLdeserialize(stream, stream.readInt32(exception), exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt64(user_id); + stream.writeString(description); + stream.writeInt32(0x1cb5c415); + int count = commands.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + commands.get(a).serializeToStream(stream); + } + menu_button.serializeToStream(stream); + } + } + + public static abstract class BotMenuButton extends TLObject { + + public static BotMenuButton TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + BotMenuButton result = null; + switch (constructor) { + case 0xc7b57ce6: + result = new TL_botMenuButton(); + break; + case 0x7533a588: + result = new TL_botMenuButtonDefault(); + break; + case 0x4258c205: + result = new TL_botMenuButtonCommands(); + break; + } + if (result == null && exception) { + throw new RuntimeException(String.format("can't parse magic %x in BotMenuButton", constructor)); + } + if (result != null) { + result.readParams(stream, exception); + } + return result; + } + } + + public static class TL_botMenuButton extends BotMenuButton { + public static final int constructor = 0xc7b57ce6; + + public String text; + public String url; + + public void readParams(AbstractSerializedData stream, boolean exception) { + text = stream.readString(exception); + url = stream.readString(exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeString(text); + stream.writeString(url); + } + } + + public static class TL_botMenuButtonDefault extends BotMenuButton { + public static final int constructor = 0x7533a588; + + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + } + } + + public static class TL_botMenuButtonCommands extends BotMenuButton { + public static final int constructor = 0x4258c205; + + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + } + } + + public static class TL_updateBotMenuButton extends TLRPC.Update { + public static final int constructor = 0x14b85813; + + public long bot_id; + public BotMenuButton button; + + public void readParams(AbstractSerializedData stream, boolean exception) { + bot_id = stream.readInt64(exception); + button = BotMenuButton.TLdeserialize(stream, stream.readInt32(exception), exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt64(bot_id); + button.serializeToStream(stream); + } + } + + public static class setBotMenuButton extends TLObject { + public static final int constructor = 0x4504d54f; + + public TLRPC.InputUser user_id; + public BotMenuButton button; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TLRPC.Bool.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + user_id.serializeToStream(stream); + button.serializeToStream(stream); + } + } + + public static class getBotMenuButton extends TLObject { + public static final int constructor = 0x9c60eb28; + + public TLRPC.InputUser user_id; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return BotMenuButton.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + user_id.serializeToStream(stream); + } + } + + public static class canSendMessage extends TLObject { + public static final int constructor = 0x1359f4e6; + + public TLRPC.InputUser bot; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TLRPC.Bool.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + } + } + + public static class allowSendMessage extends TLObject { + public static final int constructor = 0xf132e3ef; + + public TLRPC.InputUser bot; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TLRPC.Updates.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + } + } + + public static class invokeWebViewCustomMethod extends TLObject { + public static final int constructor = 0x87fc5e7; + + public TLRPC.InputUser bot; + public String custom_method; + public TLRPC.TL_dataJSON params; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TLRPC.TL_dataJSON.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + bot.serializeToStream(stream); + stream.writeString(custom_method); + params.serializeToStream(stream); + } + } + + public static class getPopularAppBots extends TLObject { + public static final int constructor = 0xc2510192; + + public String offset; + public int limit; + + @Override + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return popularAppBots.TLdeserialize(stream, constructor, exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeString(offset); + stream.writeInt32(limit); + } + } + + public static class popularAppBots extends TLObject { + public static final int constructor = 0x1991b13b; + + public int flags; + public String next_offset; + public ArrayList<TLRPC.User> users = new ArrayList<>(); + + public static popularAppBots TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + if (popularAppBots.constructor != constructor) { + if (exception) { + throw new RuntimeException(String.format("can't parse magic %x in TL_bots_popularAppBots", constructor)); + } else { + return null; + } + } + popularAppBots result = new popularAppBots(); + result.readParams(stream, exception); + return result; + } + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + if ((flags & 1) != 0) { + next_offset = stream.readString(exception); + } + int magic = stream.readInt32(exception); + if (magic != 0x1cb5c415) { + if (exception) { + throw new RuntimeException(String.format("wrong Vector magic, got %x", magic)); + } + return; + } + int count = stream.readInt32(exception); + for (int a = 0; a < count; a++) { + TLRPC.User object = TLRPC.User.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + users.add(object); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + if ((flags & 1) != 0) { + stream.writeString(next_offset); + } + stream.writeInt32(0x1cb5c415); + int count = users.size(); + stream.writeInt32(count); + for (int i = 0; i < count; ++i) { + users.get(i).serializeToStream(stream); + } + } + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_stories.java b/TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_stories.java index 35670094d89..d7944390767 100644 --- a/TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_stories.java +++ b/TMessagesProj/src/main/java/org/telegram/tgnet/tl/TL_stories.java @@ -3120,13 +3120,21 @@ public static MediaArea TLdeserialize(AbstractSerializedData stream, int constru case TL_mediaAreaChannelPost.constructor: result = new TL_mediaAreaChannelPost(); break; - case TL_inputMediaAreaVenue.constructor: result = new TL_inputMediaAreaVenue(); break; case TL_inputMediaAreaChannelPost.constructor: result = new TL_inputMediaAreaChannelPost(); break; + case TL_mediaAreaWeather.constructor: + result = new TL_mediaAreaWeather(); + break; + case TL_mediaAreaWeatherOld.constructor: + result = new TL_mediaAreaWeatherOld(); + break; + case TL_mediaAreaWeather2.constructor: + result = new TL_mediaAreaWeather2(); + break; } if (result == null && exception) { throw new RuntimeException(String.format("can't parse magic %x in MediaArea", constructor)); @@ -3233,6 +3241,83 @@ public void serializeToStream(AbstractSerializedData stream) { } } + public static class TL_mediaAreaWeather2 extends MediaArea { + public static final int constructor = 0x855f223e; + + public String emoji; + public int temperature_c; + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + dark = (flags & 1) != 0; + coordinates = MediaAreaCoordinates.TLdeserialize(stream, stream.readInt32(exception), exception); + emoji = stream.readString(exception); + temperature_c = stream.readInt32(exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = dark ? flags | 1 : flags &~ 1; + stream.writeInt32(flags); + coordinates.serializeToStream(stream); + stream.writeString(emoji); + stream.writeInt32(temperature_c); + } + } + + public static class TL_mediaAreaWeather extends MediaArea { + public static final int constructor = 0x49a6549c; + + public String emoji; + public double temperature_c; + public int color; + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + coordinates = MediaAreaCoordinates.TLdeserialize(stream, stream.readInt32(exception), exception); + emoji = stream.readString(exception); + temperature_c = stream.readDouble(exception); + color = stream.readInt32(exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + coordinates.serializeToStream(stream); + stream.writeString(emoji); + stream.writeDouble(temperature_c); + stream.writeInt32(color); + } + } + + public static class TL_mediaAreaWeatherOld extends MediaArea { + public static final int constructor = 0x4386f849; + + public String emoji; + public double temperature_c; + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + dark = (flags & 1) != 0; + coordinates = MediaAreaCoordinates.TLdeserialize(stream, stream.readInt32(exception), exception); + emoji = stream.readString(exception); + temperature_c = stream.readDouble(exception); + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = dark ? flags | 1 : flags &~ 1; + stream.writeInt32(flags); + coordinates.serializeToStream(stream); + stream.writeString(emoji); + stream.writeDouble(temperature_c); + } + } + public static class TL_inputMediaAreaVenue extends MediaArea { public static final int constructor = 0xb282217f; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarLayout.java index cb33c51af31..cb68038b6a6 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarLayout.java @@ -27,6 +27,8 @@ import android.graphics.Path; import android.graphics.Rect; import android.graphics.RectF; +import android.graphics.RenderEffect; +import android.graphics.RuntimeShader; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Build; @@ -61,6 +63,9 @@ import org.telegram.messenger.SharedConfig; import org.telegram.messenger.Utilities; import org.telegram.ui.Components.BackButtonMenu; +import org.telegram.ui.Components.RLottieDrawable; +import org.telegram.ui.EmptyBaseFragment; +import org.telegram.ui.Stars.SuperRipple; import org.telegram.ui.bots.BotWebViewSheet; import org.telegram.ui.Components.Bulletin; import org.telegram.ui.Components.ChatAttachAlert; @@ -118,7 +123,12 @@ protected boolean drawChild(Canvas canvas, View child, long drawingTime) { if (!fragmentsStack.isEmpty()) { lastFragment = fragmentsStack.get(fragmentsStack.size() - 1); } - if (storyViewerAttached() && lastFragment != null && lastFragment.getLastSheet() != null && lastFragment.getLastSheet().isFullyVisible() && lastFragment.getLastSheet().getWindowView() != child) { + if (sheetFragment != null && sheetFragment.sheetsStack != null && !sheetFragment.sheetsStack.isEmpty()) { + lastFragment = sheetFragment; + } + BaseFragment.AttachedSheet lastSheet = null; + if (lastFragment != null) lastSheet = lastFragment.getLastSheet(); + if (lastSheet != null && lastSheet.isFullyVisible() && lastSheet.getWindowView() != child) { return true; } if (child instanceof ActionBar) { @@ -367,6 +377,11 @@ public void processMenuButtonsTouch(MotionEvent event) { } } + @Override + public boolean allowSwipe() { + return (sheetFragment == null || sheetFragment.getLastSheet() == null || !sheetFragment.getLastSheet().isShown()); + } + private static Drawable headerShadowDrawable; private static Drawable layerShadowDrawable; private static Paint scrimPaint; @@ -381,11 +396,36 @@ public void processMenuButtonsTouch(MotionEvent event) { private ColorDrawable previewBackgroundDrawable; public LayoutContainer containerView; - private LayoutContainer containerViewBack; + public LayoutContainer containerViewBack; + public LayoutContainer sheetContainer; private DrawerLayoutContainer drawerLayoutContainer; private ActionBar currentActionBar; private BottomSheetTabs bottomSheetTabs; + private EmptyBaseFragment sheetFragment; + public EmptyBaseFragment getSheetFragment() { + return getSheetFragment(true); + } + public EmptyBaseFragment getSheetFragment(boolean create) { + if (parentActivity == null) + return null; + if (sheetFragment == null) { + sheetFragment = new EmptyBaseFragment(); + sheetFragment.setParentLayout(this); + View fragmentView = sheetFragment.fragmentView; + if (fragmentView == null) { + fragmentView = sheetFragment.createView(parentActivity); + } + if (fragmentView.getParent() != sheetContainer) { + AndroidUtilities.removeFromParent(fragmentView); + sheetContainer.addView(fragmentView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + } + sheetFragment.onResume(); + sheetFragment.onBecomeFullyVisible(); + } + return sheetFragment; + } + private BaseFragment newFragment; private BaseFragment oldFragment; @@ -476,7 +516,7 @@ public ActionBarLayout(Context context, boolean main) { public void setFragmentStack(List<BaseFragment> stack) { this.fragmentsStack = stack; - FrameLayout.LayoutParams layoutParams; + LayoutParams layoutParams; if (main) { if (bottomSheetTabs != null) { AndroidUtilities.removeFromParent(bottomSheetTabs); @@ -484,7 +524,7 @@ public void setFragmentStack(List<BaseFragment> stack) { } bottomSheetTabs = new BottomSheetTabs(parentActivity, this); - layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dp(68 + 8)); + layoutParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dp(68 + 8)); layoutParams.gravity = Gravity.BOTTOM | Gravity.FILL_HORIZONTAL; addView(bottomSheetTabs, layoutParams); @@ -493,22 +533,40 @@ public void setFragmentStack(List<BaseFragment> stack) { } } + if (containerViewBack != null) { + AndroidUtilities.removeFromParent(containerViewBack); + } this.containerViewBack = new LayoutContainer(parentActivity); addView(containerViewBack); - layoutParams = (FrameLayout.LayoutParams) containerViewBack.getLayoutParams(); + layoutParams = (LayoutParams) containerViewBack.getLayoutParams(); layoutParams.width = LayoutHelper.MATCH_PARENT; layoutParams.height = LayoutHelper.MATCH_PARENT; layoutParams.gravity = Gravity.TOP | Gravity.LEFT; containerViewBack.setLayoutParams(layoutParams); + if (containerView != null) { + AndroidUtilities.removeFromParent(containerView); + } containerView = new LayoutContainer(parentActivity); addView(containerView); - layoutParams = (FrameLayout.LayoutParams) containerView.getLayoutParams(); + layoutParams = (LayoutParams) containerView.getLayoutParams(); layoutParams.width = LayoutHelper.MATCH_PARENT; layoutParams.height = LayoutHelper.MATCH_PARENT; layoutParams.gravity = Gravity.TOP | Gravity.LEFT; containerView.setLayoutParams(layoutParams); + if (sheetContainer != null) { + AndroidUtilities.removeFromParent(sheetContainer); + } + sheetContainer = new LayoutContainer(parentActivity); + addView(sheetContainer); + layoutParams = (LayoutParams) sheetContainer.getLayoutParams(); + layoutParams.width = LayoutHelper.MATCH_PARENT; + layoutParams.height = LayoutHelper.MATCH_PARENT; + layoutParams.gravity = Gravity.TOP | Gravity.LEFT; + sheetContainer.setLayoutParams(layoutParams); + + for (BaseFragment fragment : fragmentsStack) { fragment.setParentLayout(this); } @@ -728,6 +786,9 @@ public void onResume() { BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 1); lastFragment.onResume(); } + if (sheetFragment != null) { + sheetFragment.onResume(); + } } @Override @@ -736,6 +797,9 @@ public void onUserLeaveHint() { BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 1); lastFragment.onUserLeaveHint(); } + if (sheetFragment != null) { + sheetFragment.onUserLeaveHint(); + } } @Override @@ -744,6 +808,9 @@ public void onPause() { BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 1); lastFragment.onPause(); } + if (sheetFragment != null) { + sheetFragment.onPause(); + } } @Override @@ -951,6 +1018,9 @@ private void onSlideAnimationEnd(final boolean backAnimation) { containerView = containerViewBack; containerViewBack = temp; bringChildToFront(containerView); + if (sheetContainer != null) { + bringChildToFront(sheetContainer); + } lastFragment = fragmentsStack.get(fragmentsStack.size() - 1); currentActionBar = lastFragment.actionBar; @@ -1041,7 +1111,7 @@ private void prepareForMoving(MotionEvent ev) { @Override public boolean onTouchEvent(MotionEvent ev) { if (!checkTransitionAnimation() && !inActionMode && !animationInProgress) { - if (fragmentsStack.size() > 1) { + if (fragmentsStack.size() > 1 && allowSwipe()) { if (ev != null && ev.getAction() == MotionEvent.ACTION_DOWN) { BaseFragment currentFragment = fragmentsStack.get(fragmentsStack.size() - 1); if (!currentFragment.isSwipeBackEnabled(ev)) { @@ -1189,6 +1259,9 @@ public void onBackPressed() { currentActionBar.closeSearchField(); return; } + if (sheetFragment != null && !sheetFragment.onBackPressed()) { + return; + } BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 1); if (lastFragment.onBackPressed()) { if (!fragmentsStack.isEmpty()) { @@ -1340,7 +1413,18 @@ public void run() { Integer newNavigationBarColor = newFragment != null ? newFragment.getNavigationBarColor() : null; if (newFragment != null && oldNavigationBarColor != null) { float ratio = MathUtils.clamp(4f * animationProgress, 0f, 1f); - newFragment.setNavigationBarColor(ColorUtils.blendARGB(oldNavigationBarColor, newNavigationBarColor, ratio)); + int color = ColorUtils.blendARGB(oldNavigationBarColor, newNavigationBarColor, ratio); + if (sheetFragment != null) { + if (sheetFragment.sheetsStack != null) { + for (int i = 0; i < sheetFragment.sheetsStack.size(); ++i) { + BaseFragment.AttachedSheet sheet = sheetFragment.sheetsStack.get(i); + if (sheet.attachedToParent()) { + color = sheet.getNavigationBarColor(color); + } + } + } + } + newFragment.setNavigationBarColor(color); } float interpolated; if (preview) { @@ -1564,6 +1648,9 @@ public void getOutline(View view, Outline outline) { } bringChildToFront(containerView); + if (sheetContainer != null) { + bringChildToFront(sheetContainer); + } if (!needAnimation) { presentFragmentInternalRemoveOld(removeLast, currentFragment); if (backgroundView != null) { @@ -1884,6 +1971,9 @@ private void closeLastFragmentInternalRemoveOld(BaseFragment fragment) { containerViewBack.setVisibility(View.INVISIBLE); containerViewBack.setTranslationY(0); bringChildToFront(containerView); + if (sheetContainer != null) { + bringChildToFront(sheetContainer); + } onFragmentStackChanged("closeLastFragmentInternalRemoveOld"); } @@ -2817,11 +2907,17 @@ public int measureKeyboardHeight() { @Override public boolean dispatchTouchEvent(MotionEvent ev) { final boolean tabs = ev.getY() > getHeight() - getBottomTabsHeight(true); - if ( - getLastFragment() != null && - getLastFragment().getLastSheet() != null && - getLastFragment().getLastSheet().attachedToParent() - ) { + + BaseFragment.AttachedSheet lastSheet = null; + if (lastSheet == null && sheetFragment != null && sheetFragment.getLastSheet() != null) { + lastSheet = sheetFragment.getLastSheet(); + if (!lastSheet.attachedToParent() || lastSheet.getWindowView() == null) lastSheet = null; + } + if (lastSheet == null && getLastFragment() != null && getLastFragment().getLastSheet() != null) { + lastSheet = getLastFragment().getLastSheet(); + if (!lastSheet.attachedToParent() || lastSheet.getWindowView() == null) lastSheet = null; + } + if (lastSheet != null) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { tabsEvents = tabs; } @@ -2829,7 +2925,7 @@ public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_CANCEL) { tabsEvents = false; } - return getLastFragment().getLastSheet().getWindowView().dispatchTouchEvent(ev); + return lastSheet.getWindowView().dispatchTouchEvent(ev); } } if (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_CANCEL) { @@ -2885,6 +2981,7 @@ public void updateBottomTabsVisibility(boolean animated) { requestLayout(); containerView.requestLayout(); containerViewBack.requestLayout(); + sheetContainer.requestLayout(); if (animated) { bottomTabsAnimator = ValueAnimator.ofFloat(bottomTabsProgress, bottomTabsHeight); bottomTabsAnimator.addUpdateListener(anm -> { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenuSubItem.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenuSubItem.java index 69b74d6ad5f..dd9a24747b8 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenuSubItem.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenuSubItem.java @@ -25,7 +25,7 @@ public class ActionBarMenuSubItem extends FrameLayout { private TextView textView; - private TextView subtextView; + public TextView subtextView; public RLottieImageView imageView; private boolean checkViewLeft; private CheckBox2 checkView; @@ -237,7 +237,9 @@ public void setText(CharSequence text) { } public void setSubtextColor(int color) { - subtextView.setTextColor(color); + if (subtextView != null) { + subtextView.setTextColor(color); + } } public void setSubtext(String text) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/AlertDialog.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/AlertDialog.java index 96ce38829c9..7b7b389c510 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/AlertDialog.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/AlertDialog.java @@ -298,6 +298,7 @@ public AlertDialog(Context context, int progressStyle, Theme.ResourcesProvider r @Override public void show() { if (!AndroidUtilities.isSafeToShow(getContext())) return; + dismissed = false; super.show(); if (progressViewContainer != null && progressViewStyle == ALERT_TYPE_SPINNER) { progressViewContainer.setScaleX(0); @@ -311,275 +312,285 @@ public void show() { shownAt = System.currentTimeMillis(); } - protected View inflateContent(boolean setContent) { - LinearLayout containerView = new LinearLayout(getContext()) { + public class AlertDialogView extends LinearLayout { + public AlertDialogView(Context context) { + super(context); + } - private boolean inLayout; + private boolean inLayout; - @Override - public boolean onTouchEvent(MotionEvent event) { - if (progressViewStyle == ALERT_TYPE_SPINNER) { - showCancelAlert(); - return false; - } - return super.onTouchEvent(event); + @Override + public boolean onTouchEvent(MotionEvent event) { + if (progressViewStyle == ALERT_TYPE_SPINNER) { + showCancelAlert(); + return false; } + return super.onTouchEvent(event); + } - @Override - public boolean onInterceptTouchEvent(MotionEvent ev) { - if (progressViewStyle == ALERT_TYPE_SPINNER) { - showCancelAlert(); - return false; - } - return super.onInterceptTouchEvent(ev); + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + if (progressViewStyle == ALERT_TYPE_SPINNER) { + showCancelAlert(); + return false; } + return super.onInterceptTouchEvent(ev); + } - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - if (progressViewStyle == ALERT_TYPE_SPINNER) { - progressViewContainer.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(86), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(86), MeasureSpec.EXACTLY)); - setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.getSize(heightMeasureSpec)); - } else { - inLayout = true; - int width = MeasureSpec.getSize(widthMeasureSpec); - int height = MeasureSpec.getSize(heightMeasureSpec); - - if (customWidth > 0) { - width = customWidth + backgroundPaddings.left + backgroundPaddings.right; - } - - int maxContentHeight; - int availableHeight = maxContentHeight = height - getPaddingTop() - getPaddingBottom(); - int availableWidth = width - getPaddingLeft() - getPaddingRight(); + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + if (progressViewStyle == ALERT_TYPE_SPINNER) { + progressViewContainer.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(86), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(86), MeasureSpec.EXACTLY)); + setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.getSize(heightMeasureSpec)); + } else { + inLayout = true; + int width = MeasureSpec.getSize(widthMeasureSpec); + int height = MeasureSpec.getSize(heightMeasureSpec); - int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(availableWidth - AndroidUtilities.dp(48), MeasureSpec.EXACTLY); - int childFullWidthMeasureSpec = MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.EXACTLY); - LayoutParams layoutParams; + if (customWidth > 0) { + width = customWidth + backgroundPaddings.left + backgroundPaddings.right; + } - if (buttonsLayout != null) { - int count = buttonsLayout.getChildCount(); - for (int a = 0; a < count; a++) { - View child = buttonsLayout.getChildAt(a); - if (child instanceof TextView) { - TextView button = (TextView) child; - button.setMaxWidth(AndroidUtilities.dp((availableWidth - AndroidUtilities.dp(24)) / 2)); - } + int maxContentHeight; + int availableHeight = maxContentHeight = height - getPaddingTop() - getPaddingBottom(); + int availableWidth = width - getPaddingLeft() - getPaddingRight(); + + int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(availableWidth - AndroidUtilities.dp(48), MeasureSpec.EXACTLY); + int childFullWidthMeasureSpec = MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.EXACTLY); + LayoutParams layoutParams; + + if (buttonsLayout != null) { + int count = buttonsLayout.getChildCount(); + for (int a = 0; a < count; a++) { + View child = buttonsLayout.getChildAt(a); + if (child instanceof TextView) { + TextView button = (TextView) child; + button.setMaxWidth(AndroidUtilities.dp((availableWidth - AndroidUtilities.dp(24)) / 2)); } - buttonsLayout.measure(childFullWidthMeasureSpec, heightMeasureSpec); - layoutParams = (LayoutParams) buttonsLayout.getLayoutParams(); - availableHeight -= buttonsLayout.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; } + buttonsLayout.measure(childFullWidthMeasureSpec, heightMeasureSpec); + layoutParams = (LayoutParams) buttonsLayout.getLayoutParams(); + availableHeight -= buttonsLayout.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; + } + if (secondTitleTextView != null) { + secondTitleTextView.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(childWidthMeasureSpec), MeasureSpec.AT_MOST), heightMeasureSpec); + } + if (titleTextView != null) { if (secondTitleTextView != null) { - secondTitleTextView.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(childWidthMeasureSpec), MeasureSpec.AT_MOST), heightMeasureSpec); - } - if (titleTextView != null) { - if (secondTitleTextView != null) { - titleTextView.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(childWidthMeasureSpec) - secondTitleTextView.getMeasuredWidth() - AndroidUtilities.dp(8), MeasureSpec.EXACTLY), heightMeasureSpec); - } else { - titleTextView.measure(childWidthMeasureSpec, heightMeasureSpec); - } - } - if (titleContainer != null) { - titleContainer.measure(childWidthMeasureSpec, heightMeasureSpec); - layoutParams = (LayoutParams) titleContainer.getLayoutParams(); - availableHeight -= titleContainer.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; - } - if (subtitleTextView != null) { - subtitleTextView.measure(childWidthMeasureSpec, heightMeasureSpec); - layoutParams = (LayoutParams) subtitleTextView.getLayoutParams(); - availableHeight -= subtitleTextView.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; + titleTextView.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(childWidthMeasureSpec) - secondTitleTextView.getMeasuredWidth() - AndroidUtilities.dp(8), MeasureSpec.EXACTLY), heightMeasureSpec); + } else { + titleTextView.measure(childWidthMeasureSpec, heightMeasureSpec); } - if (topImageView != null) { - topImageView.measure(MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(topHeight), MeasureSpec.EXACTLY)); - availableHeight -= topImageView.getMeasuredHeight(); + } + if (titleContainer != null) { + titleContainer.measure(childWidthMeasureSpec, heightMeasureSpec); + layoutParams = (LayoutParams) titleContainer.getLayoutParams(); + availableHeight -= titleContainer.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; + } + if (subtitleTextView != null) { + subtitleTextView.measure(childWidthMeasureSpec, heightMeasureSpec); + layoutParams = (LayoutParams) subtitleTextView.getLayoutParams(); + availableHeight -= subtitleTextView.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; + } + if (topImageView != null) { + topImageView.measure(MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(topHeight), MeasureSpec.EXACTLY)); + availableHeight -= topImageView.getMeasuredHeight(); + } + if (topView != null) { + int w = width; + int h; + if (aspectRatio == 0) { + float scale = w / 936.0f; + h = (int) (354 * scale); + } else { + h = (int) (w * aspectRatio); } - if (topView != null) { - int w = width; - int h; - if (aspectRatio == 0) { - float scale = w / 936.0f; - h = (int) (354 * scale); - } else { - h = (int) (w * aspectRatio); - } - topView.measure(MeasureSpec.makeMeasureSpec(w, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY)); - topView.getLayoutParams().height = h; - availableHeight -= topView.getMeasuredHeight(); + topView.measure(MeasureSpec.makeMeasureSpec(w, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY)); + topView.getLayoutParams().height = h; + availableHeight -= topView.getMeasuredHeight(); + } + if (progressViewStyle == ALERT_TYPE_MESSAGE) { + layoutParams = (LayoutParams) contentScrollView.getLayoutParams(); + + if (customView != null) { + layoutParams.topMargin = titleTextView == null && messageTextView.getVisibility() == GONE && items == null ? AndroidUtilities.dp(16) : 0; + layoutParams.bottomMargin = buttonsLayout == null ? AndroidUtilities.dp(8) : 0; + } else if (items != null) { + layoutParams.topMargin = titleTextView == null && messageTextView.getVisibility() == GONE ? AndroidUtilities.dp(8) : 0; + layoutParams.bottomMargin = AndroidUtilities.dp(8); + } else if (messageTextView.getVisibility() == VISIBLE) { + layoutParams.topMargin = titleTextView == null ? AndroidUtilities.dp(19) : 0; + layoutParams.bottomMargin = AndroidUtilities.dp(20); } - if (progressViewStyle == ALERT_TYPE_MESSAGE) { - layoutParams = (LayoutParams) contentScrollView.getLayoutParams(); - - if (customView != null) { - layoutParams.topMargin = titleTextView == null && messageTextView.getVisibility() == GONE && items == null ? AndroidUtilities.dp(16) : 0; - layoutParams.bottomMargin = buttonsLayout == null ? AndroidUtilities.dp(8) : 0; - } else if (items != null) { - layoutParams.topMargin = titleTextView == null && messageTextView.getVisibility() == GONE ? AndroidUtilities.dp(8) : 0; - layoutParams.bottomMargin = AndroidUtilities.dp(8); - } else if (messageTextView.getVisibility() == VISIBLE) { - layoutParams.topMargin = titleTextView == null ? AndroidUtilities.dp(19) : 0; - layoutParams.bottomMargin = AndroidUtilities.dp(20); - } - availableHeight -= layoutParams.bottomMargin + layoutParams.topMargin; - contentScrollView.measure(childFullWidthMeasureSpec, MeasureSpec.makeMeasureSpec(availableHeight, MeasureSpec.AT_MOST)); - availableHeight -= contentScrollView.getMeasuredHeight(); - } else { - if (progressViewContainer != null) { - progressViewContainer.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(availableHeight, MeasureSpec.AT_MOST)); - layoutParams = (LayoutParams) progressViewContainer.getLayoutParams(); - availableHeight -= progressViewContainer.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; - } else if (messageTextView != null) { - messageTextView.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(availableHeight, MeasureSpec.AT_MOST)); - if (messageTextView.getVisibility() != GONE) { - layoutParams = (LayoutParams) messageTextView.getLayoutParams(); - availableHeight -= messageTextView.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; - } - } - if (lineProgressView != null) { - lineProgressView.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(4), MeasureSpec.EXACTLY)); - layoutParams = (LayoutParams) lineProgressView.getLayoutParams(); - availableHeight -= lineProgressView.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; - - lineProgressViewPercent.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(availableHeight, MeasureSpec.AT_MOST)); - layoutParams = (LayoutParams) lineProgressViewPercent.getLayoutParams(); - availableHeight -= lineProgressViewPercent.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; + availableHeight -= layoutParams.bottomMargin + layoutParams.topMargin; + contentScrollView.measure(childFullWidthMeasureSpec, MeasureSpec.makeMeasureSpec(availableHeight, MeasureSpec.AT_MOST)); + availableHeight -= contentScrollView.getMeasuredHeight(); + } else { + if (progressViewContainer != null) { + progressViewContainer.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(availableHeight, MeasureSpec.AT_MOST)); + layoutParams = (LayoutParams) progressViewContainer.getLayoutParams(); + availableHeight -= progressViewContainer.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; + } else if (messageTextView != null) { + messageTextView.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(availableHeight, MeasureSpec.AT_MOST)); + if (messageTextView.getVisibility() != GONE) { + layoutParams = (LayoutParams) messageTextView.getLayoutParams(); + availableHeight -= messageTextView.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; } } + if (lineProgressView != null) { + lineProgressView.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(4), MeasureSpec.EXACTLY)); + layoutParams = (LayoutParams) lineProgressView.getLayoutParams(); + availableHeight -= lineProgressView.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; + + lineProgressViewPercent.measure(childWidthMeasureSpec, MeasureSpec.makeMeasureSpec(availableHeight, MeasureSpec.AT_MOST)); + layoutParams = (LayoutParams) lineProgressViewPercent.getLayoutParams(); + availableHeight -= lineProgressViewPercent.getMeasuredHeight() + layoutParams.bottomMargin + layoutParams.topMargin; + } + } - setMeasuredDimension(width, maxContentHeight - availableHeight + getPaddingTop() + getPaddingBottom() - (topAnimationIsNew ? AndroidUtilities.dp(8) : 0)); - inLayout = false; - - if (lastScreenWidth != AndroidUtilities.displaySize.x) { - AndroidUtilities.runOnUIThread(() -> { - lastScreenWidth = AndroidUtilities.displaySize.x; - final int calculatedWidth = AndroidUtilities.displaySize.x - AndroidUtilities.dp(56); - int maxWidth; - if (AndroidUtilities.isTablet()) { - if (AndroidUtilities.isSmallTablet()) { - maxWidth = AndroidUtilities.dp(446); - } else { - maxWidth = AndroidUtilities.dp(496); - } + setMeasuredDimension(width, maxContentHeight - availableHeight + getPaddingTop() + getPaddingBottom() - (topAnimationIsNew ? AndroidUtilities.dp(8) : 0)); + inLayout = false; + + if (lastScreenWidth != AndroidUtilities.displaySize.x) { + AndroidUtilities.runOnUIThread(() -> { + lastScreenWidth = AndroidUtilities.displaySize.x; + final int calculatedWidth = AndroidUtilities.displaySize.x - AndroidUtilities.dp(56); + int maxWidth; + if (AndroidUtilities.isTablet()) { + if (AndroidUtilities.isSmallTablet()) { + maxWidth = AndroidUtilities.dp(446); } else { - maxWidth = AndroidUtilities.dp(356); + maxWidth = AndroidUtilities.dp(496); } + } else { + maxWidth = AndroidUtilities.dp(356); + } - Window window = getWindow(); - WindowManager.LayoutParams params = new WindowManager.LayoutParams(); - params.copyFrom(window.getAttributes()); - params.width = Math.min(maxWidth, calculatedWidth) + backgroundPaddings.left + backgroundPaddings.right; - try { - window.setAttributes(params); - } catch (Throwable e) { - FileLog.e(e); - } - }); - } + Window window = getWindow(); + WindowManager.LayoutParams params = new WindowManager.LayoutParams(); + params.copyFrom(window.getAttributes()); + params.width = Math.min(maxWidth, calculatedWidth) + backgroundPaddings.left + backgroundPaddings.right; + try { + window.setAttributes(params); + } catch (Throwable e) { + FileLog.e(e); + } + }); } } + } - @Override - protected void onLayout(boolean changed, int l, int t, int r, int b) { - super.onLayout(changed, l, t, r, b); - if (progressViewStyle == ALERT_TYPE_SPINNER) { - int x = (r - l - progressViewContainer.getMeasuredWidth()) / 2; - int y = (b - t - progressViewContainer.getMeasuredHeight()) / 2; - progressViewContainer.layout(x, y, x + progressViewContainer.getMeasuredWidth(), y + progressViewContainer.getMeasuredHeight()); - } else if (contentScrollView != null) { - if (onScrollChangedListener == null) { - onScrollChangedListener = () -> { - runShadowAnimation(0, titleTextView != null && contentScrollView.getScrollY() > scrollContainer.getTop()); - runShadowAnimation(1, buttonsLayout != null && contentScrollView.getScrollY() + contentScrollView.getHeight() < scrollContainer.getBottom()); - contentScrollView.invalidate(); - }; - contentScrollView.getViewTreeObserver().addOnScrollChangedListener(onScrollChangedListener); - } - onScrollChangedListener.onScrollChanged(); - } - - getLocationOnScreen(containerViewLocation); - if (blurMatrix != null && blurShader != null) { - blurMatrix.reset(); - blurMatrix.postScale(8f, 8f); - blurMatrix.postTranslate(-containerViewLocation[0], -containerViewLocation[1]); - blurShader.setLocalMatrix(blurMatrix); + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + if (progressViewStyle == ALERT_TYPE_SPINNER) { + int x = (r - l - progressViewContainer.getMeasuredWidth()) / 2; + int y = (b - t - progressViewContainer.getMeasuredHeight()) / 2; + progressViewContainer.layout(x, y, x + progressViewContainer.getMeasuredWidth(), y + progressViewContainer.getMeasuredHeight()); + } else if (contentScrollView != null) { + if (onScrollChangedListener == null) { + onScrollChangedListener = () -> { + runShadowAnimation(0, titleTextView != null && contentScrollView.getScrollY() > scrollContainer.getTop()); + runShadowAnimation(1, buttonsLayout != null && contentScrollView.getScrollY() + contentScrollView.getHeight() < scrollContainer.getBottom()); + contentScrollView.invalidate(); + }; + contentScrollView.getViewTreeObserver().addOnScrollChangedListener(onScrollChangedListener); } + onScrollChangedListener.onScrollChanged(); } - @Override - public void requestLayout() { - if (inLayout) { - return; - } - super.requestLayout(); + getLocationOnScreen(containerViewLocation); + if (blurMatrix != null && blurShader != null) { + blurMatrix.reset(); + blurMatrix.postScale(8f, 8f); + blurMatrix.postTranslate(-containerViewLocation[0], -containerViewLocation[1]); + blurShader.setLocalMatrix(blurMatrix); } + } - @Override - public boolean hasOverlappingRendering() { - return false; + @Override + public void requestLayout() { + if (inLayout) { + return; } + super.requestLayout(); + } + + @Override + public boolean hasOverlappingRendering() { + return false; + } + + private AnimatedFloat blurPaintAlpha = new AnimatedFloat(0, this); + private Paint backgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - private AnimatedFloat blurPaintAlpha = new AnimatedFloat(0, this); - private Paint backgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - - @Override - public void draw(Canvas canvas) { - if (blurredBackground && !blurredNativeBackground) { - float r; - if (progressViewStyle == ALERT_TYPE_SPINNER && progressViewContainer != null) { - r = AndroidUtilities.dp(18); - float w = progressViewContainer.getWidth() * progressViewContainer.getScaleX(); - float h = progressViewContainer.getHeight() * progressViewContainer.getScaleY(); - AndroidUtilities.rectTmp.set( + @Override + public void draw(Canvas canvas) { + if (blurredBackground && !blurredNativeBackground) { + float r; + if (progressViewStyle == ALERT_TYPE_SPINNER && progressViewContainer != null) { + r = AndroidUtilities.dp(18); + float w = progressViewContainer.getWidth() * progressViewContainer.getScaleX(); + float h = progressViewContainer.getHeight() * progressViewContainer.getScaleY(); + AndroidUtilities.rectTmp.set( (getWidth() - w) / 2f, (getHeight() - h) / 2f, (getWidth() + w) / 2f, (getHeight() + h) / 2f - ); - } else { - r = AndroidUtilities.dp(10); - AndroidUtilities.rectTmp.set(getPaddingLeft(), getPaddingTop(), getMeasuredWidth() - getPaddingRight(), getMeasuredHeight() - getPaddingBottom()); - } - - // draw blur of background - float blurAlpha = blurPaintAlpha.set(blurPaint != null ? 1f : 0f); - if (blurPaint != null) { - blurPaint.setAlpha((int) (0xFF * blurAlpha)); - canvas.drawRoundRect(AndroidUtilities.rectTmp, r, r, blurPaint); - } + ); + } else { + r = AndroidUtilities.dp(10); + AndroidUtilities.rectTmp.set(getPaddingLeft(), getPaddingTop(), getMeasuredWidth() - getPaddingRight(), getMeasuredHeight() - getPaddingBottom()); + } - // draw dim above blur - if (dimBlurPaint == null) { - dimBlurPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - dimBlurPaint.setColor(ColorUtils.setAlphaComponent(0xff000000, (int) (0xFF * dimAlpha))); - } - canvas.drawRoundRect(AndroidUtilities.rectTmp, r, r, dimBlurPaint); + // draw blur of background + float blurAlpha = blurPaintAlpha.set(blurPaint != null ? 1f : 0f); + if (blurPaint != null) { + blurPaint.setAlpha((int) (0xFF * blurAlpha)); + canvas.drawRoundRect(AndroidUtilities.rectTmp, r, r, blurPaint); + } - // draw background - backgroundPaint.setColor(backgroundColor); - backgroundPaint.setAlpha((int) (backgroundPaint.getAlpha() * (blurAlpha * (blurOpacity - 1f) + 1f))); - canvas.drawRoundRect(AndroidUtilities.rectTmp, r, r, backgroundPaint); + // draw dim above blur + if (dimBlurPaint == null) { + dimBlurPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + dimBlurPaint.setColor(ColorUtils.setAlphaComponent(0xff000000, (int) (0xFF * dimAlpha))); } - super.draw(canvas); + canvas.drawRoundRect(AndroidUtilities.rectTmp, r, r, dimBlurPaint); + + // draw background + backgroundPaint.setColor(backgroundColor); + backgroundPaint.setAlpha((int) (backgroundPaint.getAlpha() * (blurAlpha * (blurOpacity - 1f) + 1f))); + canvas.drawRoundRect(AndroidUtilities.rectTmp, r, r, backgroundPaint); } + super.draw(canvas); + } - @Override - protected void dispatchDraw(Canvas canvas) { - if (drawBackground && !blurredBackground) { - shadowDrawable.setBounds(0, 0, getMeasuredWidth(), getMeasuredHeight()); - if (topView != null && notDrawBackgroundOnTopView) { - int clipTop = topView.getBottom(); - canvas.save(); - canvas.clipRect(0, clipTop, getMeasuredWidth(), getMeasuredHeight()); - shadowDrawable.draw(canvas); - canvas.restore(); - } else { - shadowDrawable.draw(canvas); - } + @Override + protected void dispatchDraw(Canvas canvas) { + if (drawBackground && !blurredBackground) { + shadowDrawable.setBounds(0, 0, getMeasuredWidth(), getMeasuredHeight()); + if (topView != null && notDrawBackgroundOnTopView) { + int clipTop = topView.getBottom(); + canvas.save(); + canvas.clipRect(0, clipTop, getMeasuredWidth(), getMeasuredHeight()); + shadowDrawable.draw(canvas); + canvas.restore(); + } else { + shadowDrawable.draw(canvas); } - super.dispatchDraw(canvas); } - }; + super.dispatchDraw(canvas); + } + } + + private AlertDialogView containerView; + public AlertDialogView getContainerView() { + return containerView; + } + + protected View inflateContent(boolean setContent) { + containerView = new AlertDialogView(getContext()); containerView.setOrientation(LinearLayout.VERTICAL); if ((blurredBackground || progressViewStyle == ALERT_TYPE_SPINNER) && progressViewStyle != ALERT_TYPE_LOADING) { containerView.setBackgroundDrawable(null); @@ -1320,6 +1331,11 @@ public void dismissUnless(long minDuration) { } } + private boolean dismissed; + public boolean isDismissed() { + return dismissed; + } + @Override public void dismiss() { if (overridenDissmissListener != null) { @@ -1328,6 +1344,8 @@ public void dismiss() { listener.run(this::dismiss); return; } + if (dismissed) return; + dismissed = true; NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.emojiLoaded); if (onDismissListener != null) { onDismissListener.onDismiss(this); @@ -1681,8 +1699,24 @@ public AlertDialog create() { return alertDialog; } + private final boolean[] red = new boolean[3]; + public Builder makeRed(int button) { + int index = (-button) - 1; + if (index >= 0 && index < red.length) { + red[index] = true; + } + return this; + } + public AlertDialog show() { alertDialog.show(); + for (int i = 0; i < red.length; i++) { + if (!red[i]) continue; + TextView button = (TextView) alertDialog.getButton(-(i + 1)); + if (button != null) { + button.setTextColor(alertDialog.getThemedColor(Theme.key_text_RedBold)); + } + } return alertDialog; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BackDrawable.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BackDrawable.java index bfe7df8d9f3..314e2776a3a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BackDrawable.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BackDrawable.java @@ -39,6 +39,10 @@ public class BackDrawable extends Drawable { private boolean rotated = true; private int arrowRotation; + public float getRotation() { + return finalRotation; + } + public BackDrawable(boolean close) { super(); paint.setStrokeWidth(AndroidUtilities.dp(2)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BaseFragment.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BaseFragment.java index 9b3a90d43be..95ccde75e6f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BaseFragment.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BaseFragment.java @@ -53,6 +53,7 @@ import org.telegram.messenger.SendMessagesHelper; import org.telegram.messenger.UserConfig; import org.telegram.tgnet.ConnectionsManager; +import org.telegram.ui.ArticleViewer; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.LaunchActivity; import org.telegram.ui.Stories.StoryViewer; @@ -83,6 +84,7 @@ public abstract class BaseFragment { private boolean removingFromStack; private PreviewDelegate previewDelegate; protected Theme.ResourcesProvider resourceProvider; + private boolean isFullyVisible; // public ArrayList<StoryViewer> storyViewerStack; // public ArrayList<BotWebViewAttachedSheet> botsStack; // @@ -99,14 +101,17 @@ public static interface AttachedSheet { public boolean attachedToParent(); - public boolean onBackPressed(); + public boolean onAttachedBackPressed(); public boolean showDialog(Dialog dialog); public void setKeyboardHeightFromParent(int keyboardHeight); + public boolean isAttachedLightStatusBar(); public int getNavigationBarColor(int color); public void setOnDismissListener(Runnable onDismiss); + + default void setLastVisible(boolean lastVisible) {}; } public static interface AttachedSheetWindow {} @@ -142,6 +147,24 @@ public boolean hasSheet() { return sheetsStack != null && !sheetsStack.isEmpty(); } + public boolean hasShownSheet() { + if (!hasSheet()) return false; + for (int i = sheetsStack.size() - 1; i >= 0; --i) { + if (sheetsStack.get(i).isShown()) { + return true; + } + } + return false; + } + + public static boolean hasSheets(BaseFragment fragment) { + if (fragment == null) return false; + if (fragment.hasShownSheet()) return true; + if (!(fragment.getParentLayout() instanceof ActionBarLayout)) return false; + final BaseFragment sheetFragment = ((ActionBarLayout) fragment.getParentLayout()).getSheetFragment(false); + return sheetFragment != null && sheetFragment.hasShownSheet(); + } + public void clearSheets() { if (sheetsStack == null || sheetsStack.isEmpty()) return; @@ -286,7 +309,9 @@ public void clearViews() { } public void onRemoveFromParent() { - clearSheets(); + if (sheetsStack == null || sheetsStack.isEmpty()) + return; + updateSheetsVisibility(); } public void setParentFragment(BaseFragment fragment) { @@ -425,6 +450,15 @@ public void onFragmentDestroy() { if (hasForceLightStatusBar() && !AndroidUtilities.isTablet() && getParentLayout().getLastFragment() == this && getParentActivity() != null && !finishing) { AndroidUtilities.setLightStatusBar(getParentActivity().getWindow(), Theme.getColor(Theme.key_actionBarDefault) == Color.WHITE); } + + if (sheetsStack != null) { + for (int i = sheetsStack.size() - 1; i >= 0; --i) { + AttachedSheet sheet = sheetsStack.get(i); + sheet.setLastVisible(false); + sheet.dismiss(true); + sheetsStack.remove(i); + } + } } public boolean needDelayOpenAnimation() { @@ -509,7 +543,7 @@ public boolean closeSheet() { if (sheetsStack != null) { for (int i = sheetsStack.size() - 1; i >= 0; --i) { if (sheetsStack.get(i).isShown()) { - return sheetsStack.get(i).onBackPressed(); + return sheetsStack.get(i).onAttachedBackPressed(); } } } @@ -656,6 +690,7 @@ public void onTransitionAnimationEnd(boolean isOpen, boolean backward) { } public void onBecomeFullyVisible() { + isFullyVisible = true; AccessibilityManager mgr = (AccessibilityManager) ApplicationLoader.applicationContext.getSystemService(Context.ACCESSIBILITY_SERVICE); if (mgr.isEnabled()) { ActionBar actionBar = getActionBar(); @@ -671,6 +706,15 @@ public void onBecomeFullyVisible() { fullyVisibleListener = null; c.run(); } + updateSheetsVisibility(); + } + + private void updateSheetsVisibility() { + if (sheetsStack == null) return; + for (int i = 0; i < sheetsStack.size(); ++i) { + AttachedSheet sheet = sheetsStack.get(i); + sheet.setLastVisible(i == sheetsStack.size() - 1 && isFullyVisible); + } } private Runnable fullyVisibleListener; @@ -683,7 +727,8 @@ public int getPreviewHeight() { } public void onBecomeFullyHidden() { - + isFullyVisible = false; + updateSheetsVisibility(); } public AnimatorSet onCustomTransitionAnimation(boolean isOpen, Runnable callback) { @@ -1191,10 +1236,29 @@ public StoryViewer getOrCreateStoryViewer() { storyViewer.fromBottomSheet = true; } sheetsStack.add(storyViewer); + updateSheetsVisibility(); } return storyViewer; } + public void removeSheet(BaseFragment.AttachedSheet sheet) { + if (sheetsStack == null) return; + sheetsStack.remove(sheet); + updateSheetsVisibility(); + } + + public void addSheet(BaseFragment.AttachedSheet sheet) { + if (sheetsStack == null) { + sheetsStack = new ArrayList<>(); + } + StoryViewer storyViewer = getLastStoryViewer(); + if (storyViewer != null) { + storyViewer.listenToAttachedSheet(sheet); + } + sheetsStack.add(sheet); + updateSheetsVisibility(); + } + public StoryViewer createOverlayStoryViewer() { if (sheetsStack == null) { sheetsStack = new ArrayList<>(); @@ -1204,19 +1268,39 @@ public StoryViewer createOverlayStoryViewer() { storyViewer.fromBottomSheet = true; } sheetsStack.add(storyViewer); + updateSheetsVisibility(); return storyViewer; } - public BotWebViewAttachedSheet createBotViewer() { + public ArticleViewer createArticleViewer(boolean forceRecreate) { if (sheetsStack == null) { sheetsStack = new ArrayList<>(); } - BotWebViewAttachedSheet botViewer = new BotWebViewAttachedSheet(this); - StoryViewer storyViewer = getLastStoryViewer(); - if (storyViewer != null) { - storyViewer.listenToAttachedSheet(botViewer); + if (!forceRecreate) { + if (getLastSheet() instanceof ArticleViewer.Sheet && getLastSheet().isShown()) { + return ((ArticleViewer.Sheet) getLastSheet()).getArticleViewer(); + } + if ( + parentLayout instanceof ActionBarLayout && + ((ActionBarLayout) parentLayout).getSheetFragment(false) != null && + ((ActionBarLayout) parentLayout).getSheetFragment(false).getLastSheet() instanceof ArticleViewer.Sheet + ) { + ArticleViewer.Sheet lastSheet = (ArticleViewer.Sheet) ((ActionBarLayout) parentLayout).getSheetFragment(false).getLastSheet(); + if (lastSheet.isShown()) { + return lastSheet.getArticleViewer(); + } + } } - sheetsStack.add(botViewer); + ArticleViewer articleViewer = ArticleViewer.makeSheet(this); + addSheet(articleViewer.sheet); + BottomSheetTabDialog.checkSheet(articleViewer.sheet); + return articleViewer; + } + + public BotWebViewAttachedSheet createBotViewer() { + BotWebViewAttachedSheet botViewer = new BotWebViewAttachedSheet(this); + addSheet(botViewer); + BottomSheetTabDialog.checkSheet(botViewer); return botViewer; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheet.java index 442d531793d..dcc5a4ea2c7 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheet.java @@ -30,6 +30,7 @@ import android.os.Build; import android.os.Bundle; import android.text.TextUtils; +import android.util.Log; import android.util.TypedValue; import android.view.Gravity; import android.view.KeyEvent; @@ -43,12 +44,15 @@ import android.view.WindowManager; import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.Interpolator; +import android.view.inputmethod.InputMethodManager; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; +import androidx.core.graphics.ColorUtils; import androidx.core.view.NestedScrollingParent; import androidx.core.view.NestedScrollingParentHelper; import androidx.core.view.ViewCompat; @@ -60,15 +64,17 @@ import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.R; import org.telegram.messenger.UserConfig; +import org.telegram.messenger.Utilities; import org.telegram.messenger.camera.CameraView; import org.telegram.ui.Components.AnimationProperties; import org.telegram.ui.Components.Bulletin; import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.LaunchActivity; import java.util.ArrayList; -public class BottomSheet extends Dialog { +public class BottomSheet extends Dialog implements BaseFragment.AttachedSheet { private final static boolean AVOID_SYSTEM_CUTOUT_FULLSCREEN = false; protected int currentAccount = UserConfig.selectedAccount; @@ -382,7 +388,7 @@ public boolean processTouchEvent(MotionEvent ev, boolean intercept) { container.invalidate(); } } else if (ev == null || ev.getPointerId(0) == startedTrackingPointerId && (ev.getAction() == MotionEvent.ACTION_CANCEL || ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_POINTER_UP)) { - containerView.setTranslationX(0); +// containerView.setTranslationX(0); if (velocityTracker == null) { velocityTracker = VelocityTracker.obtain(); } @@ -394,13 +400,15 @@ public boolean processTouchEvent(MotionEvent ev, boolean intercept) { ValueAnimator animator = ValueAnimator.ofFloat(swipeBackX, 0); animator.addUpdateListener(animation -> { swipeBackX = (float) animation.getAnimatedValue(); - setTranslationX(swipeBackX); + containerView.setTranslationX(swipeBackX); + container.invalidate(); }); animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { swipeBackX = 0; - setTranslationX(0); + containerView.setTranslationX(0); + container.invalidate(); } }); animator.setInterpolator(CubicBezierInterpolator.DEFAULT); @@ -410,18 +418,30 @@ public void onAnimationEnd(Animator animation) { ValueAnimator animator = ValueAnimator.ofFloat(swipeBackX, getMeasuredWidth()); animator.addUpdateListener(animation -> { swipeBackX = (float) animation.getAnimatedValue(); - setTranslationX(swipeBackX); + containerView.setTranslationX(swipeBackX); + container.invalidate(); }); animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { skipDismissAnimation = true; + containerView.setTranslationX(getMeasuredWidth()); dismiss(); + container.invalidate(); } }); - animator.setInterpolator(CubicBezierInterpolator.DEFAULT); - animator.setDuration(150); + animator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + animator.setDuration(320); animator.start(); + + ValueAnimator dimAnimator = ValueAnimator.ofFloat(1f, 0f); + dimAnimator.addUpdateListener(animation -> { + final float t = (float) animation.getAnimatedValue(); + backDrawable.setAlpha(dimBehind ? (int) (dimBehindAlpha * t) : 0); + }); + dimAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + dimAnimator.setDuration(320); + dimAnimator.start(); } maybeStartTracking = false; startedTracking = false; @@ -1104,7 +1124,7 @@ protected void onDetachedFromWindow() { Bulletin.removeDelegate(this); } }; - container.setBackgroundDrawable(backDrawable); + container.setBackground(backDrawable); focusable = needFocus; if (Build.VERSION.SDK_INT >= 21) { container.setFitsSystemWindows(true); @@ -1155,10 +1175,32 @@ public void fixNavigationBar(int bgColor) { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + onCreateInternal(); + } - Window window = getWindow(); - window.setWindowAnimations(R.style.DialogNoAnimation); - setContentView(container, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); + private void onCreateInternal() { + + Window window = null; + if (attachedFragment != null) { + attachedFragment.addSheet(this); + if (attachedFragment.getLayoutContainer() == null) return; + + InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + if (imm.hideSoftInputFromWindow(attachedFragment.getLayoutContainer().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS)) { + AndroidUtilities.runOnUIThread(() -> { + AndroidUtilities.removeFromParent(container); + attachedFragment.getLayoutContainer().addView(container); + }, 80); + } else { + AndroidUtilities.removeFromParent(container); + attachedFragment.getLayoutContainer().addView(container); + } + + } else { + window = getWindow(); + window.setWindowAnimations(R.style.DialogNoAnimation); + setContentView(container, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); + } if (useLightStatusBar && Build.VERSION.SDK_INT >= 23) { int color = Theme.getColor(Theme.key_actionBarDefault, null, true); @@ -1183,7 +1225,7 @@ public boolean hasOverlappingRendering() { public void setTranslationY(float translationY) { super.setTranslationY(translationY); if (topBulletinContainer != null) { - topBulletinContainer.setTranslationY(-getHeight() + translationY - getPaddingTop() - AndroidUtilities.statusBarHeight + backgroundPaddingTop); + topBulletinContainer.setTranslationY(-(container.getHeight() - containerView.getY()) + backgroundPaddingTop); } onContainerTranslationYChanged(translationY); } @@ -1281,30 +1323,34 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } } - WindowManager.LayoutParams params = window.getAttributes(); - params.width = ViewGroup.LayoutParams.MATCH_PARENT; - params.gravity = Gravity.TOP | Gravity.LEFT; - params.dimAmount = 0; - params.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND; - if (focusable) { - params.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; - } else { - params.flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; - } - if (isFullscreen) { - if (Build.VERSION.SDK_INT >= 21) { - params.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | - WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR | - WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; + if (attachedFragment != null) { + + } else if (window != null) { + WindowManager.LayoutParams params = window.getAttributes(); + params.width = ViewGroup.LayoutParams.MATCH_PARENT; + params.gravity = Gravity.TOP | Gravity.LEFT; + params.dimAmount = 0; + params.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND; + if (focusable) { + params.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; + } else { + params.flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; } - params.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; - container.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_FULLSCREEN); - } - params.height = ViewGroup.LayoutParams.MATCH_PARENT; - if (Build.VERSION.SDK_INT >= 28) { - params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; + if (isFullscreen) { + if (Build.VERSION.SDK_INT >= 21) { + params.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | + WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR | + WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; + } + params.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; + container.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_FULLSCREEN); + } + params.height = ViewGroup.LayoutParams.MATCH_PARENT; + if (Build.VERSION.SDK_INT >= 28) { + params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; + } + window.setAttributes(params); } - window.setAttributes(params); } @Override @@ -1324,6 +1370,14 @@ public void setUseLightStatusBar(boolean value) { } container.setSystemUiVisibility(flags); } + if (attachedFragment != null) { + LaunchActivity.instance.checkSystemBarColors(true, true, true, false); + } + } + + @Override + public boolean isAttachedLightStatusBar() { + return useLightStatusBar; } public boolean isFocusable() { @@ -1358,7 +1412,11 @@ public void setBackgroundColor(int color) { @Override public void show() { if (!AndroidUtilities.isSafeToShow(getContext())) return; - super.show(); + if (attachedFragment != null) { + onCreateInternal(); + } else { + super.show(); + } setShowing(true); if (focusable) { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); @@ -1738,6 +1796,16 @@ public void forceKeyboardOnDismiss() { forceKeyboardOnDismiss = true; } + @Override + public View getWindowView() { + return container; + } + + @Override + public boolean isShown() { + return !dismissed; + } + @Override public void dismiss() { if (delegate != null && !delegate.canDismiss()) { @@ -1836,16 +1904,77 @@ public void onAnimationCancel(Animator animation) { setShowing(false); } + @Override + public void dismiss(boolean tabs) { + this.dismiss(); + } + + @Override + public void release() { + dismissInternal(); + } + + @Override + public boolean isFullyVisible() { + return false; + } + + @Override + public boolean attachedToParent() { + return container != null && container.isAttachedToWindow(); + } + + @Override + public boolean showDialog(Dialog dialog) { + return false; + } + + @Override + public void setKeyboardHeightFromParent(int keyboardHeight) { + + } + + @Override + public int getNavigationBarColor(int color) { + final float t; + if (!attachedToParent() || containerView == null) { + t = 0; + } else if (transitionFromRight) { + t = containerView.getAlpha(); + } else { + final float fullHeight = getContainerViewHeight() + keyboardHeight + AndroidUtilities.dp(10) + (scrollNavBar ? getBottomInset() : 0); + t = Utilities.clamp01(1f - containerView.getTranslationY() / fullHeight); + } + return ColorUtils.blendARGB(color, navBarColor, t); + } + + @Override + public void setOnDismissListener(Runnable onDismiss) { + if (onDismiss != null) { + setOnHideListener(d -> onDismiss.run()); + } + } + + @Override + public void setOnDismissListener(@Nullable OnDismissListener listener) { + super.setOnDismissListener(listener); + } + public int getSheetAnimationType() { return currentSheetAnimationType; } public void dismissInternal() { - try { - super.dismiss(); - } catch (Exception e) { - //ignore: not attached to window manager - FileLog.e(e, false); + if (attachedFragment != null) { + attachedFragment.removeSheet(this); + AndroidUtilities.removeFromParent(container); + } else { + try { + super.dismiss(); + } catch (Exception e) { + //ignore: not attached to window manager + FileLog.e(e, false); + } } } @@ -2061,6 +2190,12 @@ public void setOverlayNavBarColor(int color) { container.invalidate(); } + if (attachedFragment != null) { + LaunchActivity.instance.checkSystemBarColors(true, true, true, false); + AndroidUtilities.setLightNavigationBar(getWindowView(), AndroidUtilities.computePerceivedBrightness(getNavigationBarColor(getThemedColor(Theme.key_windowBackgroundGray))) >= .721f); +// AndroidUtilities.setLightStatusBar(dialog != null ? dialog.windowView : windowView, attachedToActionBar && AndroidUtilities.computePerceivedBrightness(actionBar.getBackgroundColor()) > .721f); + return; + } // if (Color.alpha(color) > 120) { // AndroidUtilities.setLightStatusBar(getWindow(), false); // AndroidUtilities.setLightNavigationBar(getWindow(), false); @@ -2124,4 +2259,28 @@ public void smoothContainerViewLayout() { protected void onSmoothContainerViewLayout(float ty) { } + + + public BaseFragment attachedFragment; + + public void makeAttached(BaseFragment fragment) { + if (AndroidUtilities.isTablet()) return; + this.attachedFragment = fragment; + } + + @Override + public boolean onAttachedBackPressed() { + onBackPressed(); + return true; + } + + @Override + public void onBackPressed() { + if (attachedFragment == null) { + super.onBackPressed(); + } else { + dismiss(); + } + } + } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabDialog.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabDialog.java new file mode 100644 index 00000000000..03e16930318 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabDialog.java @@ -0,0 +1,157 @@ +package org.telegram.ui.ActionBar; + +import android.app.Dialog; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.RectF; +import android.os.Build; +import android.os.Bundle; +import android.view.Gravity; +import android.view.KeyboardShortcutGroup; +import android.view.Menu; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowInsets; +import android.view.WindowManager; +import android.widget.FrameLayout; + +import androidx.annotation.Nullable; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.R; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.LaunchActivity; + +import java.util.List; + +public class BottomSheetTabDialog extends Dialog { + + public static BottomSheetTabsOverlay.Sheet checkSheet(BottomSheetTabsOverlay.Sheet sheet) { + BaseFragment fragment = LaunchActivity.getSafeLastFragment(); + if (fragment == null) return sheet; + if (AndroidUtilities.isTablet() || AndroidUtilities.hasDialogOnTop(fragment)) { + final BottomSheetTabDialog dialog = new BottomSheetTabDialog(sheet); + if (sheet.setDialog(dialog)) { + dialog.windowView.putView(); + return sheet; + } + } + return sheet; + } + + public final BottomSheetTabsOverlay.Sheet sheet; + public final BottomSheetTabsOverlay.SheetView sheetView; + + public final WindowView windowView; + + public BottomSheetTabDialog(BottomSheetTabsOverlay.Sheet sheet) { + super(sheet.getWindowView().getContext(), R.style.TransparentDialog); + + this.sheet = sheet; + this.sheetView = sheet.getWindowView(); + + setContentView(windowView = new WindowView(sheetView), new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Window window = getWindow(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + } + window.setWindowAnimations(R.style.DialogNoAnimation); + + WindowManager.LayoutParams params = window.getAttributes(); + params.width = ViewGroup.LayoutParams.MATCH_PARENT; + params.gravity = Gravity.TOP | Gravity.LEFT; + params.dimAmount = 0; + params.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND; + params.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; + params.height = ViewGroup.LayoutParams.MATCH_PARENT; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; + } + window.setAttributes(params); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + window.setStatusBarColor(Color.TRANSPARENT); + } + + windowView.setFitsSystemWindows(true); + windowView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); + windowView.setPadding(0, 0, 0, 0); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + windowView.setOnApplyWindowInsetsListener((v, insets) -> { + v.setPadding(0, 0, 0, insets.getSystemWindowInsetBottom()); + if (Build.VERSION.SDK_INT >= 30) { + return WindowInsets.CONSUMED; + } else { + return insets.consumeSystemWindowInsets(); + } + }); + } + } + + public void updateNavigationBarColor() { + final int color = sheet.getNavigationBarColor(0); + AndroidUtilities.setNavigationBarColor(getWindow(), color); + AndroidUtilities.setLightNavigationBar(getWindow(), AndroidUtilities.computePerceivedBrightness(color) >= .721f); + } + + public static class WindowView extends FrameLayout implements BottomSheetTabsOverlay.SheetView { + + public final BottomSheetTabsOverlay.SheetView sheetView; + + public WindowView(BottomSheetTabsOverlay.SheetView sheetView) { + super(sheetView.getContext()); + this.sheetView = sheetView; + } + + public void putView() { + View view = (View) sheetView; + AndroidUtilities.removeFromParent(view); + addView(view, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL)); + } + + @Override + public void setDrawingFromOverlay(boolean value) { + sheetView.setDrawingFromOverlay(value); + } + + @Override + public RectF getRect() { + return sheetView.getRect(); + } + + @Override + public float drawInto(Canvas canvas, RectF finalRect, float progress, RectF clipRect, float alpha, boolean opening) { + return sheetView.drawInto(canvas, finalRect, progress, clipRect, alpha, opening); + } + + } + + private boolean attached; + public void attach() { + if (attached) return; + attached = true; + super.show(); + } + + public void detach() { + sheet.setDialog(null); + if (!attached) return; + attached = false; + super.dismiss(); + } + + @Override + public void dismiss() { + sheet.dismiss(false); + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabs.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabs.java index cf678861648..c8d06bbfb0a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabs.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabs.java @@ -2,15 +2,22 @@ import static org.telegram.messenger.AndroidUtilities.dp; import static org.telegram.messenger.AndroidUtilities.lerp; +import static org.telegram.messenger.LocaleController.getString; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; +import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.text.TextPaint; +import android.text.TextUtils; +import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.FrameLayout; @@ -21,14 +28,17 @@ import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ContactsController; +import org.telegram.messenger.Emoji; import org.telegram.messenger.FileLog; import org.telegram.messenger.LocaleController; +import org.telegram.messenger.MessageObject; import org.telegram.messenger.MessagesController; import org.telegram.messenger.R; import org.telegram.messenger.UserConfig; import org.telegram.messenger.UserObject; import org.telegram.messenger.Utilities; import org.telegram.tgnet.TLRPC; +import org.telegram.ui.ArticleViewer; import org.telegram.ui.ChatActivity; import org.telegram.ui.Components.AnimatedColor; import org.telegram.ui.Components.AnimatedFloat; @@ -36,8 +46,9 @@ import org.telegram.ui.Components.Text; import org.telegram.ui.LaunchActivity; import org.telegram.ui.bots.BotWebViewAttachedSheet; -import org.telegram.ui.bots.BotWebViewContainer; +import org.telegram.ui.web.BotWebViewContainer; import org.telegram.ui.bots.BotWebViewSheet; +import org.telegram.ui.bots.WebViewRequestProps; import java.util.ArrayList; import java.util.HashMap; @@ -61,7 +72,10 @@ public BottomSheetTabs(Context context, ActionBarLayout actionBarLayout) { final int count = tabs.size(); if (count == 0) return; WebTabData lastTab = tabs.get(tabs.size() - 1); - BottomSheetTabsOverlay overlay = LaunchActivity.instance.getBottomSheetTabsOverlay(); + BottomSheetTabsOverlay overlay = LaunchActivity.instance == null ? null : LaunchActivity.instance.getBottomSheetTabsOverlay(); + if (overlay != null) { + overlay.stopAnimations(); + } if (count == 1 || overlay == null) { openTab(lastTab); @@ -82,6 +96,18 @@ public void openTab(WebTabData tab) { ((ChatActivity) lastFragment).getChatActivityEnterView().hidePopup(true, false); } } + if (tab.articleViewer != null) { + BaseFragment fragment = actionBarLayout.getSheetFragment(); + final ArticleViewer articleViewer = tab.articleViewer; + BottomSheetTabDialog.checkSheet(articleViewer.sheet); + fragment.addSheet(articleViewer.sheet); + articleViewer.sheet.reset(); + articleViewer.setParentActivity(fragment.getParentActivity(), fragment); + articleViewer.sheet.attachInternal(fragment); + articleViewer.sheet.animateOpen(true, true, null); + removeTab(tab, false); + return; + } boolean closed = closeAttachedSheets(); Utilities.Callback<BaseFragment> open = fragment -> { if (fragment == null) return; @@ -91,10 +117,10 @@ public void openTab(WebTabData tab) { ((ChatActivity) fragment).getChatActivityEnterView().hidePopup(true, false); } } - if (fragment.getContext() == null) { + if (fragment.getContext() == null || fragment.getParentActivity() == null) { return; } - if (AndroidUtilities.isTablet()) { + if (AndroidUtilities.isTablet() && !tab.isWeb) { BotWebViewSheet sheet = new BotWebViewSheet(fragment.getContext(), fragment.getResourceProvider()); sheet.setParentActivity(fragment.getParentActivity()); if (sheet.restoreState(fragment, tab)) { @@ -102,30 +128,26 @@ public void openTab(WebTabData tab) { sheet.show(); } } else { - BottomSheetTabsOverlay overlay = LaunchActivity.instance.getBottomSheetTabsOverlay(); - BotWebViewAttachedSheet webViewSheet = fragment.createBotViewer(); + BaseFragment sheetFragment = actionBarLayout.getSheetFragment(); + if (sheetFragment == null) return; + BotWebViewAttachedSheet webViewSheet = sheetFragment.createBotViewer(); webViewSheet.setParentActivity(fragment.getParentActivity()); if (webViewSheet.restoreState(fragment, tab)) { -// if (overlay != null && overlay.isOpened() && overlay.openSheet(webViewSheet, tab, null)) { -// removeTab(tab, false); -// webViewSheet.show(closed, true); -// } else { - removeTab(tab, false); - webViewSheet.show(closed); -// } + removeTab(tab, false); + webViewSheet.show(closed); } } }; + open.run(lastFragment); if (tab.needsContext && (!(lastFragment instanceof ChatActivity) || ((ChatActivity) lastFragment).getDialogId() != tab.props.botId)) { BaseFragment chatActivity = ChatActivity.of(tab.props.botId); - chatActivity.whenFullyVisible(() -> open.run(chatActivity)); - lastFragment.presentFragment(chatActivity); - } else { - open.run(lastFragment); + AndroidUtilities.runOnUIThread(() -> { + lastFragment.presentFragment(chatActivity); + }, 220); } } - public WebTabData tryReopenTab(BotWebViewAttachedSheet.WebViewRequestProps props) { + public WebTabData tryReopenTab(WebViewRequestProps props) { ArrayList<WebTabData> tabs = this.tabs.get(currentAccount); if (tabs == null) this.tabs.put(currentAccount, tabs = new ArrayList<>()); @@ -140,6 +162,63 @@ public WebTabData tryReopenTab(BotWebViewAttachedSheet.WebViewRequestProps props return null; } + public static String urlWithoutFragment(String url) { + if (url == null) return null; + int index = url.indexOf('#'); + if (index >= 0) return url.substring(0, index + 1); + return url; + } + + public WebTabData tryReopenTab(String url) { + if (TextUtils.isEmpty(url)) return null; + final ArrayList<WebTabData> tabs = getTabs(); + for (int i = 0; i < tabs.size(); ++i) { + WebTabData tab = tabs.get(i); + if (tab.articleViewer != null && !tab.articleViewer.pagesStack.isEmpty()) { + Object lastPage = tab.articleViewer.pagesStack.get(tab.articleViewer.pagesStack.size() - 1); + if (lastPage instanceof ArticleViewer.CachedWeb) { + ArticleViewer.CachedWeb web = (ArticleViewer.CachedWeb) lastPage; + BotWebViewContainer.MyWebView webView = web.webView; + if (webView == null && tab.articleViewer.pages != null && tab.articleViewer.pages[0] != null) { + webView = tab.articleViewer.pages[0].getWebView(); + } + if (webView != null && TextUtils.equals(urlWithoutFragment(webView.canGoBack() ? webView.getUrl() : webView.getOpenURL()), urlWithoutFragment(url))) { + openTab(tab); + return tab; + } + } + } + } + return null; + } + + public WebTabData tryReopenTab(TLRPC.WebPage webpage) { + if (webpage == null) return null; + final ArrayList<WebTabData> tabs = getTabs(); + for (int i = 0; i < tabs.size(); ++i) { + WebTabData tab = tabs.get(i); + if (tab.articleViewer != null && !tab.articleViewer.pagesStack.isEmpty()) { + Object lastPage = tab.articleViewer.pagesStack.get(tab.articleViewer.pagesStack.size() - 1); + if (lastPage instanceof TLRPC.WebPage) { + TLRPC.WebPage pageWebPage = (TLRPC.WebPage) lastPage; + if (pageWebPage != null && pageWebPage.id == webpage.id) { + openTab(tab); + return tab; + } + } + } + } + return null; + } + + public WebTabData tryReopenTab(MessageObject messageObject) { + if (messageObject == null) return null; + if (messageObject.messageOwner == null) return null; + if (messageObject.messageOwner.media == null) return null; + if (messageObject.messageOwner.media.webpage == null) return null; + return tryReopenTab(messageObject.messageOwner.media.webpage); + } + public boolean closeAttachedSheets() { boolean had = false; BottomSheetTabsOverlay overlay = LaunchActivity.instance.getBottomSheetTabsOverlay(); @@ -221,12 +300,20 @@ public int getExpandedHeight() { } public ArrayList<WebTabData> getTabs() { + return getTabs(this.currentAccount); + } + + public ArrayList<TabDrawable> getTabDrawables() { + return getTabDrawables(this.currentAccount); + } + + public ArrayList<WebTabData> getTabs(int currentAccount) { ArrayList<WebTabData> tabs = this.tabs.get(currentAccount); if (tabs == null) this.tabs.put(currentAccount, tabs = new ArrayList<>()); return tabs; } - public ArrayList<TabDrawable> getTabDrawables() { + public ArrayList<TabDrawable> getTabDrawables(int currentAccount) { ArrayList<TabDrawable> tabDrawables = this.tabDrawables.get(currentAccount); if (tabDrawables == null) this.tabDrawables.put(currentAccount, tabDrawables = new ArrayList<>()); return tabDrawables; @@ -274,21 +361,31 @@ protected boolean verifyDrawable(@NonNull Drawable who) { return super.verifyDrawable(who) || true; } + private static TextPaint textPaint; + private static TextPaint getTextPaint() { + if (textPaint == null) { + textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); + textPaint.setTypeface(AndroidUtilities.bold()); + textPaint.setTextSize(AndroidUtilities.dp(17)); + } + return textPaint; + } + private void updateMultipleTitle() { final ArrayList<WebTabData> tabs = getTabs(); final ArrayList<TabDrawable> tabDrawables = getTabDrawables(); - String title = null; + CharSequence title = null; for (int i = 0; i < tabDrawables.size(); ++i) { TabDrawable drawable = tabDrawables.get(i); if (tabs.size() > 1 && drawable.position == 0) { - TLRPC.User user = MessagesController.getInstance(drawable.tab.props.currentAccount).getUser(drawable.tab.props.botId); - title = LocaleController.formatPluralString("BotMoreTabs", tabs.size() - 1, UserObject.getUserName(user)); + title = LocaleController.formatPluralString("BotMoreTabs", tabs.size() - 1, drawable.tab.getTitle()); + title = Emoji.replaceEmoji(title, getTextPaint().getFontMetricsInt(), false); drawable.setOverrideTitle(title); } else { - TLRPC.User user = MessagesController.getInstance(drawable.tab.props.currentAccount).getUser(drawable.tab.props.botId); - title = UserObject.getUserName(user); + title = drawable.tab.getTitle(); + title = Emoji.replaceEmoji(title, getTextPaint().getFontMetricsInt(), false); drawable.setOverrideTitle(null); } } @@ -320,6 +417,20 @@ public boolean removeAll() { return tabs.isEmpty(); } + public boolean tryRemoveTabWith(ArticleViewer articleViewer) { + for (int account = 0; account < this.tabs.size(); ++account) { + ArrayList<WebTabData> tabs = this.tabs.get(account); + if (tabs != null) { + for (WebTabData tab : tabs) { + if (tab.articleViewer == articleViewer) { + return removeTab(account, tab, true); + } + } + } + } + return false; + } + public void removeTab(WebTabData tab, Utilities.Callback<Boolean> callback) { if (tab == null) { callback.run(true); @@ -341,14 +452,14 @@ public void removeTab(WebTabData tab, Utilities.Callback<Boolean> callback) { final AlertDialog[] dialog = new AlertDialog[1]; dialog[0] = new AlertDialog.Builder(getContext()) .setTitle(botName) - .setMessage(LocaleController.getString(R.string.BotWebViewChangesMayNotBeSaved)) - .setPositiveButton(LocaleController.getString(R.string.BotWebViewCloseAnyway), (d, w) -> { + .setMessage(getString(R.string.BotWebViewChangesMayNotBeSaved)) + .setPositiveButton(getString(R.string.BotWebViewCloseAnyway), (d, w) -> { clicked[0] = true; removeTab(tab, true); callback.run(true); dialog[0].dismiss(); }) - .setNegativeButton(LocaleController.getString(R.string.Cancel), (d, w) -> { + .setNegativeButton(getString(R.string.Cancel), (d, w) -> { clicked[0] = true; callback.run(false); dialog[0].dismiss(); @@ -366,8 +477,12 @@ public void removeTab(WebTabData tab, Utilities.Callback<Boolean> callback) { } public boolean removeTab(WebTabData tab, boolean destroy) { - final ArrayList<WebTabData> tabs = getTabs(); - final ArrayList<TabDrawable> tabDrawables = getTabDrawables(); + return removeTab(currentAccount, tab, destroy); + } + + public boolean removeTab(int currentAccount, WebTabData tab, boolean destroy) { + final ArrayList<WebTabData> tabs = getTabs(currentAccount); + final ArrayList<TabDrawable> tabDrawables = getTabDrawables(currentAccount); tabs.remove(tab); if (destroy) { @@ -495,7 +610,9 @@ public static class TabDrawable { public final AnimatedFloat animatedAlpha; private final Paint backgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint progressPaint = new Paint(Paint.ANTI_ALIAS_FLAG); private final Paint iconPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint faviconPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); public int closeRippleColor; public final Drawable closeRipple = Theme.createSelectorDrawable(0x30ffffff, Theme.RIPPLE_MASK_CIRCLE_20DP); @@ -504,7 +621,12 @@ public static class TabDrawable { private int backgroundColor, tabColor; private boolean backgroundIsDark, tabIsDark; - private Text title; + private float progress; + + private Bitmap favicon; + private Drawable iconDrawable; + private int iconDrawableColor = Color.WHITE; + private final Text title; private Text overrideTitle; public TabDrawable(View view, WebTabData tab) { @@ -519,10 +641,15 @@ public TabDrawable(View view, WebTabData tab) { animatedPosition = new AnimatedFloat(view, 320, CubicBezierInterpolator.EASE_OUT_QUINT); animatedAlpha = new AnimatedFloat(view, 320, CubicBezierInterpolator.EASE_OUT_QUINT); - TLRPC.User user = MessagesController.getInstance(tab.props.currentAccount).getUser(tab.getBotId()); - this.title = new Text(UserObject.getUserName(user), 17, AndroidUtilities.bold()); + this.favicon = tab.favicon; + CharSequence title = Emoji.replaceEmoji(tab.getTitle(), getTextPaint().getFontMetricsInt(), false); + this.title = new Text(title, 17, AndroidUtilities.bold()); this.tabColor = tab.actionBarColor; this.tabIsDark = AndroidUtilities.computePerceivedBrightness(tabColor) < .721f; + if (tab.isArticle()) { + iconDrawable = view.getContext().getResources().getDrawable(R.drawable.msg_instant).mutate(); + } + progress = tab.articleProgress; closePath.rewind(); closePath.moveTo(0, 0); @@ -536,7 +663,7 @@ public TabDrawable(View view, WebTabData tab) { expandPath.lineTo(dp(12.66f), dp(6.33f) / 2f); } - public void setOverrideTitle(String title) { + public void setOverrideTitle(CharSequence title) { if (title == null) { overrideTitle = null; } else { @@ -595,6 +722,14 @@ public void draw(Canvas canvas, RectF bounds, float r, float alpha, float conten rectPath.addRoundRect(bounds, radii, Path.Direction.CW); canvas.drawPath(rectPath, backgroundPaint); + if (progress > 0 && expandProgress > 0 && alpha > 0) { + canvas.save(); + canvas.clipPath(rectPath); + progressPaint.setColor(Theme.multAlpha(AndroidUtilities.computePerceivedBrightness(backgroundColor) > .721f ? Color.BLACK : Color.WHITE, .07f * alpha * expandProgress)); + canvas.drawRect(bounds.left, bounds.top, bounds.left + bounds.width() * progress, bounds.bottom, progressPaint); + canvas.restore(); + } + final float isDark = lerp(backgroundIsDark ? 1f : 0f, tabIsDark ? 1f : 0f, expandProgress); final int iconColor = ColorUtils.blendARGB(0xFF000000, 0xFFFFFFFF, isDark); @@ -628,28 +763,69 @@ public void draw(Canvas canvas, RectF bounds, float r, float alpha, float conten canvas.drawPath(expandPath, iconPaint); canvas.restore(); + int leftPadding = 0; + if (favicon != null) { + final int sz = dp(24); + + canvas.save(); + AndroidUtilities.rectTmp2.set( + (int) (bounds.left + dp(56)), + (int) (bounds.centerY() - sz / 2f), + (int) (bounds.left + dp(56) + sz), + (int) (bounds.centerY() + sz / 2f) + ); + faviconPaint.setAlpha((int) (0xFF * alpha * contentAlpha)); + canvas.drawBitmap(favicon, null, AndroidUtilities.rectTmp2, faviconPaint); + canvas.restore(); + + leftPadding = sz + dp(4); + } else if (iconDrawable != null) { + final int sz = dp(24); + + final int h = sz; + final int w = (int) (sz / (float) iconDrawable.getIntrinsicHeight() * iconDrawable.getIntrinsicWidth()); + final float s = .7f; + + AndroidUtilities.rectTmp2.set( + (int) (bounds.left + dp(56)), + (int) (bounds.centerY() - h / 2f * s), + (int) (bounds.left + dp(56) + w * s), + (int) (bounds.centerY() + h / 2f * s) + ); + if (iconColor != iconDrawableColor) { + iconDrawable.setColorFilter(new PorterDuffColorFilter(iconDrawableColor = iconColor, PorterDuff.Mode.SRC_IN)); + } + iconDrawable.setAlpha((int) (0xFF * alpha * contentAlpha)); + iconDrawable.setBounds(AndroidUtilities.rectTmp2); + iconDrawable.draw(canvas); + + leftPadding = w - dp(2); + } + if (overrideTitle != null) { overrideTitle - .ellipsize((int) (bounds.width() - dp(100))) - .draw(canvas, bounds.left + dp(60), bounds.centerY(), iconColor, (1f - expandProgress) * alpha * contentAlpha); + .ellipsize((int) (bounds.width() - dp(100) - leftPadding)) + .draw(canvas, bounds.left + dp(60) + leftPadding, bounds.centerY(), iconColor, (1f - expandProgress) * alpha * contentAlpha); } title - .ellipsize((int) (bounds.width() - dp(100))) - .draw(canvas, bounds.left + dp(60), bounds.centerY(), iconColor, (overrideTitle == null ? 1f : expandProgress) * alpha * contentAlpha); + .ellipsize((int) (bounds.width() - dp(100) - leftPadding)) + .draw(canvas, bounds.left + dp(60) + leftPadding, bounds.centerY(), iconColor, (overrideTitle == null ? 1f : expandProgress) * alpha * contentAlpha); } } public static class WebTabData { - public BotWebViewAttachedSheet.WebViewRequestProps props; + public WebViewRequestProps props; public Bundle webViewState; public BotWebViewContainer.MyWebView webView; - public BotWebViewContainer.WebViewProxy webViewProxy; - public int webViewWidth, webViewHeight; - public int webViewScroll; + public View view2; + public Object proxy; + public int viewWidth, viewHeight; + public int viewScroll; public boolean expanded; public float expandedOffset = Float.MAX_VALUE; + public boolean allowSwipes = true; public Bitmap previewBitmap; public Object previewNode; @@ -671,6 +847,19 @@ public static class WebTabData { public boolean themeIsDark; + public boolean isWeb; + public String title; + public Bitmap favicon; + public String startUrl; + public String currentUrl; + + public boolean error; + public int errorCode; + public String errorDescription; + + public float articleProgress; + public ArticleViewer articleViewer; + public long getBotId() { if (props == null) return 0; return props.botId; @@ -682,11 +871,29 @@ public void destroy() { webView.destroy(); webView = null; } + if (articleViewer != null) { + articleViewer.destroy(); + } } catch (Exception e) { FileLog.e(e); } } + public boolean isArticle() { + return articleViewer != null && articleViewer.isLastArticle(); + } + + public String getTitle() { + if (isWeb || articleViewer != null) { + if (TextUtils.isEmpty(title)) + return getString(R.string.WebEmpty); + return title; + } + if (props == null) return ""; + TLRPC.User user = MessagesController.getInstance(props.currentAccount).getUser(props.botId); + return UserObject.getUserName(user); + } + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabsOverlay.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabsOverlay.java index 88ee535fa0e..e42571ee14e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabsOverlay.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheetTabsOverlay.java @@ -2,6 +2,7 @@ import static org.telegram.messenger.AndroidUtilities.dp; import static org.telegram.messenger.AndroidUtilities.lerp; +import static org.telegram.messenger.AndroidUtilities.scaleRect; import static org.telegram.messenger.LocaleController.getString; import static org.telegram.messenger.Utilities.clamp01; @@ -50,20 +51,43 @@ import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.Text; import org.telegram.ui.GradientClip; -import org.telegram.ui.bots.BotWebViewAttachedSheet; -import org.telegram.ui.bots.BotWebViewMenuContainer; -import org.telegram.ui.bots.BotWebViewSheet; import java.util.ArrayList; public class BottomSheetTabsOverlay extends FrameLayout { - private BottomSheetTabs tabsView; + public interface Sheet { + public SheetView getWindowView(); + + public void show(); + public void dismiss(boolean tabs); + + public BottomSheetTabs.WebTabData saveState(); + public boolean restoreState(BaseFragment fragment, BottomSheetTabs.WebTabData tab); + + public void release(); + public boolean isFullSize(); + + public boolean setDialog(BottomSheetTabDialog dialog); + + default void setLastVisible(boolean lastVisible) {}; + + public int getNavigationBarColor(int color); + } + + public interface SheetView { + public Context getContext(); - private BotWebViewAttachedSheet dismissingSheet; - private BotWebViewSheet dismissingSheet2; - private BotWebViewAttachedSheet openingSheet; - private BotWebViewMenuContainer dismissingMenuContainer; + public void setDrawingFromOverlay(boolean value); + public RectF getRect(); + public float drawInto(Canvas canvas, RectF finalRect, float progress, RectF clipRect, float alpha, boolean opening); + + public boolean post(Runnable r); + } + + private BottomSheetTabs tabsView; + private Sheet dismissingSheet; + private Sheet openingSheet; private BottomSheetTabs.TabDrawable dismissingTab; private BottomSheetTabs.TabDrawable openingTab; private float openingTabScroll; @@ -361,6 +385,10 @@ public float getScrollWindow() { return Math.min(SharedConfig.botTabs3DEffect ? 3 : 6, getScrollRange()); } + public float getScrollWindow(boolean animated) { + return Math.min(SharedConfig.botTabs3DEffect ? 3 : 6, getScrollRange(animated)); + } + public float getScrollMin() { return getScrollMin(true); } @@ -374,7 +402,7 @@ public float getScrollMax() { } public float getScrollMax(boolean animated) { - return getScrollRange(animated) - getScrollWindow() - getScrollWindow() / 3f * Utilities.clamp(4f - getScrollRange(animated), .5f, 0); + return getScrollRange(animated) - getScrollWindow(animated) - getScrollWindow(animated) / 3f * Utilities.clamp(4f - getScrollRange(animated), .5f, 0); } public boolean canScroll() { @@ -401,7 +429,7 @@ public void setSlowerDismiss(boolean slowerDismiss) { this.slowerDismiss = slowerDismiss; } - public boolean openSheet(BotWebViewAttachedSheet sheet, BottomSheetTabs.WebTabData tab, Runnable whenOpened) { + public boolean openSheet(Sheet sheet, BottomSheetTabs.WebTabData tab, Runnable whenOpened) { if (sheet == null) return false; if (tabsView == null) return false; @@ -455,67 +483,14 @@ public void onAnimationEnd(Animator animation) { return true; } - public boolean dismissSheet(BotWebViewAttachedSheet sheet) { - if (sheet == null) return false; - if (tabsView == null) return false; - - if (dismissingSheet != null || openingSheet != null) { - if (animator != null) { - animator.end(); - animator = null; - } - } - - dismissingSheet = sheet; - sheet.getWindowView().setDrawingFromOverlay(true); - invalidate(); - + public void stopAnimations() { if (animator != null) { animator.cancel(); + animator = null; } - - BottomSheetTabs.WebTabData tab = sheet.saveState(); - dismissingTab = tabsView.pushTab(tab); - - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { - renderHardwareViewToBitmap(tab.webView, -tab.webViewScroll, b -> tab.previewBitmap = b); - } - - dismissProgress = 0; - animator = ValueAnimator.ofFloat(0, 1); - animator.addUpdateListener(anm -> { - dismissProgress = (float) anm.getAnimatedValue(); - invalidate(); - }); - animator.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - if (tab.webView != null && tab.previewBitmap == null && tab.webViewWidth > 0 && tab.webViewHeight > 0) { - if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O) { - tab.previewBitmap = Bitmap.createBitmap(tab.webViewWidth, tab.webViewHeight, Bitmap.Config.RGB_565); - Canvas canvas = new Canvas(tab.previewBitmap); - canvas.translate(0, -tab.webViewScroll); - tab.webView.draw(canvas); - } - } - sheet.release(); - dismissingSheet = null; - invalidate(); - } - }); - if (slowerDismiss || sheet.getFullSize()) { - AndroidUtilities.applySpring(animator, 260, 30, 1); - } else { - AndroidUtilities.applySpring(animator, 350, 30, 1); - } - animator.start(); - - slowerDismiss = false; - - return true; } - public boolean dismissSheet(BotWebViewSheet sheet) { + public boolean dismissSheet(Sheet sheet) { if (sheet == null) return false; if (tabsView == null) return false; @@ -526,7 +501,8 @@ public boolean dismissSheet(BotWebViewSheet sheet) { } } - dismissingSheet2 = sheet; + dismissingSheet = sheet; + sheet.setLastVisible(false); sheet.getWindowView().setDrawingFromOverlay(true); invalidate(); @@ -537,10 +513,6 @@ public boolean dismissSheet(BotWebViewSheet sheet) { BottomSheetTabs.WebTabData tab = sheet.saveState(); dismissingTab = tabsView.pushTab(tab); - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { - renderHardwareViewToBitmap(tab.webView, -tab.webViewScroll, b -> tab.previewBitmap = b); - } - dismissProgress = 0; animator = ValueAnimator.ofFloat(0, 1); animator.addUpdateListener(anm -> { @@ -550,21 +522,28 @@ public boolean dismissSheet(BotWebViewSheet sheet) { animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { - if (tab.webView != null && tab.previewBitmap == null && tab.webViewWidth > 0 && tab.webViewHeight > 0) { - if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O) { - tab.previewBitmap = Bitmap.createBitmap(tab.webViewWidth, tab.webViewHeight, Bitmap.Config.RGB_565); + sheet.getWindowView().setDrawingFromOverlay(false); + View view = tab.webView != null ? tab.webView : tab.view2; + if (view != null && tab.previewBitmap == null && tab.viewWidth > 0 && tab.viewHeight > 0) { + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + renderHardwareViewToBitmap(view, -tab.viewScroll, b -> tab.previewBitmap = b); + } else { + tab.previewBitmap = Bitmap.createBitmap(tab.viewWidth, tab.viewHeight, Bitmap.Config.RGB_565); Canvas canvas = new Canvas(tab.previewBitmap); - canvas.translate(0, -tab.webViewScroll); - tab.webView.draw(canvas); + canvas.translate(0, -tab.viewScroll); + view.draw(canvas); } } sheet.release(); - dismissingSheet2 = null; + dismissingSheet = null; invalidate(); } }); - AndroidUtilities.applySpring(animator, 350, 30, 1); - animator.setDuration(animator.getDuration() * 2); + if (slowerDismiss || sheet.isFullSize()) { + AndroidUtilities.applySpring(animator, 220, 30, 1); + } else { + AndroidUtilities.applySpring(animator, 350, 30, 1); + } animator.start(); slowerDismiss = false; @@ -572,55 +551,6 @@ public void onAnimationEnd(Animator animation) { return true; } - public boolean dismissSheet(BotWebViewMenuContainer menuContainer) { - if (menuContainer == null) return false; - if (tabsView == null) return false; - - dismissingMenuContainer = menuContainer; - menuContainer.setDrawingFromOverlay(true); - invalidate(); - - if (animator != null) { - animator.cancel(); - } - - BottomSheetTabs.WebTabData tab = menuContainer.saveState(); - dismissingTab = tabsView.pushTab(tab); - - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { - renderHardwareViewToBitmap(tab.webView, -tab.webViewScroll, b -> tab.previewBitmap = b); - } - - dismissProgress = 0; - animator = ValueAnimator.ofFloat(0, 1); - animator.addUpdateListener(anm -> { - dismissProgress = (float) anm.getAnimatedValue(); - invalidate(); - }); - animator.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - if (tab.webView != null && tab.previewBitmap == null && tab.webViewWidth > 0 && tab.webViewHeight > 0) { - if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O) { - tab.previewBitmap = Bitmap.createBitmap(tab.webViewWidth, tab.webViewHeight, Bitmap.Config.RGB_565); - Canvas canvas = new Canvas(tab.previewBitmap); - canvas.translate(0, -tab.webViewScroll); - tab.webView.draw(canvas); - } - } - menuContainer.onDismiss(); - menuContainer.setDrawingFromOverlay(false); - dismissingMenuContainer = null; - invalidate(); - } - }); - AndroidUtilities.applySpring(animator, 350, 30, 1); - animator.setDuration(animator.getDuration()); - animator.start(); - - return true; - } - public boolean onBackPressed() { if (isOpen) { closeTabsView(); @@ -634,7 +564,9 @@ public boolean onBackPressed() { private Paint blurBitmapPaint; private Matrix blurMatrix; private void prepareBlur(View view) { + AndroidUtilities.makingGlobalBlurBitmap = true; blurBitmap = AndroidUtilities.makeBlurBitmap(view, 14, 14); + AndroidUtilities.makingGlobalBlurBitmap = false; blurBitmapPaint = new Paint(Paint.ANTI_ALIAS_FLAG); blurBitmapPaint.setShader(blurBitmapShader = new BitmapShader(blurBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP)); @@ -651,6 +583,8 @@ private void prepareBlur(View view) { public void openTabsView() { if (tabsView == null || !(tabsView.getParent() instanceof View)) return; + stopAnimations(); + actionBarLayout = (View) tabsView.getParent(); if (actionBarLayout != null) { actionBarLayout.getLocationOnScreen(pos); @@ -777,48 +711,6 @@ private void drawDismissingTab(Canvas canvas) { canvas.restore(); } } - - if (dismissingSheet2 != null) { - BotWebViewSheet.WindowView windowView = dismissingSheet2.getWindowView(); - getLocationOnScreen(pos2); - tabsView.getLocationOnScreen(pos); - tabsView.getTabBounds(rect, 0); - rect.offset(pos[0] - pos2[0], pos[1] - pos2[1]); - float radius = windowView.drawInto(canvas, rect, dismissProgress, clipRect); - - if (dismissingTab != null) { - clipPath.rewind(); - clipPath.addRoundRect(clipRect, radius, radius, Path.Direction.CW); - canvas.save(); - canvas.clipPath(clipPath); - final float y = clipRect.top - dp(50) * (1f - dismissProgress); - rect.set(clipRect.left, y, clipRect.right, y + dp(50)); - tabsView.setupTab(dismissingTab); - dismissingTab.draw(canvas, rect, radius, dismissProgress, 1f); - canvas.restore(); - } - } - - if (dismissingMenuContainer != null) { - getLocationOnScreen(pos2); - dismissingMenuContainer.getLocationOnScreen(pos3); - tabsView.getLocationOnScreen(pos); - tabsView.getTabBounds(rect, 0); - rect.offset(pos[0] - pos2[0], pos[1] - pos2[1]); - float radius = dismissingMenuContainer.drawInto(canvas, rect, dismissProgress, clipRect); - - if (dismissingTab != null) { - clipPath.rewind(); - clipPath.addRoundRect(clipRect, radius, radius, Path.Direction.CW); - canvas.save(); - canvas.clipPath(clipPath); - final float y = clipRect.top - dp(50) * (1f - dismissProgress); - rect.set(clipRect.left, y, clipRect.right, y + dp(50)); - tabsView.setupTab(dismissingTab); - dismissingTab.draw(canvas, rect, radius, dismissProgress, 1f); - canvas.restore(); - } - } } @Override @@ -867,7 +759,7 @@ private void drawTabsPreview(Canvas canvas) { final float paddingBottom = dp(68); final int width = (int) Math.min(dp(340), thisWidth * .95f); - final int height = (int) (AndroidUtilities.isTablet() ? Math.min(thisWidth, thisHeight) * .75f : thisHeight * .75f); + final int height = (int) (AndroidUtilities.isTablet() ? tabsViewBounds.height() * .5f : thisHeight * .75f); final float cx = thisWidth / 2f; float tabCount = 0; for (int i = 0; i < tabs.size(); ++i) { @@ -922,8 +814,7 @@ private void drawTabsPreview(Canvas canvas) { boolean drawSimple = tab.tabDrawable != openingTab && (rect2.top > thisHeight || rect2.bottom < 0 || open < .1f) && position < count - 3; if (openingSheet != null && tab.tabDrawable == openingTab) { - BotWebViewAttachedSheet.WindowView windowView = openingSheet.getWindowView(); - rect.set(windowView.getRect()); + rect.set(openingSheet.getWindowView().getRect()); AndroidUtilities.lerpCentered(rect2, rect, opening, rect2); } else { tabsView.getTabBounds(rect, Utilities.clamp(tab.tabDrawable.getPosition(), 1, 0)); @@ -979,8 +870,7 @@ private void drawTabsPreview(Canvas canvas) { ); if (openingSheet != null && tab.tabDrawable == openingTab) { - BotWebViewAttachedSheet.WindowView windowView = openingSheet.getWindowView(); - windowView.drawInto(canvas, rect2, 1f, rect2, opening, true); + openingSheet.getWindowView().drawInto(canvas, rect2, 1f, rect2, opening, true); } canvas.restore(); @@ -995,7 +885,7 @@ private void drawTabsPreview(Canvas canvas) { openProgress ); canvas.scale(s, s, rect2.centerX(), rect2.top); - scale(tab.clickBounds, s, rect.centerX(), rect2.top); + scaleRect(tab.clickBounds, s, rect.centerX(), rect2.top); tab.draw(canvas, rect2, drawSimple, lerp(tab.tabDrawable.getAlpha(), 1f, openProgress), open, 0f, lerp(clamp01(position - count + 2), 1f, clamp01((open - .1f) / .8f))); canvas.restore(); @@ -1036,17 +926,6 @@ private void drawTabsPreview(Canvas canvas) { canvas.restore(); } - private void scale(RectF rect, float s, float px, float py) { - final float wl = px - rect.left, wr = rect.right - px; - final float ht = py - rect.top, hb = rect.bottom - py; - rect.set( - px - wl * s, - py - ht * s, - px + wr * s, - py + hb * s - ); - } - @Override protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); @@ -1062,9 +941,7 @@ private static class TabPreview { public final View parentView; public final BottomSheetTabs.WebTabData tabData; public final BottomSheetTabs.TabDrawable tabDrawable; - public final Bitmap previewBitmap; public WebView webView; - public final Object previewNode; private final Paint backgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); @@ -1122,9 +999,7 @@ public TabPreview( this.parentView = parentView; this.tabData = tabData; this.tabDrawable = tabDrawable; - this.previewBitmap = tabData.previewBitmap; this.webView = null;// tabData.webView; - this.previewNode = tabData.previewNode; this.bounce = new ButtonBounce(parentView); backgroundPaint.setColor(tabData.backgroundColor); @@ -1155,7 +1030,7 @@ public void draw(Canvas canvas, RectF bounds, boolean simple, float alpha, float final float s = bounce.getScale(.01f); canvas.scale(s, s, bounds.centerX(), bounds.centerY()); - final float r = lerp(dp(10), dp(8), expandProgress); + final float r = lerp(dp(10), dp(6), expandProgress); if (simple) { shadowPaint.setColor(0); shadowPaint.setShadowLayer(dp(30), 0, dp(10), Theme.multAlpha(0x20000000, alpha * expandProgress * (1f - openingProgress))); @@ -1174,23 +1049,23 @@ public void draw(Canvas canvas, RectF bounds, boolean simple, float alpha, float canvas.drawPath(clipPath, shadowPaint); canvas.clipPath(clipPath); - backgroundPaint.setAlpha((int) (0xFF * alpha)); + backgroundPaint.setAlpha((int) (0xFF * alpha * expandProgress)); canvas.drawRoundRect(bounds, r, r, backgroundPaint); canvas.save(); canvas.translate(bounds.left, bounds.top + dp(50) * tabScaleY + tabTranslateY); canvas.scale(1f, lerp(1f, 1.25f, expandProgress * (1f - openingProgress))); - if (previewNode != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && ((RenderNode) previewNode).hasDisplayList()) { - RenderNode node = (RenderNode) previewNode; + if (tabData != null && tabData.previewNode != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && ((RenderNode) tabData.previewNode).hasDisplayList()) { + RenderNode node = (RenderNode) tabData.previewNode; final float s2 = bounds.width() / node.getWidth(); canvas.scale(s2, s2); node.setAlpha(alpha * expandProgress); canvas.drawRenderNode(node); - } else if (previewBitmap != null) { - final float s2 = bounds.width() / previewBitmap.getWidth(); + } else if (tabData != null && tabData.previewBitmap != null) { + final float s2 = bounds.width() / tabData.previewBitmap.getWidth(); canvas.scale(s2, s2); bitmapPaint.setAlpha((int) (0xFF * alpha * expandProgress)); - canvas.drawBitmap(previewBitmap, 0, 0, bitmapPaint); + canvas.drawBitmap(tabData.previewBitmap, 0, 0, bitmapPaint); } else if (webView != null) { final float s2 = bounds.width() / webView.getWidth(); canvas.scale(s2, s2); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/DrawerLayoutContainer.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/DrawerLayoutContainer.java index bf797933c15..ea367c6be9e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/DrawerLayoutContainer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/DrawerLayoutContainer.java @@ -47,6 +47,7 @@ import org.telegram.messenger.R; import org.telegram.messenger.Utilities; import org.telegram.ui.Components.PasscodeView; +import org.telegram.ui.Stars.SuperRipple; public class DrawerLayoutContainer extends FrameLayout { @@ -449,7 +450,7 @@ public boolean onTouchEvent(MotionEvent ev) { return true; } - if ((allowOpenDrawerBySwipe || drawerOpened) && allowOpenDrawer && parentActionBarLayout.getFragmentStack().size() == 1 && (parentActionBarLayout.getLastFragment().getLastSheet() == null || !parentActionBarLayout.getLastFragment().getLastSheet().attachedToParent())) { + if ((allowOpenDrawerBySwipe || drawerOpened) && allowOpenDrawer && parentActionBarLayout.getFragmentStack().size() == 1 && parentActionBarLayout.allowSwipe() && (parentActionBarLayout.getLastFragment().getLastSheet() == null || !parentActionBarLayout.getLastFragment().getLastSheet().attachedToParent())) { if (ev != null && (ev.getAction() == MotionEvent.ACTION_DOWN || ev.getAction() == MotionEvent.ACTION_MOVE) && !startedTracking && !maybeStartTracking) { View scrollingChild = findScrollingChild(this, ev.getX(),ev.getY()); if (scrollingChild != null) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/INavigationLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/INavigationLayout.java index 234622a673a..1c489e500fe 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/INavigationLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/INavigationLayout.java @@ -41,6 +41,7 @@ public interface INavigationLayout { void setFragmentStackChangedListener(Runnable onFragmentStackChanged); boolean isTransitionAnimationInProgress(); void resumeDelayedFragmentAnimation(); + boolean allowSwipe(); boolean isInPassivePreviewMode(); void setInBubbleMode(boolean bubbleMode); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/SimpleTextView.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/SimpleTextView.java index 8f64af7e808..902bff228cf 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/SimpleTextView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/SimpleTextView.java @@ -282,7 +282,7 @@ public int getSideDrawablesSize() { return size; } - public Paint getPaint() { + public TextPaint getPaint() { return textPaint; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/Theme.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/Theme.java index 4fa4bb5d93b..3ae0f49af32 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/Theme.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/Theme.java @@ -4160,6 +4160,11 @@ public void run() { public static final int key_code_comment = colorsCount++; public static final int key_code_function = colorsCount++; + public static final int key_iv_background = colorsCount++; + public static final int key_iv_backgroundGray = colorsCount++; + public static final int key_iv_ab_progress = colorsCount++; + public static final int key_iv_navigationBackground = colorsCount++; + public static final String key_drawable_botInline = "drawableBotInline"; public static final String key_drawable_botLink = "drawableBotLink"; public static final String key_drawable_botWebView = "drawableBotWebView"; @@ -4248,6 +4253,10 @@ public void run() { static { defaultColors = ThemeColors.createDefaultColors(); + fallbackKeys.put(key_iv_background, key_windowBackgroundWhite); + fallbackKeys.put(key_iv_backgroundGray, key_windowBackgroundGray); + fallbackKeys.put(key_iv_navigationBackground, key_windowBackgroundGray); + fallbackKeys.put(key_iv_ab_progress, key_featuredStickers_addButton); fallbackKeys.put(key_chat_inQuote, key_featuredStickers_addButtonPressed); fallbackKeys.put(key_chat_outQuote, key_chat_outReplyLine); fallbackKeys.put(key_chat_outReplyLine2, key_chat_outReplyLine); @@ -5222,6 +5231,21 @@ public static ShapeDrawable createCircleDrawable(int size, int color) { return defaultDrawable; } + public static ShapeDrawable createCircleDrawable(int size, int colorTop, int colorBottom) { + OvalShape ovalShape = new OvalShape(); + ovalShape.resize(size, size); + ShapeDrawable defaultDrawable = new ShapeDrawable(ovalShape); + defaultDrawable.setIntrinsicWidth(size); + defaultDrawable.setIntrinsicHeight(size); + LinearGradient gradient = new LinearGradient( + 0, 0, 0, size, + colorTop, colorBottom, + Shader.TileMode.CLAMP + ); + defaultDrawable.getPaint().setShader(gradient); + return defaultDrawable; + } + public static CombinedDrawable createCircleDrawableWithIcon(int size, int iconRes) { return createCircleDrawableWithIcon(size, iconRes, 0); } @@ -5314,13 +5338,13 @@ public static Drawable createSimpleSelectorCircleDrawable(int size, int defaultC } } - public static Drawable createRoundRectDrawable(int rad, int defaultColor) { + public static ShapeDrawable createRoundRectDrawable(int rad, int defaultColor) { ShapeDrawable defaultDrawable = new ShapeDrawable(new RoundRectShape(new float[]{rad, rad, rad, rad, rad, rad, rad, rad}, null, null)); defaultDrawable.getPaint().setColor(defaultColor); return defaultDrawable; } - public static Drawable createRoundRectDrawable(int topRad, int bottomRad, int defaultColor) { + public static ShapeDrawable createRoundRectDrawable(int topRad, int bottomRad, int defaultColor) { ShapeDrawable defaultDrawable = new ShapeDrawable(new RoundRectShape(new float[]{topRad, topRad, topRad, topRad, bottomRad, bottomRad, bottomRad, bottomRad}, null, null)); defaultDrawable.getPaint().setColor(defaultColor); return defaultDrawable; @@ -10543,6 +10567,10 @@ public static void turnOffAutoNight(FrameLayout container, Runnable openSettings } } + public interface Colorable { + public void updateColors(); + } + public static Paint DEBUG_RED = new Paint(); static { DEBUG_RED.setColor(0xffff0000); } public static Paint DEBUG_BLUE = new Paint(); static { DEBUG_BLUE.setColor(0xff0000ff); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ThemeColors.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ThemeColors.java index 28822f696ea..2f15e904240 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ThemeColors.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ThemeColors.java @@ -790,6 +790,11 @@ public static int[] createDefaultColors() { defaultColors[key_code_comment] = 0x80000000; defaultColors[key_code_function] = 0xFFF28C39; + defaultColors[key_iv_background] = 0xFFFFFFFF; + defaultColors[key_iv_backgroundGray] = 0xfff0f0f0; + defaultColors[key_iv_ab_progress] = 0xff50a8eb; + defaultColors[key_iv_navigationBackground] = 0xfff0f0f0; + return defaultColors; } @@ -1538,6 +1543,10 @@ public static SparseArray<String> createColorKeysMap() { colorKeysMap.put(key_code_number, "code_number"); colorKeysMap.put(key_code_comment, "code_comment"); colorKeysMap.put(key_code_function, "code_function"); + colorKeysMap.put(key_iv_background, "iv_background"); + colorKeysMap.put(key_iv_backgroundGray, "iv_backgroundGray"); + colorKeysMap.put(key_iv_navigationBackground, "iv_navigationBackground"); + colorKeysMap.put(key_iv_ab_progress, "iv_ab_progress"); return colorKeysMap; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/MentionsAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/MentionsAdapter.java index 5a6909ce523..3592a51c0d9 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/MentionsAdapter.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/MentionsAdapter.java @@ -46,6 +46,7 @@ import org.telegram.tgnet.RequestDelegate; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Business.QuickRepliesActivity; @@ -103,7 +104,7 @@ public interface MentionsAdapterDelegate { private TLRPC.TL_inlineBotSwitchPM searchResultBotContextSwitch; private TLRPC.TL_inlineBotWebView searchResultBotWebViewSwitch; private MentionsAdapterDelegate delegate; - private LongSparseArray<TLRPC.BotInfo> botInfo; + private LongSparseArray<TL_bots.BotInfo> botInfo; private int resultStartPosition; private int resultLength; private String lastText; @@ -494,7 +495,7 @@ public void setNeedBotContext(boolean value) { needBotContext = value; } - public void setBotInfo(LongSparseArray<TLRPC.BotInfo> info) { + public void setBotInfo(LongSparseArray<TL_bots.BotInfo> info) { botInfo = info; } @@ -1417,7 +1418,7 @@ public void run() { ArrayList<TLRPC.User> newResultUsers = new ArrayList<>(); String command = result.toString().toLowerCase(); for (int b = 0; b < botInfo.size(); b++) { - TLRPC.BotInfo info = botInfo.valueAt(b); + TL_bots.BotInfo info = botInfo.valueAt(b); for (int a = 0; a < info.commands.size(); a++) { TLRPC.TL_botCommand botCommand = info.commands.get(a); if (botCommand != null && botCommand.command != null && botCommand.command.startsWith(command)) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/MessagesSearchAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/MessagesSearchAdapter.java index 1665b5c8a83..f6411fd6116 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/MessagesSearchAdapter.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/MessagesSearchAdapter.java @@ -86,8 +86,8 @@ public void setStoriesList(StoriesController.SearchStoriesList storiesList) { }; public void searchStories(String hashtag, boolean instant) { - if (hashtag.startsWith("$")) hashtag = ""; - if (hashtag.startsWith("#")) hashtag = hashtag.substring(1); +// if (hashtag.startsWith("$")) hashtag = hashtag.substring(1); +// if (hashtag.startsWith("#")) hashtag = hashtag.substring(1); final String currentHashtag = storiesList == null ? "" : storiesList.query; if (TextUtils.equals(currentHashtag, hashtag)) return; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ArticleViewer.java b/TMessagesProj/src/main/java/org/telegram/ui/ArticleViewer.java index 723e9de94a4..14e4c119eaf 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ArticleViewer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ArticleViewer.java @@ -8,6 +8,9 @@ package org.telegram.ui; +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.AndroidUtilities.lerp; +import static org.telegram.messenger.LocaleController.formatString; import static org.telegram.messenger.LocaleController.getString; import static org.telegram.messenger.MessageObject.POSITION_FLAG_BOTTOM; import static org.telegram.messenger.MessageObject.POSITION_FLAG_LEFT; @@ -31,7 +34,9 @@ import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.ColorFilter; import android.graphics.Paint; +import android.graphics.Path; import android.graphics.PixelFormat; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; @@ -40,9 +45,11 @@ import android.graphics.Typeface; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; +import android.location.LocationListener; import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.os.Looper; import android.text.Editable; import android.text.Layout; import android.text.Spannable; @@ -55,16 +62,14 @@ import android.text.style.DynamicDrawableSpan; import android.text.style.MetricAffectingSpan; import android.text.style.URLSpan; +import android.text.util.Linkify; import android.util.Property; import android.util.SparseArray; import android.util.TypedValue; -import android.view.ActionMode; import android.view.DisplayCutout; import android.view.Gravity; import android.view.HapticFeedbackConstants; import android.view.KeyEvent; -import android.view.Menu; -import android.view.MenuItem; import android.view.MotionEvent; import android.view.SoundEffectConstants; import android.view.Surface; @@ -72,18 +77,18 @@ import android.view.TextureView; import android.view.VelocityTracker; import android.view.View; -import android.view.ViewAnimationUtils; import android.view.ViewConfiguration; import android.view.ViewGroup; import android.view.WindowInsets; import android.view.WindowManager; import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.DecelerateInterpolator; -import android.view.inputmethod.EditorInfo; import android.webkit.CookieManager; import android.webkit.JavascriptInterface; import android.webkit.RenderProcessGoneDetail; +import android.webkit.WebBackForwardList; import android.webkit.WebChromeClient; +import android.webkit.WebHistoryItem; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; @@ -96,8 +101,11 @@ import androidx.annotation.Keep; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.collection.LongSparseArray; import androidx.core.content.ContextCompat; +import androidx.core.graphics.ColorUtils; +import androidx.core.view.ViewCompat; import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManagerFixed; @@ -123,11 +131,13 @@ import org.telegram.messenger.ImageReceiver; import org.telegram.messenger.LocaleController; import org.telegram.messenger.MediaController; +import org.telegram.messenger.MediaDataController; import org.telegram.messenger.MessageObject; import org.telegram.messenger.MessagesController; import org.telegram.messenger.MessagesStorage; import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.R; +import org.telegram.messenger.SendMessagesHelper; import org.telegram.messenger.SharedConfig; import org.telegram.messenger.UserConfig; import org.telegram.messenger.Utilities; @@ -138,31 +148,37 @@ import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.ActionBar; -import org.telegram.ui.ActionBar.ActionBarMenuItem; +import org.telegram.ui.ActionBar.ActionBarLayout; +import org.telegram.ui.ActionBar.ActionBarMenuSubItem; import org.telegram.ui.ActionBar.ActionBarPopupWindow; import org.telegram.ui.ActionBar.AlertDialog; -import org.telegram.ui.ActionBar.BackDrawable; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.BottomSheet; -import org.telegram.ui.ActionBar.SimpleTextView; +import org.telegram.ui.ActionBar.BottomSheetTabDialog; +import org.telegram.ui.ActionBar.BottomSheetTabs; +import org.telegram.ui.ActionBar.BottomSheetTabsOverlay; import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.Cells.CheckBoxCell; import org.telegram.ui.Cells.HeaderCell; import org.telegram.ui.Cells.TextSelectionHelper; import org.telegram.ui.Components.AlertsCreator; import org.telegram.ui.Components.AnchorSpan; import org.telegram.ui.Components.AnimatedArrowDrawable; +import org.telegram.ui.Components.AnimatedColor; +import org.telegram.ui.Components.AnimatedFloat; +import org.telegram.ui.Components.AnimatedTextView; import org.telegram.ui.Components.AnimationProperties; import org.telegram.ui.Components.AvatarDrawable; +import org.telegram.ui.Components.BackupImageView; import org.telegram.ui.Components.BulletinFactory; -import org.telegram.ui.Components.CloseProgressDrawable2; import org.telegram.ui.Components.CombinedDrawable; import org.telegram.ui.Components.ContextProgressView; import org.telegram.ui.Components.CubicBezierInterpolator; -import org.telegram.ui.Components.EditTextBoldCursor; +import org.telegram.ui.Components.ItemOptions; import org.telegram.ui.Components.LayoutHelper; -import org.telegram.ui.Components.LineProgressView; import org.telegram.ui.Components.LinkPath; import org.telegram.ui.Components.LinkSpanDrawable; +import org.telegram.ui.Components.LoadingDrawable; import org.telegram.ui.Components.MediaActionDrawable; import org.telegram.ui.Components.RadialProgress2; import org.telegram.ui.Components.RadioButton; @@ -171,6 +187,7 @@ import org.telegram.ui.Components.SeekBarView; import org.telegram.ui.Components.ShareAlert; import org.telegram.ui.Components.SizeNotifierFrameLayout; +import org.telegram.ui.Components.SmoothScroller; import org.telegram.ui.Components.StaticLayoutEx; import org.telegram.ui.Components.TableLayout; import org.telegram.ui.Components.TextPaintImageReceiverSpan; @@ -182,8 +199,22 @@ import org.telegram.ui.Components.TypefaceSpan; import org.telegram.ui.Components.VideoPlayer; import org.telegram.ui.Components.WebPlayerView; +import org.telegram.ui.Stories.DarkThemeResourceProvider; +import org.telegram.ui.Stories.recorder.ButtonWithCounterView; +import org.telegram.ui.Stories.recorder.KeyboardNotifier; +import org.telegram.ui.web.AddressBarList; +import org.telegram.ui.web.BookmarksFragment; +import org.telegram.ui.web.BotWebViewContainer; +import org.telegram.ui.bots.ChatAttachAlertBotWebViewLayout; +import org.telegram.ui.web.BrowserHistory; +import org.telegram.ui.web.HistoryFragment; +import org.telegram.ui.web.RestrictedDomainsList; +import org.telegram.ui.web.SearchEngine; +import org.telegram.ui.web.WebActionBar; +import org.telegram.ui.web.WebBrowserSettings; import java.io.File; +import java.net.IDN; import java.net.URLDecoder; import java.util.ArrayList; import java.util.Collections; @@ -193,12 +224,20 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDelegate { + public static final boolean BOTTOM_ACTION_BAR = false; + public final boolean isSheet; public final ArticleViewer.Sheet sheet; - public ArticleViewer(boolean sheet, Context context) { - this.isSheet = sheet; - this.sheet = sheet ? new ArticleViewer.Sheet(context) : null; + public ArticleViewer() { + this.isSheet = false; + this.sheet = null; + } + + public ArticleViewer(BaseFragment fragment) { + this.isSheet = true; + this.sheet = new Sheet(fragment); + setParentActivity(fragment.getParentActivity(), fragment); } private Activity parentActivity; @@ -230,20 +269,28 @@ public ArticleViewer(boolean sheet, Context context) { private long transitionAnimationStartTime; private DecelerateInterpolator interpolator = new DecelerateInterpolator(1.5f); - private ArrayList<TLRPC.WebPage> pagesStack = new ArrayList<>(); + public final ArrayList<Object> pagesStack = new ArrayList<>(); + public boolean isLastArticle() { + if (pagesStack.isEmpty()) return false; + Object last = pagesStack.get(pagesStack.size() - 1); + return last instanceof TLRPC.WebPage; + } private WindowManager.LayoutParams windowLayoutParams; private WindowView windowView; private FrameLayout containerView; - private FrameLayout headerView; - private SimpleTextView titleTextView; - private LineProgressView lineProgressView; + private WebActionBar actionBar; + private AddressBarList addressBarList; +// private FrameLayout headerView; +// private SimpleTextView titleTextView; +// private LineProgressView lineProgressView; private Runnable lineProgressTickRunnable; - private ImageView backButton; - private ActionBarMenuItem menuButton; - private FrameLayout menuContainer; +// private ImageView backButton; +// private ActionBarMenuItem menuButton; +// private ActionBarMenuItem collapseButton; +// private FrameLayout menuContainer; private ContextProgressView progressView; - private BackDrawable backDrawable; +// private BackDrawable backDrawable; private Dialog visibleDialog; private Paint backgroundPaint; private Drawable layerShadowDrawable; @@ -253,21 +300,24 @@ public ArticleViewer(boolean sheet, Context context) { private AnimatorSet runAfterKeyboardClose; private boolean keyboardVisible; - private FrameLayout searchContainer; - private ImageView clearButton; - private EditTextBoldCursor searchField; - private boolean animateClear = true; - private boolean ignoreOnTextChange; - private View searchShadow; +// private FrameLayout searchContainer; +// private ImageView clearButton; +// private EditTextBoldCursor searchField; +// private boolean animateClear = true; +// private boolean ignoreOnTextChange; +// private View searchShadow; + private float searchPanelTranslation; private FrameLayout searchPanel; private ImageView searchUpButton; private ImageView searchDownButton; - private SimpleTextView searchCountText; + private AnimatedTextView searchCountText; - private RecyclerListView[] listView; - private LinearLayoutManager[] layoutManager; - private WebpageAdapter[] adapter; + private FrameLayout bulletinContainer; + public PageLayout[] pages; +// private RecyclerListView[] listView; +// private LinearLayoutManager[] layoutManager; +// private WebpageAdapter[] adapter; private AnimatorSet pageSwitchAnimation; @@ -298,6 +348,12 @@ public ArticleViewer(boolean sheet, Context context) { private int pressCount = 0; private CheckForTap pendingCheckForTap = null; + private Browser.Progress loadingProgress; + private TextPaintUrlSpan loadingLink; + private DrawingText loadingText; + private View loadingLinkView; + private LoadingDrawable loadingLinkDrawable; + private LinkSpanDrawable<TextPaintUrlSpan> pressedLink; private LinkSpanDrawable.LinkCollector links = new LinkSpanDrawable.LinkCollector(); private BottomSheet linkSheet; @@ -307,11 +363,6 @@ public ArticleViewer(boolean sheet, Context context) { private boolean drawBlockSelection; private LinkPath urlPath = new LinkPath(); - private static final int search_item = 1; - private static final int share_item = 2; - private static final int open_item = 3; - private static final int settings_item = 4; - private int anchorsOffsetMeasuredWidth; TextSelectionHelper.ArticleTextSelectionHelper textSelectionHelper; @@ -336,15 +387,15 @@ public static ArticleViewer getInstance() { synchronized (ArticleViewer.class) { localInstance = Instance; if (localInstance == null) { - Instance = localInstance = new ArticleViewer(false, null); + Instance = localInstance = new ArticleViewer(); } } } return localInstance; } - public static ArticleViewer makeSheet(Context context) { - return new ArticleViewer(true, context); + public static ArticleViewer makeSheet(BaseFragment fragment) { + return new ArticleViewer(fragment); } public static boolean hasInstance() { @@ -473,7 +524,7 @@ public void draw(Canvas canvas, View view) { width = getWidth(); x = 0; } - canvas.drawRect(-AndroidUtilities.dp(2) + x, 0, x + width + AndroidUtilities.dp(2), getHeight(), urlPaint); + canvas.drawRect(-dp(2) + x, 0, x + width + dp(2), getHeight(), urlPaint); } textLayout.draw(canvas); isDrawing = false; @@ -554,9 +605,9 @@ public TextSizeCell(Context context) { setWillNotDraw(false); textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); - textPaint.setTextSize(AndroidUtilities.dp(16)); + textPaint.setTextSize(dp(16)); - sizeBar = new SeekBarView(context); + sizeBar = new SeekBarView(context, getResourcesProvider()); sizeBar.setReportChanges(true); sizeBar.setSeparatorsCount(endFontSize - startFontSize + 1); sizeBar.setDelegate(new SeekBarView.SeekBarViewDelegate() { @@ -569,7 +620,7 @@ public void onSeekBarDrag(boolean stop, float progress) { SharedPreferences.Editor editor = preferences.edit(); editor.putInt("iv_font_size", SharedConfig.ivFontSize); editor.commit(); - adapter[0].searchTextOffset.clear(); + pages[0].getAdapter().searchTextOffset.clear(); updatePaintSize(); invalidate(); } @@ -594,8 +645,8 @@ public int getStepsCount() { @Override protected void onDraw(Canvas canvas) { - textPaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteValueText)); - canvas.drawText("" + SharedConfig.ivFontSize, getMeasuredWidth() - AndroidUtilities.dp(39), AndroidUtilities.dp(28), textPaint); + textPaint.setColor(getThemedColor(Theme.key_windowBackgroundWhiteValueText)); + canvas.drawText("" + SharedConfig.ivFontSize, getMeasuredWidth() - dp(39), dp(28), textPaint); } @Override @@ -615,7 +666,7 @@ public void invalidate() { } } - public static class FontCell extends FrameLayout { + public class FontCell extends FrameLayout { private TextView textView; private RadioButton radioButton; @@ -623,15 +674,15 @@ public static class FontCell extends FrameLayout { public FontCell(Context context) { super(context); - setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_listSelector), 2)); + setBackgroundDrawable(Theme.createSelectorDrawable(getThemedColor(Theme.key_listSelector), 2)); radioButton = new RadioButton(context); - radioButton.setSize(AndroidUtilities.dp(20)); - radioButton.setColor(Theme.getColor(Theme.key_dialogRadioBackground), Theme.getColor(Theme.key_dialogRadioBackgroundChecked)); + radioButton.setSize(dp(20)); + radioButton.setColor(getThemedColor(Theme.key_dialogRadioBackground), getThemedColor(Theme.key_dialogRadioBackgroundChecked)); addView(radioButton, LayoutHelper.createFrame(22, 22, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, (LocaleController.isRTL ? 0 : 22), 13, (LocaleController.isRTL ? 22 : 0), 0)); textView = new TextView(context); - textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + textView.setTextColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); textView.setLines(1); textView.setMaxLines(1); @@ -642,7 +693,7 @@ public FontCell(Context context) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(48), MeasureSpec.EXACTLY)); + super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(dp(48), MeasureSpec.EXACTLY)); } public void select(boolean value, boolean animated) { @@ -701,6 +752,7 @@ private class WindowView extends FrameLayout { private boolean maybeStartTracking; private boolean startedTracking; private boolean movingPage; + private boolean openingPage; private int startMovingHeaderHeight; private int startedTrackingX; private int startedTrackingY; @@ -717,6 +769,7 @@ public WindowView(Context context) { @TargetApi(21) @Override public WindowInsets dispatchApplyWindowInsets(WindowInsets insets) { + if (sheet != null) return super.dispatchApplyWindowInsets(insets); WindowInsets oldInsets = (WindowInsets) lastInsets; lastInsets = insets; if (oldInsets == null || !oldInsets.toString().equals(insets.toString())) { @@ -765,8 +818,11 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } else { setMeasuredDimension(widthSize, heightSize); } - menuButton.setAdditionalYOffset(-(currentHeaderHeight - AndroidUtilities.dp(56)) / 2 + (Build.VERSION.SDK_INT < 21 ? AndroidUtilities.statusBarHeight : 0)); - keyboardVisible = heightSize < AndroidUtilities.displaySize.y - AndroidUtilities.dp(100); +// menuButton.setAdditionalYOffset(-(currentHeaderHeight - dp(56)) / 2 + (Build.VERSION.SDK_INT < 21 ? AndroidUtilities.statusBarHeight : 0)); +// collapseButton.setAdditionalYOffset(-(currentHeaderHeight - dp(56)) / 2 + (Build.VERSION.SDK_INT < 21 ? AndroidUtilities.statusBarHeight : 0)); + if (sheet == null) { + keyboardVisible = heightSize < AndroidUtilities.displaySize.y - dp(100); + } containerView.measure(View.MeasureSpec.makeMeasureSpec(widthSize, View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(heightSize, View.MeasureSpec.EXACTLY)); fullscreenVideoContainer.measure(View.MeasureSpec.makeMeasureSpec(widthSize, View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(heightSize, View.MeasureSpec.EXACTLY)); } @@ -786,7 +842,11 @@ public boolean dispatchTouchEvent(MotionEvent ev) { } if (selectionOverlay.checkOnTap(ev)) { - ev.setAction(MotionEvent.ACTION_CANCEL); + if (pages != null && pages[0] != null && pages[0].isWeb() && pagesStack != null && pagesStack.size() <= 1) { + ev.setAction(MotionEvent.ACTION_UP); + } else { + ev.setAction(MotionEvent.ACTION_CANCEL); + } } if (ev.getAction() == MotionEvent.ACTION_DOWN && textSelectionHelper.isInSelectionMode() && (ev.getY() < containerView.getTop() || ev.getY() > containerView.getBottom())) { @@ -807,8 +867,8 @@ protected void onLayout(boolean changed, int left, int top, int right, int botto } int width = right - left; if (anchorsOffsetMeasuredWidth != width) { - for (int i = 0; i < listView.length; i++) { - for (HashMap.Entry<String, Integer> entry : adapter[i].anchorsOffset.entrySet()) { + for (int i = 0; i < pages.length; i++) { + for (HashMap.Entry<String, Integer> entry : pages[i].adapter.anchorsOffset.entrySet()) { entry.setValue(-1); } } @@ -902,12 +962,11 @@ protected boolean drawChild(Canvas canvas, View child, long drawingTime) { scrimPaint.setColor((int) (((0x99000000 & 0xff000000) >>> 24) * opacity) << 24); canvas.drawRect(0, 0, translationX, getHeight(), scrimPaint); - final float alpha = Math.max(0, Math.min((width - translationX) / (float) AndroidUtilities.dp(20), 1.0f)); + final float alpha = Math.max(0, Math.min((width - translationX) / (float) dp(20), 1.0f)); layerShadowDrawable.setBounds(translationX - layerShadowDrawable.getIntrinsicWidth(), child.getTop(), translationX, child.getBottom()); layerShadowDrawable.setAlpha((int) (0xff * alpha)); layerShadowDrawable.draw(canvas); } - return result; } @@ -920,20 +979,26 @@ private void prepareForMoving(MotionEvent ev) { maybeStartTracking = false; startedTracking = true; startedTrackingX = (int) ev.getX(); - if (pagesStack.size() > 1) { + if (pagesStack.size() > 1 && (actionBar == null || !actionBar.isSearching() && !actionBar.isAddressing())) { movingPage = true; startMovingHeaderHeight = currentHeaderHeight; - listView[1].setVisibility(VISIBLE); - listView[1].setAlpha(1.0f); - listView[1].setTranslationX(0.0f); - listView[0].setBackgroundColor(backgroundPaint.getColor()); + pages[1].setVisibility(VISIBLE); + pages[1].setAlpha(1.0f); + pages[1].setTranslationX(0.0f); + pages[0].setBackgroundColor(sheet == null ? 0 : backgroundPaint.getColor()); updateInterfaceForCurrentPage(pagesStack.get(pagesStack.size() - 2), true, -1); + if (containerView.indexOfChild(pages[0]) < containerView.indexOfChild(pages[1])) { + int index = containerView.indexOfChild(pages[0]); + containerView.removeView(pages[1]); + containerView.addView(pages[1], index); + } } else { movingPage = false; } cancelCheckLongPress(); } + private boolean lastWebviewAllowedScroll; public boolean handleTouchEvent(MotionEvent event) { if (pageSwitchAnimation == null && !closeAnimationInProgress && fullscreenVideoContainer.getVisibility() != VISIBLE && !textSelectionHelper.isInSelectionMode()) { if (event != null && event.getAction() == MotionEvent.ACTION_DOWN && !startedTracking && !maybeStartTracking) { @@ -951,13 +1016,16 @@ public boolean handleTouchEvent(MotionEvent event) { int dx = Math.max(0, (int) (event.getX() - startedTrackingX)); int dy = Math.abs((int) event.getY() - startedTrackingY); tracker.addMovement(event); - if (maybeStartTracking && !startedTracking && dx >= AndroidUtilities.getPixelsInCM(0.4f, true) && Math.abs(dx) / 3 > dy) { + lastWebviewAllowedScroll = pages[0] == null || !pages[0].isWeb() || pages[0].swipeContainer.allowingScroll(true) && !pages[0].swipeContainer.isScrolling; + if ((sheet == null || !sheet.nestedVerticalScroll) && maybeStartTracking && !startedTracking && dx >= AndroidUtilities.getPixelsInCM(0.4f, true) && Math.abs(dx) / 3 > dy && lastWebviewAllowedScroll) { prepareForMoving(event); } else if (startedTracking) { pressedLinkOwnerLayout = null; pressedLinkOwnerView = null; - if (movingPage) { - listView[0].setTranslationX(dx); + if (movingPage && pages[0] != null) { + pages[0].setTranslationX(dx); + } else if (sheet != null) { + sheet.setBackProgress(dx / (float) getWidth()); } else { containerView.setTranslationX(dx); setInnerTranslationX(dx); @@ -970,74 +1038,96 @@ public boolean handleTouchEvent(MotionEvent event) { tracker.computeCurrentVelocity(1000); float velX = tracker.getXVelocity(); float velY = tracker.getYVelocity(); - if (!startedTracking && velX >= 3500 && velX > Math.abs(velY)) { + if ((sheet == null || !sheet.nestedVerticalScroll) && !startedTracking && velX >= 3500 && velX > Math.abs(velY)) { prepareForMoving(event); } if (startedTracking) { - View movingView = movingPage ? listView[0] : containerView; - float x = movingView.getX(); - final boolean backAnimation = x < movingView.getMeasuredWidth() / 3.0f && (velX < 3500 || velX < velY); + View movingView = movingPage ? pages[0] : containerView; + float x = !movingPage && sheet != null ? sheet.getBackProgress() * sheet.windowView.getWidth() : movingView.getX(); + + final boolean backAnimation = x < movingView.getMeasuredWidth() * .3f && (velX < 2500 || velX < velY) || !lastWebviewAllowedScroll; float distToMove; AnimatorSet animatorSet = new AnimatorSet(); if (!backAnimation) { distToMove = movingView.getMeasuredWidth() - x; if (movingPage) { animatorSet.playTogether( - ObjectAnimator.ofFloat(listView[0], View.TRANSLATION_X, movingView.getMeasuredWidth()) + ObjectAnimator.ofFloat(pages[0], View.TRANSLATION_X, movingView.getMeasuredWidth()) ); } else { - animatorSet.playTogether( + if (sheet != null) { + animatorSet.playTogether( + sheet.animateBackProgressTo(1f) + ); + } else { + animatorSet.playTogether( ObjectAnimator.ofFloat(containerView, View.TRANSLATION_X, movingView.getMeasuredWidth()), ObjectAnimator.ofFloat(this, ARTICLE_VIEWER_INNER_TRANSLATION_X, (float) movingView.getMeasuredWidth()) - ); + ); + } } } else { distToMove = x; if (movingPage) { animatorSet.playTogether( - ObjectAnimator.ofFloat(listView[0], View.TRANSLATION_X, 0) + ObjectAnimator.ofFloat(pages[0], View.TRANSLATION_X, 0) ); } else { - animatorSet.playTogether( + if (sheet != null) { + animatorSet.playTogether( + sheet.animateBackProgressTo(0) + ); + } else { + animatorSet.playTogether( ObjectAnimator.ofFloat(containerView, View.TRANSLATION_X, 0), ObjectAnimator.ofFloat(this, ARTICLE_VIEWER_INNER_TRANSLATION_X, 0.0f) - ); + ); + } } } - animatorSet.setDuration(Math.max((int) (200.0f / movingView.getMeasuredWidth() * distToMove), 50)); + animatorSet.setDuration(Math.max((int) (420.0f / movingView.getMeasuredWidth() * distToMove), 250)); + animatorSet.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); animatorSet.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animator) { if (movingPage) { - listView[0].setBackgroundDrawable(null); + Object removed = null; + pages[0].setBackgroundDrawable(null); if (!backAnimation) { - WebpageAdapter adapterToUpdate = adapter[1]; - adapter[1] = adapter[0]; - adapter[0] = adapterToUpdate; - - RecyclerListView listToUpdate = listView[1]; - listView[1] = listView[0]; - listView[0] = listToUpdate; - - LinearLayoutManager layoutManagerToUpdate = layoutManager[1]; - layoutManager[1] = layoutManager[0]; - layoutManager[0] = layoutManagerToUpdate; + PageLayout pageToUpdate = pages[1]; + pages[1] = pages[0]; + pages[0] = pageToUpdate; + actionBar.swap(); + page0Background.set(pages[0].getBackgroundColor(), true); + page1Background.set(pages[1].getBackgroundColor(), true); + if (sheet != null) { + sheet.updateLastVisible(); + } - pagesStack.remove(pagesStack.size() - 1); + removed = pagesStack.remove(pagesStack.size() - 1); - textSelectionHelper.setParentView(listView[0]); - textSelectionHelper.layoutManager = layoutManager[0]; - titleTextView.setText(adapter[0].currentPage.site_name == null ? "" : adapter[0].currentPage.site_name); + textSelectionHelper.setParentView(pages[0].listView); + textSelectionHelper.layoutManager = pages[0].layoutManager; textSelectionHelper.clear(true); - headerView.invalidate(); + + updateTitle(false); + updatePages(); + } + pages[1].cleanup(); + pages[1].setVisibility(GONE); + if (removed instanceof CachedWeb) { + ((CachedWeb) removed).destroy(); } - listView[1].setVisibility(GONE); - headerView.invalidate(); } else { if (!backAnimation) { - saveCurrentPagePosition(); - onClosed(); + if (sheet != null) { + sheet.release(); + destroy(); + } else { + saveCurrentPagePosition(); + onClosed(); + } } } movingPage = false; @@ -1068,7 +1158,7 @@ public void onAnimationEnd(Animator animator) { textSelectionHelper.clear(); } } - return startedTracking; + return startedTracking && lastWebviewAllowedScroll; } return false; } @@ -1090,23 +1180,25 @@ protected void dispatchDraw(Canvas canvas) { @Override protected void onDraw(Canvas canvas) { - int w = getMeasuredWidth(); - int h = getMeasuredHeight(); - canvas.drawRect(innerTranslationX, 0, w, h, backgroundPaint); - if (Build.VERSION.SDK_INT >= 21 && lastInsets != null) { - WindowInsets insets = (WindowInsets) lastInsets; - canvas.drawRect(innerTranslationX, 0, w, insets.getSystemWindowInsetTop(), statusBarPaint); - if (hasCutout) { - int left = insets.getSystemWindowInsetLeft(); - if (left != 0) { - canvas.drawRect(0, 0, left, h, statusBarPaint); - } - int right = insets.getSystemWindowInsetRight(); - if (right != 0) { - canvas.drawRect(w - right, 0, w, h, statusBarPaint); + if (sheet == null) { + int w = getMeasuredWidth(); + int h = getMeasuredHeight(); + canvas.drawRect(innerTranslationX, 0, w, h, backgroundPaint); + if (Build.VERSION.SDK_INT >= 21 && lastInsets != null) { + WindowInsets insets = (WindowInsets) lastInsets; + canvas.drawRect(innerTranslationX, 0, w, insets.getSystemWindowInsetTop(), statusBarPaint); + if (hasCutout) { + int left = insets.getSystemWindowInsetLeft(); + if (left != 0) { + canvas.drawRect(0, 0, left, h, statusBarPaint); + } + int right = insets.getSystemWindowInsetRight(); + if (right != 0) { + canvas.drawRect(w - right, 0, w, h, statusBarPaint); + } } + canvas.drawRect(0, h - insets.getStableInsetBottom(), w, h, navigationBarPaint); } - canvas.drawRect(0, h - insets.getStableInsetBottom(), w, h, navigationBarPaint); } } @@ -1131,9 +1223,16 @@ public float getAlpha() { @Override public boolean dispatchKeyEventPreIme(KeyEvent event) { if (event != null && event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { - if (searchField.isFocused()) { - searchField.clearFocus(); - AndroidUtilities.hideKeyboard(searchField); + if (actionBar.searchEditText.isFocused()) { + actionBar.searchEditText.clearFocus(); + AndroidUtilities.hideKeyboard(actionBar.searchEditText); + } else if (actionBar.addressEditText.isFocused()) { + actionBar.addressEditText.clearFocus(); + AndroidUtilities.hideKeyboard(actionBar.addressEditText); + } else if (keyboardVisible) { + AndroidUtilities.hideKeyboard(this); + } else if (pages[0] != null && pages[0].isWeb() && pages[0].getWebView() != null && pages[0].getWebView().canGoBack()) { + pages[0].getWebView().goBack(); } else { close(true, false); } @@ -1171,15 +1270,15 @@ public void run() { int[] location = new int[2]; pressedLinkOwnerView.getLocationInWindow(location); - int y = location[1] + pressedLayoutY - AndroidUtilities.dp(54); + int y = location[1] + pressedLayoutY - dp(54); if (y < 0) { y = 0; } pressedLinkOwnerView.invalidate(); drawBlockSelection = true; showPopup(pressedLinkOwnerView, Gravity.TOP, 0, y); - listView[0].setLayoutFrozen(true); - listView[0].setLayoutFrozen(false); + pages[0].listView.setLayoutFrozen(true); + pages[0].listView.setLayoutFrozen(false); } } } @@ -1193,11 +1292,11 @@ private void createPaint(boolean update) { tableLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG); tableLinePaint.setStyle(Paint.Style.STROKE); - tableLinePaint.setStrokeWidth(AndroidUtilities.dp(1)); + tableLinePaint.setStrokeWidth(dp(1)); tableHalfLinePaint = new Paint(); tableHalfLinePaint.setStyle(Paint.Style.STROKE); - tableHalfLinePaint.setStrokeWidth(AndroidUtilities.dp(1) / 2.0f); + tableHalfLinePaint.setStrokeWidth(dp(1) / 2.0f); tableHeaderPaint = new Paint(); tableStripPaint = new Paint(); @@ -1212,35 +1311,35 @@ private void createPaint(boolean update) { return; } - int color2 = Theme.getColor(Theme.key_windowBackgroundWhite); + int color2 = getThemedColor(Theme.key_windowBackgroundWhite); float lightness = (0.2126f * Color.red(color2) + 0.7152f * Color.green(color2) + 0.0722f * Color.blue(color2)) / 255.0f; webpageSearchPaint.setColor(lightness <= 0.705f ? 0xffd1982e : 0xffffe669); - webpageUrlPaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteLinkSelection) & 0x33ffffff); + webpageUrlPaint.setColor(getThemedColor(Theme.key_windowBackgroundWhiteLinkSelection) & 0x33ffffff); webpageUrlPaint.setPathEffect(LinkPath.getRoundedEffect()); - urlPaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteLinkSelection) & 0x33ffffff); + urlPaint.setColor(getThemedColor(Theme.key_windowBackgroundWhiteLinkSelection) & 0x33ffffff); urlPaint.setPathEffect(LinkPath.getRoundedEffect()); - tableHalfLinePaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteInputField)); - tableLinePaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteInputField)); + tableHalfLinePaint.setColor(getThemedColor(Theme.key_windowBackgroundWhiteInputField)); + tableLinePaint.setColor(getThemedColor(Theme.key_windowBackgroundWhiteInputField)); photoBackgroundPaint.setColor(0x0f000000); - dividerPaint.setColor(Theme.getColor(Theme.key_divider)); - webpageMarkPaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteLinkSelection) & 0x33ffffff); + dividerPaint.setColor(getThemedColor(Theme.key_divider)); + webpageMarkPaint.setColor(getThemedColor(Theme.key_windowBackgroundWhiteLinkSelection) & 0x33ffffff); webpageMarkPaint.setPathEffect(LinkPath.getRoundedEffect()); - int color = Theme.getColor(Theme.key_switchTrack); + int color = getThemedColor(Theme.key_switchTrack); int r = Color.red(color); int g = Color.green(color); int b = Color.blue(color); tableStripPaint.setColor(Color.argb(20, r, g, b)); tableHeaderPaint.setColor(Color.argb(34, r, g, b)); - color = Theme.getColor(Theme.key_windowBackgroundWhiteLinkSelection); + color = getThemedColor(Theme.key_windowBackgroundWhiteLinkSelection); r = Color.red(color); g = Color.green(color); b = Color.blue(color); preformattedBackgroundPaint.setColor(Color.argb(20, r, g, b)); - quoteLinePaint.setColor(Theme.getColor(Theme.key_chat_inReplyLine)); + quoteLinePaint.setColor(getThemedColor(Theme.key_chat_inReplyLine)); } private void showCopyPopup(String urlFinal) { @@ -1262,17 +1361,17 @@ private void showCopyPopup(String urlFinal) { builder.setTitle(formattedUrl); builder.setTitleMultipleLines(true); builder.setItems(new CharSequence[]{LocaleController.getString("Open", R.string.Open), LocaleController.getString("Copy", R.string.Copy)}, (dialog, which) -> { - if (parentActivity == null) { + if (parentActivity == null || pages[0].adapter.currentPage == null) { return; } if (which == 0) { int index; if ((index = urlFinal.lastIndexOf('#')) != -1) { String webPageUrl; - if (!TextUtils.isEmpty(adapter[0].currentPage.cached_page.url)) { - webPageUrl = adapter[0].currentPage.cached_page.url.toLowerCase(); + if (!TextUtils.isEmpty(pages[0].adapter.currentPage.cached_page.url)) { + webPageUrl = pages[0].adapter.currentPage.cached_page.url.toLowerCase(); } else { - webPageUrl = adapter[0].currentPage.url.toLowerCase(); + webPageUrl = pages[0].adapter.currentPage.url.toLowerCase(); } String anchor; try { @@ -1282,10 +1381,10 @@ private void showCopyPopup(String urlFinal) { } if (urlFinal.toLowerCase().contains(webPageUrl)) { if (TextUtils.isEmpty(anchor)) { - layoutManager[0].scrollToPositionWithOffset(0, 0); + pages[0].layoutManager.scrollToPositionWithOffset(sheet != null && sheet.halfSize() ? 1 : 0, sheet != null ? dp(56 - 24) : 0); checkScrollAnimated(); } else { - scrollToAnchor(anchor); + scrollToAnchor(anchor, false); } return; } @@ -1315,7 +1414,7 @@ private void showPopup(View parent, int gravity, int x, int y) { if (popupLayout == null) { popupRect = new android.graphics.Rect(); popupLayout = new ActionBarPopupWindow.ActionBarPopupWindowLayout(parentActivity); - popupLayout.setPadding(AndroidUtilities.dp(1), AndroidUtilities.dp(1), AndroidUtilities.dp(1), AndroidUtilities.dp(1)); + popupLayout.setPadding(dp(1), dp(1), dp(1), dp(1)); popupLayout.setBackgroundDrawable(parentActivity.getResources().getDrawable(R.drawable.menu_copy)); popupLayout.setAnimationEnabled(false); popupLayout.setOnTouchListener((v, event) -> { @@ -1337,9 +1436,9 @@ private void showPopup(View parent, int gravity, int x, int y) { popupLayout.setShownFromBottom(false); deleteView = new TextView(parentActivity); - deleteView.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_listSelector), 2)); + deleteView.setBackgroundDrawable(Theme.createSelectorDrawable(getThemedColor(Theme.key_listSelector), 2)); deleteView.setGravity(Gravity.CENTER_VERTICAL); - deleteView.setPadding(AndroidUtilities.dp(20), 0, AndroidUtilities.dp(20), 0); + deleteView.setPadding(dp(20), 0, dp(20), 0); deleteView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15); deleteView.setTypeface(AndroidUtilities.bold()); deleteView.setText(LocaleController.getString("Copy", R.string.Copy).toUpperCase()); @@ -1373,12 +1472,12 @@ private void showPopup(View parent, int gravity, int x, int y) { }); } - deleteView.setTextColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuItem)); + deleteView.setTextColor(getThemedColor(Theme.key_actionBarDefaultSubmenuItem)); if (popupLayout != null) { - popupLayout.setBackgroundColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuBackground)); + popupLayout.setBackgroundColor(getThemedColor(Theme.key_actionBarDefaultSubmenuBackground)); } - popupLayout.measure(View.MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(1000), View.MeasureSpec.AT_MOST), View.MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(1000), View.MeasureSpec.AT_MOST)); + popupLayout.measure(View.MeasureSpec.makeMeasureSpec(dp(1000), View.MeasureSpec.AT_MOST), View.MeasureSpec.makeMeasureSpec(dp(1000), View.MeasureSpec.AT_MOST)); popupWindow.setFocusable(true); popupWindow.showAtLocation(parent, gravity, x, y); popupWindow.startAnimation(); @@ -1575,150 +1674,499 @@ private TLRPC.PageBlock wrapInTableBlock(TLRPC.PageBlock parentBlock, TLRPC.Page return childBlock; } - private void updateInterfaceForCurrentPage(TLRPC.WebPage webPage, boolean previous, int order) { - if (webPage == null || webPage.cached_page == null) { + public PageLayout getCurrentPageLayout() { + return pages[0]; + } + + private void updateInterfaceForCurrentPage(Object obj, boolean previous, int order) { + if (obj == null || !( + obj instanceof TLRPC.WebPage && ((TLRPC.WebPage) obj).cached_page != null || + obj instanceof CachedWeb + )) { return; } if (!previous && order != 0) { - WebpageAdapter adapterToUpdate = adapter[1]; - adapter[1] = adapter[0]; - adapter[0] = adapterToUpdate; - - RecyclerListView listToUpdate = listView[1]; - listView[1] = listView[0]; - listView[0] = listToUpdate; - - LinearLayoutManager layoutManagerToUpdate = layoutManager[1]; - layoutManager[1] = layoutManager[0]; - layoutManager[0] = layoutManagerToUpdate; - - int index1 = containerView.indexOfChild(listView[0]); - int index2 = containerView.indexOfChild(listView[1]); + PageLayout pageToUpdate = pages[1]; + pages[1] = pages[0]; + pages[0] = pageToUpdate; + actionBar.swap(); + page0Background.set(pages[0].getBackgroundColor(), true); + page1Background.set(pages[1].getBackgroundColor(), true); + if (sheet != null) { + sheet.updateLastVisible(); + } + + int index1 = containerView.indexOfChild(pages[0]); + int index2 = containerView.indexOfChild(pages[1]); if (order == 1) { if (index1 < index2) { - containerView.removeView(listView[0]); - containerView.addView(listView[0], index2); + containerView.removeView(pages[0]); + containerView.addView(pages[0], index2); } } else { if (index2 < index1) { - containerView.removeView(listView[0]); - containerView.addView(listView[0], index1); + containerView.removeView(pages[0]); + containerView.addView(pages[0], index1); } } pageSwitchAnimation = new AnimatorSet(); - listView[0].setVisibility(View.VISIBLE); + pages[0].setVisibility(View.VISIBLE); int index = order == 1 ? 0 : 1; - listView[index].setBackgroundColor(backgroundPaint.getColor()); + pages[index].setBackgroundColor(sheet == null ? 0 : backgroundPaint.getColor()); if (Build.VERSION.SDK_INT >= 18) { - listView[index].setLayerType(View.LAYER_TYPE_HARDWARE, null); + pages[index].setLayerType(View.LAYER_TYPE_HARDWARE, null); } if (order == 1) { - pageSwitchAnimation.playTogether(ObjectAnimator.ofFloat(listView[0], View.TRANSLATION_X, AndroidUtilities.dp(56), 0), - ObjectAnimator.ofFloat(listView[0], View.ALPHA, 0.0f, 1.0f)); + pages[0].setTranslationX(AndroidUtilities.displaySize.x); + pageSwitchAnimation.playTogether( + ObjectAnimator.ofFloat(pages[0], View.TRANSLATION_X, AndroidUtilities.displaySize.x, 0) + ); } else if (order == -1) { - listView[0].setAlpha(1.0f); - listView[0].setTranslationX(0.0f); - pageSwitchAnimation.playTogether(ObjectAnimator.ofFloat(listView[1], View.TRANSLATION_X, 0, AndroidUtilities.dp(56)), - ObjectAnimator.ofFloat(listView[1], View.ALPHA, 1.0f, 0.0f)); +// pages[0].setAlpha(1.0f); + pages[0].setTranslationX(0.0f); + pageSwitchAnimation.playTogether( + ObjectAnimator.ofFloat(pages[1], View.TRANSLATION_X, 0, AndroidUtilities.displaySize.x)//, +// ObjectAnimator.ofFloat(pages[1], View.ALPHA, 1.0f, 0.0f) + ); } - pageSwitchAnimation.setDuration(150); - pageSwitchAnimation.setInterpolator(interpolator); + pageSwitchAnimation.setDuration(320); + pageSwitchAnimation.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); pageSwitchAnimation.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { - listView[1].setVisibility(View.GONE); - textSelectionHelper.setParentView(listView[0]); - textSelectionHelper.layoutManager = layoutManager[0]; - listView[index].setBackgroundDrawable(null); + pages[1].cleanup(); + pages[1].setVisibility(View.GONE); + textSelectionHelper.setParentView(pages[0].listView); + textSelectionHelper.layoutManager = pages[0].layoutManager; + pages[index].setBackgroundDrawable(null); if (Build.VERSION.SDK_INT >= 18) { - listView[index].setLayerType(View.LAYER_TYPE_NONE, null); + pages[index].setLayerType(View.LAYER_TYPE_NONE, null); } pageSwitchAnimation = null; + windowView.openingPage = false; } }); - pageSwitchAnimation.start(); + windowView.openingPage = true; + actionBar.setMenuColors(pages[0] != null && SharedConfig.adaptableColorInBrowser ? pages[0].getBackgroundColor() : getThemedColor(Theme.key_iv_background)); + actionBar.setColors(pages[0] != null && SharedConfig.adaptableColorInBrowser ? pages[0].getActionBarColor() : getThemedColor(Theme.key_iv_background), true); + actionBar.setIsTonsite(pages[0] != null && pages[0].isTonsite()); + AndroidUtilities.runOnUIThread(pageSwitchAnimation::start); } + + final int index = previous ? 1 : 0; if (!previous) { - titleTextView.setText(webPage.site_name == null ? "" : webPage.site_name); textSelectionHelper.clear(true); - headerView.invalidate(); } - int index = previous ? 1 : 0; - TLRPC.WebPage page = previous ? pagesStack.get(pagesStack.size() - 2) : webPage; - adapter[index].isRtl = webPage.cached_page.rtl; - adapter[index].cleanup(); - adapter[index].currentPage = page; + final WebpageAdapter adapter = pages[index].adapter; - int numBlocks = 0; - int count = page.cached_page.blocks.size(); - for (int a = 0; a < count; a++) { - TLRPC.PageBlock block = page.cached_page.blocks.get(a); - if (a == 0) { - block.first = true; - if (block instanceof TLRPC.TL_pageBlockCover) { - TLRPC.TL_pageBlockCover pageBlockCover = (TLRPC.TL_pageBlockCover) block; - TLRPC.RichText caption = getBlockCaption(pageBlockCover, 0); - TLRPC.RichText credit = getBlockCaption(pageBlockCover, 1); - if ((caption != null && !(caption instanceof TLRPC.TL_textEmpty) || credit != null && !(credit instanceof TLRPC.TL_textEmpty)) && count > 1) { - TLRPC.PageBlock next = page.cached_page.blocks.get(1); - if (next instanceof TLRPC.TL_pageBlockChannel) { - adapter[index].channelBlock = (TLRPC.TL_pageBlockChannel) next; + Object page = previous ? pagesStack.get(pagesStack.size() - 2) : obj; + pages[index].cleanup(); + if (page instanceof TLRPC.WebPage) { + TLRPC.WebPage webPage = (TLRPC.WebPage) page; + + pages[index].setWeb(null); + pages[index].setType(PageLayout.TYPE_ARTICLE); + adapter.isRtl = webPage.cached_page.rtl; + adapter.currentPage = webPage; + + int numBlocks = 0; + int count = webPage.cached_page.blocks.size(); + for (int a = 0; a < count; a++) { + TLRPC.PageBlock block = webPage.cached_page.blocks.get(a); + if (a == 0) { + block.first = true; + if (block instanceof TLRPC.TL_pageBlockCover) { + TLRPC.TL_pageBlockCover pageBlockCover = (TLRPC.TL_pageBlockCover) block; + TLRPC.RichText caption = getBlockCaption(pageBlockCover, 0); + TLRPC.RichText credit = getBlockCaption(pageBlockCover, 1); + if ((caption != null && !(caption instanceof TLRPC.TL_textEmpty) || credit != null && !(credit instanceof TLRPC.TL_textEmpty)) && count > 1) { + TLRPC.PageBlock next = webPage.cached_page.blocks.get(1); + if (next instanceof TLRPC.TL_pageBlockChannel) { + adapter.channelBlock = (TLRPC.TL_pageBlockChannel) next; + } } } + } else if (a == 1 && adapter.channelBlock != null) { + continue; } - } else if (a == 1 && adapter[index].channelBlock != null) { - continue; + adapter.addBlock(adapter, block, 0, 0, a == count - 1 ? a : 0); } - adapter[index].addBlock(adapter[index], block, 0, 0, a == count - 1 ? a : 0); - } - adapter[index].notifyDataSetChanged(); + adapter.notifyDataSetChanged(); - if (pagesStack.size() == 1 || order == -1) { - SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("articles", Activity.MODE_PRIVATE); - String key = "article" + page.id; - int position = preferences.getInt(key, -1); - int offset; - if (preferences.getBoolean(key + "r", true) == AndroidUtilities.displaySize.x > AndroidUtilities.displaySize.y) { - offset = preferences.getInt(key + "o", 0) - listView[index].getPaddingTop(); + if (pagesStack.size() == 1 || order == -1) { + SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("articles", Activity.MODE_PRIVATE); + String key = "article" + webPage.id; + int position = preferences.getInt(key, -1); + int offset; + if (preferences.getBoolean(key + "r", true) == AndroidUtilities.displaySize.x > AndroidUtilities.displaySize.y) { + offset = preferences.getInt(key + "o", 0) - pages[index].listView.getPaddingTop(); + } else { + offset = dp(10); + } + if (position != -1) { + pages[index].layoutManager.scrollToPositionWithOffset(position, offset); + } } else { - offset = AndroidUtilities.dp(10); + pages[index].layoutManager.scrollToPositionWithOffset(sheet != null && sheet.halfSize() ? 1 : 0, sheet != null ? dp(56 - 24) : 0); } - if (position != -1) { - layoutManager[index].scrollToPositionWithOffset(position, offset); - } - } else { - layoutManager[index].scrollToPositionWithOffset(0, 0); + } else if (page instanceof CachedWeb) { + pages[index].setType(PageLayout.TYPE_WEB); + pages[index].scrollToTop(false); + pages[index].setWeb((CachedWeb) page); } if (!previous) { checkScrollAnimated(); } + + updateTitle(false); + updatePages(); + } + + public BotWebViewContainer.MyWebView getLastWebView() { + if (pages[0] != null && pages[0].isWeb()) { + if (pages[0].getWebView() == null) { + pages[0].webViewContainer.checkCreateWebView(); + } + return pages[0].getWebView(); + } + return null; } private boolean addPageToStack(TLRPC.WebPage webPage, String anchor, int order) { saveCurrentPagePosition(); pagesStack.add(webPage); - showSearch(false); + actionBar.showSearch(false, true); updateInterfaceForCurrentPage(webPage, false, order); - return scrollToAnchor(anchor); + return scrollToAnchor(anchor, false); + } + + private boolean addPageToStack(String url, int order) { + saveCurrentPagePosition(); + CachedWeb web = new CachedWeb(url); + pagesStack.add(web); + actionBar.showSearch(false, true); + updateInterfaceForCurrentPage(web, false, order); + return false; + } + + private void goBack() { + if (pagesStack.size() <= 1) { + windowView.movingPage = false; + windowView.startedTracking = false; + View movingView = containerView; + float x = sheet != null ? sheet.getBackProgress() * sheet.windowView.getWidth() : movingView.getX(); + final boolean backAnimation = false; + float distToMove; + AnimatorSet animatorSet = new AnimatorSet(); + distToMove = movingView.getMeasuredWidth() - x; + if (sheet != null) { + animatorSet.playTogether(sheet.animateBackProgressTo(1f)); + } else { + animatorSet.playTogether( + ObjectAnimator.ofFloat(containerView, View.TRANSLATION_X, movingView.getMeasuredWidth()), + ObjectAnimator.ofFloat(windowView, ARTICLE_VIEWER_INNER_TRANSLATION_X, (float) movingView.getMeasuredWidth()) + ); + } + + animatorSet.setDuration(Math.max((int) (420.0f / movingView.getMeasuredWidth() * distToMove), 250)); + animatorSet.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + animatorSet.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animator) { + if (windowView.movingPage) { + Object removed = null; + pages[0].setBackgroundDrawable(null); + if (!backAnimation) { + PageLayout pageToUpdate = pages[1]; + pages[1] = pages[0]; + pages[0] = pageToUpdate; + actionBar.swap(); + page0Background.set(pages[0].getBackgroundColor(), true); + page1Background.set(pages[1].getBackgroundColor(), true); + if (sheet != null) { + sheet.updateLastVisible(); + } + + removed = pagesStack.remove(pagesStack.size() - 1); + + textSelectionHelper.setParentView(pages[0].listView); + textSelectionHelper.layoutManager = pages[0].layoutManager; + textSelectionHelper.clear(true); + + updateTitle(false); + updatePages(); + } + pages[1].cleanup(); + pages[1].setVisibility(View.GONE); + if (removed instanceof CachedWeb) { + ((CachedWeb) removed).destroy(); + } + } else { + if (!backAnimation) { + if (sheet != null) { + sheet.release(); + destroy(); + } else { + saveCurrentPagePosition(); + onClosed(); + } + } + } + windowView.movingPage = false; + windowView.startedTracking = false; + closeAnimationInProgress = false; + } + }); + animatorSet.start(); + closeAnimationInProgress = true; + return; + } + windowView.openingPage = true; + pages[1].setVisibility(View.VISIBLE); + pages[1].setAlpha(1.0f); + pages[1].setTranslationX(0.0f); + pages[0].setBackgroundColor(sheet == null ? 0 : backgroundPaint.getColor()); + updateInterfaceForCurrentPage(pagesStack.get(pagesStack.size() - 2), true, -1); + + View movingView = pages[0]; + float x = movingView.getX(); + final boolean backAnimation = false; + float distToMove; + AnimatorSet animatorSet = new AnimatorSet(); + if (!backAnimation) { + distToMove = movingView.getMeasuredWidth() - x; + animatorSet.playTogether( + ObjectAnimator.ofFloat(pages[0], View.TRANSLATION_X, movingView.getMeasuredWidth()) + ); + } else { + distToMove = x; + animatorSet.playTogether( + ObjectAnimator.ofFloat(pages[0], View.TRANSLATION_X, 0) + ); + } + + animatorSet.setDuration(420); + animatorSet.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + animatorSet.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animator) { + if (windowView.openingPage) { + Object removed = null; + pages[0].setBackgroundDrawable(null); + if (!backAnimation) { + PageLayout pageToUpdate = pages[1]; + pages[1] = pages[0]; + pages[0] = pageToUpdate; + actionBar.swap(); + page0Background.set(pages[0].getBackgroundColor(), true); + page1Background.set(pages[1].getBackgroundColor(), true); + if (sheet != null) { + sheet.updateLastVisible(); + } + + removed = pagesStack.remove(pagesStack.size() - 1); + + textSelectionHelper.setParentView(pages[0].listView); + textSelectionHelper.layoutManager = pages[0].layoutManager; + textSelectionHelper.clear(true); + + updateTitle(false); + updatePages(); + } + pages[1].cleanup(); + pages[1].setVisibility(View.GONE); + if (removed instanceof CachedWeb) { + ((CachedWeb) removed).destroy(); + } + } else { + if (!backAnimation) { + saveCurrentPagePosition(); + onClosed(); + } + } + windowView.openingPage = false; + windowView.startedTracking = false; + closeAnimationInProgress = false; + } + }); + animatorSet.start(); + actionBar.setMenuColors(pages[0] != null && SharedConfig.adaptableColorInBrowser ? pages[0].getBackgroundColor() : getThemedColor(Theme.key_iv_background)); + actionBar.setColors(pages[0] != null && SharedConfig.adaptableColorInBrowser ? pages[0].getActionBarColor() : getThemedColor(Theme.key_iv_background), true); + actionBar.setIsTonsite(pages[0] != null && pages[0].isTonsite()); + closeAnimationInProgress = true; + } + + private void goBack(int intoIndex) { + if (pagesStack.size() <= 1) { + windowView.movingPage = false; + windowView.startedTracking = false; + View movingView = containerView; + float x = sheet != null ? sheet.getBackProgress() * sheet.windowView.getWidth() : movingView.getX(); + final boolean backAnimation = false; + float distToMove; + AnimatorSet animatorSet = new AnimatorSet(); + distToMove = movingView.getMeasuredWidth() - x; + if (sheet != null) { + animatorSet.playTogether( + sheet.animateBackProgressTo(1f) + ); + } else { + animatorSet.playTogether( + ObjectAnimator.ofFloat(containerView, View.TRANSLATION_X, movingView.getMeasuredWidth()), + ObjectAnimator.ofFloat(windowView, ARTICLE_VIEWER_INNER_TRANSLATION_X, (float) movingView.getMeasuredWidth()) + ); + } + + animatorSet.setDuration(Math.max((int) (420.0f / movingView.getMeasuredWidth() * distToMove), 250)); + animatorSet.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + animatorSet.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animator) { + if (windowView.movingPage) { + Object removed = null; + pages[0].setBackgroundDrawable(null); + if (!backAnimation) { + PageLayout pageToUpdate = pages[1]; + pages[1] = pages[0]; + pages[0] = pageToUpdate; + actionBar.swap(); + page0Background.set(pages[0].getBackgroundColor(), true); + page1Background.set(pages[1].getBackgroundColor(), true); + if (sheet != null) { + sheet.updateLastVisible(); + } + + removed = pagesStack.remove(pagesStack.size() - 1); + + textSelectionHelper.setParentView(pages[0].listView); + textSelectionHelper.layoutManager = pages[0].layoutManager; + textSelectionHelper.clear(true); + + updateTitle(false); + updatePages(); + } + pages[1].cleanup(); + pages[1].setVisibility(View.GONE); + if (removed instanceof CachedWeb) { + ((CachedWeb) removed).destroy(); + } + } else { + if (!backAnimation) { + if (sheet != null) { + sheet.release(); + destroy(); + } else { + saveCurrentPagePosition(); + onClosed(); + } + } + } + windowView.movingPage = false; + windowView.startedTracking = false; + closeAnimationInProgress = false; + } + }); + animatorSet.start(); + closeAnimationInProgress = true; + return; + } + + windowView.openingPage = true; + pages[1].setVisibility(View.VISIBLE); + pages[1].setAlpha(1.0f); + pages[1].setTranslationX(0.0f); + pages[0].setBackgroundColor(sheet == null ? 0 : backgroundPaint.getColor()); + updateInterfaceForCurrentPage(pagesStack.get(intoIndex), true, -1); + + View movingView = pages[0]; + float x = movingView.getX(); + final boolean backAnimation = false; + float distToMove; + AnimatorSet animatorSet = new AnimatorSet(); + if (!backAnimation) { + distToMove = movingView.getMeasuredWidth() - x; + animatorSet.playTogether( + ObjectAnimator.ofFloat(pages[0], View.TRANSLATION_X, movingView.getMeasuredWidth()) + ); + } else { + distToMove = x; + animatorSet.playTogether( + ObjectAnimator.ofFloat(pages[0], View.TRANSLATION_X, 0) + ); + } + + animatorSet.setDuration(420); + animatorSet.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + animatorSet.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animator) { + if (windowView.openingPage) { + ArrayList<Object> removed = new ArrayList<>(); + pages[0].setBackgroundDrawable(null); + if (!backAnimation) { + PageLayout pageToUpdate = pages[1]; + pages[1] = pages[0]; + pages[0] = pageToUpdate; + actionBar.swap(); + page0Background.set(pages[0].getBackgroundColor(), true); + page1Background.set(pages[1].getBackgroundColor(), true); + if (sheet != null) { + sheet.updateLastVisible(); + } + + for (int i = pagesStack.size() - 1; i > intoIndex; --i) { + removed.add(pagesStack.remove(i)); + } + + textSelectionHelper.setParentView(pages[0].listView); + textSelectionHelper.layoutManager = pages[0].layoutManager; + textSelectionHelper.clear(true); + + updateTitle(false); + updatePages(); + } + pages[1].cleanup(); + pages[1].setVisibility(View.GONE); + for (Object obj : removed) { + if (obj instanceof CachedWeb) { + ((CachedWeb) obj).destroy(); + } + } + } else { + if (!backAnimation) { + saveCurrentPagePosition(); + onClosed(); + } + } + windowView.openingPage = false; + windowView.startedTracking = false; + closeAnimationInProgress = false; + } + }); + animatorSet.start(); + actionBar.setMenuColors(pages[0] != null && SharedConfig.adaptableColorInBrowser ? pages[0].getBackgroundColor() : getThemedColor(Theme.key_iv_background)); + actionBar.setColors(pages[0] != null && SharedConfig.adaptableColorInBrowser ? pages[0].getActionBarColor() : getThemedColor(Theme.key_iv_background), true); + actionBar.setIsTonsite(pages[0] != null && pages[0].isTonsite()); + closeAnimationInProgress = true; } - private boolean scrollToAnchor(String anchor) { + private boolean scrollToAnchor(String anchor, boolean animated) { if (TextUtils.isEmpty(anchor)) { return false; } anchor = anchor.toLowerCase(); - Integer row = adapter[0].anchors.get(anchor); + Integer row = pages[0].adapter.anchors.get(anchor); if (row != null) { - TLRPC.TL_textAnchor textAnchor = adapter[0].anchorsParent.get(anchor); + TLRPC.TL_textAnchor textAnchor = pages[0].adapter.anchorsParent.get(anchor); if (textAnchor != null) { TLRPC.TL_pageBlockParagraph paragraph = new TLRPC.TL_pageBlockParagraph(); paragraph.text = textAnchor.text; - int type = adapter[0].getTypeForBlock(paragraph); - RecyclerView.ViewHolder holder = adapter[0].onCreateViewHolder(null, type); - adapter[0].bindBlockToHolder(type, holder, paragraph, 0, 0); + int type = pages[0].adapter.getTypeForBlock(paragraph); + RecyclerView.ViewHolder holder = pages[0].adapter.onCreateViewHolder(null, type); + pages[0].adapter.bindBlockToHolder(type, holder, paragraph, 0, 0); BottomSheet.Builder builder = new BottomSheet.Builder(parentActivity); builder.setApplyTopPadding(false); @@ -1746,10 +2194,10 @@ protected void onDraw(Canvas canvas) { textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); textView.setTypeface(AndroidUtilities.bold()); textView.setText(LocaleController.getString("InstantViewReference", R.string.InstantViewReference)); - textView.setGravity((adapter[0].isRtl ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL); + textView.setGravity((pages[0].adapter.isRtl ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL); textView.setTextColor(getTextColor()); - textView.setPadding(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(18), 0); - linearLayout.addView(textView, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, AndroidUtilities.dp(48) + 1)); + textView.setPadding(dp(18), 0, dp(18), 0); + linearLayout.addView(textView, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dp(48) + 1)); holder.itemView.setTag(BOTTOM_SHEET_VIEW_TAG); linearLayout.addView(holder.itemView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 7, 0, 0)); @@ -1783,7 +2231,7 @@ public boolean dispatchTouchEvent(MotionEvent ev) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); - heightMeasureSpec = MeasureSpec.makeMeasureSpec(linearLayout.getMeasuredHeight() + AndroidUtilities.dp(8), MeasureSpec.EXACTLY); + heightMeasureSpec = MeasureSpec.makeMeasureSpec(linearLayout.getMeasuredHeight() + dp(8), MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } }; @@ -1807,31 +2255,31 @@ public boolean canDismiss() { } showDialog(linkSheet = builder.create()); } else { - if (row < 0 || row >= adapter[0].blocks.size()) { + if (row < 0 || row >= pages[0].adapter.blocks.size()) { return false; } - TLRPC.PageBlock originalBlock = adapter[0].blocks.get(row); + TLRPC.PageBlock originalBlock = pages[0].adapter.blocks.get(row); TLRPC.PageBlock block = getLastNonListPageBlock(originalBlock); if (block instanceof TL_pageBlockDetailsChild) { if (openAllParentBlocks((TL_pageBlockDetailsChild) block)) { - adapter[0].updateRows(); - adapter[0].notifyDataSetChanged(); + pages[0].adapter.updateRows(); + pages[0].adapter.notifyDataSetChanged(); } } - int position = adapter[0].localBlocks.indexOf(originalBlock); + int position = pages[0].adapter.localBlocks.indexOf(originalBlock); if (position != -1) { row = position; } - Integer offset = adapter[0].anchorsOffset.get(anchor); + Integer offset = pages[0].adapter.anchorsOffset.get(anchor); if (offset != null) { if (offset == -1) { - int type = adapter[0].getTypeForBlock(originalBlock); - RecyclerView.ViewHolder holder = adapter[0].onCreateViewHolder(null, type); - adapter[0].bindBlockToHolder(type, holder, originalBlock, 0, 0); - holder.itemView.measure(View.MeasureSpec.makeMeasureSpec(listView[0].getMeasuredWidth(), View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); - offset = adapter[0].anchorsOffset.get(anchor); + int type = pages[0].adapter.getTypeForBlock(originalBlock); + RecyclerView.ViewHolder holder = pages[0].adapter.onCreateViewHolder(null, type); + pages[0].adapter.bindBlockToHolder(type, holder, originalBlock, 0, 0); + holder.itemView.measure(View.MeasureSpec.makeMeasureSpec(pages[0].listView.getMeasuredWidth(), View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); + offset = pages[0].adapter.anchorsOffset.get(anchor); if (offset == -1) { offset = 0; } @@ -1839,7 +2287,14 @@ public boolean canDismiss() { } else { offset = 0; } - layoutManager[0].scrollToPositionWithOffset(row, currentHeaderHeight - AndroidUtilities.dp(56) - offset); + if (animated) { + SmoothScroller s = new SmoothScroller(pages[0].getContext()); + s.setTargetPosition(row + (sheet != null && sheet.halfSize() ? 1 : 0)); + s.setOffset((- dp(56) - offset)); + pages[0].layoutManager.startSmoothScroll(s); + } else { + pages[0].layoutManager.scrollToPositionWithOffset(row, - dp(56) - offset); + } } return true; } @@ -1850,7 +2305,10 @@ private boolean removeLastPageFromStack() { if (pagesStack.size() < 2) { return false; } - pagesStack.remove(pagesStack.size() - 1); + Object removed = pagesStack.remove(pagesStack.size() - 1); + if (removed instanceof CachedWeb) { + ((CachedWeb) removed).destroy(); + } updateInterfaceForCurrentPage(pagesStack.get(pagesStack.size() - 1), false, -1); return true; } @@ -1895,28 +2353,28 @@ protected void cancelCheckLongPress() { private static final int TEXT_FLAG_SUP = 256; private static final int TEXT_FLAG_WEBPAGE_URL = 512; - private static TextPaint audioTimePaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); + private static final TextPaint audioTimePaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); private static TextPaint errorTextPaint; - private static SparseArray<TextPaint> photoCaptionTextPaints = new SparseArray<>(); - private static SparseArray<TextPaint> photoCreditTextPaints = new SparseArray<>(); - private static SparseArray<TextPaint> titleTextPaints = new SparseArray<>(); - private static SparseArray<TextPaint> kickerTextPaints = new SparseArray<>(); - private static SparseArray<TextPaint> headerTextPaints = new SparseArray<>(); - private static SparseArray<TextPaint> subtitleTextPaints = new SparseArray<>(); - private static SparseArray<TextPaint> subheaderTextPaints = new SparseArray<>(); - private static SparseArray<TextPaint> authorTextPaints = new SparseArray<>(); - private static SparseArray<TextPaint> footerTextPaints = new SparseArray<>(); - private static SparseArray<TextPaint> paragraphTextPaints = new SparseArray<>(); - private static SparseArray<TextPaint> listTextPaints = new SparseArray<>(); - private static SparseArray<TextPaint> preformattedTextPaints = new SparseArray<>(); - private static SparseArray<TextPaint> quoteTextPaints = new SparseArray<>(); - private static SparseArray<TextPaint> embedPostTextPaints = new SparseArray<>(); - private static SparseArray<TextPaint> embedPostCaptionTextPaints = new SparseArray<>(); - private static SparseArray<TextPaint> mediaCaptionTextPaints = new SparseArray<>(); - private static SparseArray<TextPaint> mediaCreditTextPaints = new SparseArray<>(); - private static SparseArray<TextPaint> relatedArticleTextPaints = new SparseArray<>(); - private static SparseArray<TextPaint> detailsTextPaints = new SparseArray<>(); - private static SparseArray<TextPaint> tableTextPaints = new SparseArray<>(); + private static final SparseArray<TextPaint> photoCaptionTextPaints = new SparseArray<>(); + private static final SparseArray<TextPaint> photoCreditTextPaints = new SparseArray<>(); + private static final SparseArray<TextPaint> titleTextPaints = new SparseArray<>(); + private static final SparseArray<TextPaint> kickerTextPaints = new SparseArray<>(); + private static final SparseArray<TextPaint> headerTextPaints = new SparseArray<>(); + private static final SparseArray<TextPaint> subtitleTextPaints = new SparseArray<>(); + private static final SparseArray<TextPaint> subheaderTextPaints = new SparseArray<>(); + private static final SparseArray<TextPaint> authorTextPaints = new SparseArray<>(); + private static final SparseArray<TextPaint> footerTextPaints = new SparseArray<>(); + private static final SparseArray<TextPaint> paragraphTextPaints = new SparseArray<>(); + private static final SparseArray<TextPaint> listTextPaints = new SparseArray<>(); + private static final SparseArray<TextPaint> preformattedTextPaints = new SparseArray<>(); + private static final SparseArray<TextPaint> quoteTextPaints = new SparseArray<>(); + private static final SparseArray<TextPaint> embedPostTextPaints = new SparseArray<>(); + private static final SparseArray<TextPaint> embedPostCaptionTextPaints = new SparseArray<>(); + private static final SparseArray<TextPaint> mediaCaptionTextPaints = new SparseArray<>(); + private static final SparseArray<TextPaint> mediaCreditTextPaints = new SparseArray<>(); + private static final SparseArray<TextPaint> relatedArticleTextPaints = new SparseArray<>(); + private static final SparseArray<TextPaint> detailsTextPaints = new SparseArray<>(); + private static final SparseArray<TextPaint> tableTextPaints = new SparseArray<>(); private static TextPaint embedPostAuthorPaint; private static TextPaint embedPostDatePaint; @@ -2122,8 +2580,8 @@ private CharSequence getText(TLRPC.WebPage page, View parentView, TLRPC.RichText TLRPC.Document document = WebPageUtils.getDocumentWithId(page, textImage.document_id); if (document != null) { SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder("*"); - int w = AndroidUtilities.dp(textImage.w); - int h = AndroidUtilities.dp(textImage.h); + int w = dp(textImage.w); + int h = dp(textImage.h); maxWidth = Math.abs(maxWidth); if (w > maxWidth) { float scale = maxWidth / (float) w; @@ -2131,7 +2589,7 @@ private CharSequence getText(TLRPC.WebPage page, View parentView, TLRPC.RichText h *= scale; } if (parentView != null) { - int color = Theme.getColor(Theme.key_windowBackgroundWhite); + int color = getThemedColor(Theme.key_windowBackgroundWhite); float lightness = (0.2126f * Color.red(color) + 0.7152f * Color.green(color) + 0.0722f * Color.blue(color)) / 255.0f; spannableStringBuilder.setSpan(new TextPaintImageReceiverSpan(parentView, document, page, w, h, false, lightness <= 0.705f), 0, spannableStringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } @@ -2210,194 +2668,194 @@ public static String getUrl(TLRPC.RichText richText) { } private int getTextColor() { - return Theme.getColor(Theme.key_windowBackgroundWhiteBlackText); + return getThemedColor(Theme.key_windowBackgroundWhiteBlackText); } private int getLinkTextColor() { - return Theme.getColor(Theme.key_windowBackgroundWhiteLinkText); + return getThemedColor(Theme.key_windowBackgroundWhiteLinkText); } - private static int getGrayTextColor() { - return Theme.getColor(Theme.key_windowBackgroundWhiteGrayText); + private int getGrayTextColor() { + return getThemedColor(Theme.key_windowBackgroundWhiteGrayText); } private TextPaint getTextPaint(TLRPC.RichText parentRichText, TLRPC.RichText richText, TLRPC.PageBlock parentBlock) { int flags = getTextFlags(richText); SparseArray<TextPaint> currentMap = null; - int textSize = AndroidUtilities.dp(14); + int textSize = dp(14); int textColor = 0xffff0000; - int additionalSize = AndroidUtilities.dp(SharedConfig.ivFontSize - 16); + int additionalSize = dp(SharedConfig.ivFontSize - 16); if (parentBlock instanceof TLRPC.TL_pageBlockPhoto) { TLRPC.TL_pageBlockPhoto pageBlockPhoto = (TLRPC.TL_pageBlockPhoto) parentBlock; if (pageBlockPhoto.caption.text == richText || pageBlockPhoto.caption.text == parentRichText) { currentMap = photoCaptionTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); } else { currentMap = photoCreditTextPaints; - textSize = AndroidUtilities.dp(12); + textSize = dp(12); } textColor = getGrayTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockMap) { TLRPC.TL_pageBlockMap pageBlockMap = (TLRPC.TL_pageBlockMap) parentBlock; if (pageBlockMap.caption.text == richText || pageBlockMap.caption.text == parentRichText) { currentMap = photoCaptionTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); } else { currentMap = photoCreditTextPaints; - textSize = AndroidUtilities.dp(12); + textSize = dp(12); } textColor = getGrayTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockTitle) { currentMap = titleTextPaints; - textSize = AndroidUtilities.dp(23); + textSize = dp(23); textColor = getTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockKicker) { currentMap = kickerTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); textColor = getTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockAuthorDate) { currentMap = authorTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); textColor = getGrayTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockFooter) { currentMap = footerTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); textColor = getGrayTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockSubtitle) { currentMap = subtitleTextPaints; - textSize = AndroidUtilities.dp(20); + textSize = dp(20); textColor = getTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockHeader) { currentMap = headerTextPaints; - textSize = AndroidUtilities.dp(20); + textSize = dp(20); textColor = getTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockSubheader) { currentMap = subheaderTextPaints; - textSize = AndroidUtilities.dp(17); + textSize = dp(17); textColor = getTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockBlockquote) { TLRPC.TL_pageBlockBlockquote pageBlockBlockquote = (TLRPC.TL_pageBlockBlockquote) parentBlock; if (pageBlockBlockquote.text == parentRichText) { currentMap = quoteTextPaints; - textSize = AndroidUtilities.dp(15); + textSize = dp(15); textColor = getTextColor(); } else if (pageBlockBlockquote.caption == parentRichText) { currentMap = photoCaptionTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); textColor = getGrayTextColor(); } } else if (parentBlock instanceof TLRPC.TL_pageBlockPullquote) { TLRPC.TL_pageBlockPullquote pageBlockBlockquote = (TLRPC.TL_pageBlockPullquote) parentBlock; if (pageBlockBlockquote.text == parentRichText) { currentMap = quoteTextPaints; - textSize = AndroidUtilities.dp(15); + textSize = dp(15); textColor = getTextColor(); } else if (pageBlockBlockquote.caption == parentRichText) { currentMap = photoCaptionTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); textColor = getGrayTextColor(); } } else if (parentBlock instanceof TLRPC.TL_pageBlockPreformatted) { currentMap = preformattedTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); textColor = getTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockParagraph) { currentMap = paragraphTextPaints; - textSize = AndroidUtilities.dp(16); + textSize = dp(16); textColor = getTextColor(); } else if (isListItemBlock(parentBlock)) { currentMap = listTextPaints; - textSize = AndroidUtilities.dp(16); + textSize = dp(16); textColor = getTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockEmbed) { TLRPC.TL_pageBlockEmbed pageBlockEmbed = (TLRPC.TL_pageBlockEmbed) parentBlock; if (pageBlockEmbed.caption.text == richText || pageBlockEmbed.caption.text == parentRichText) { currentMap = photoCaptionTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); } else { currentMap = photoCreditTextPaints; - textSize = AndroidUtilities.dp(12); + textSize = dp(12); } textColor = getGrayTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockSlideshow) { TLRPC.TL_pageBlockSlideshow pageBlockSlideshow = (TLRPC.TL_pageBlockSlideshow) parentBlock; if (pageBlockSlideshow.caption.text == richText || pageBlockSlideshow.caption.text == parentRichText) { currentMap = photoCaptionTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); } else { currentMap = photoCreditTextPaints; - textSize = AndroidUtilities.dp(12); + textSize = dp(12); } textColor = getGrayTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockCollage) { TLRPC.TL_pageBlockCollage pageBlockCollage = (TLRPC.TL_pageBlockCollage) parentBlock; if (pageBlockCollage.caption.text == richText || pageBlockCollage.caption.text == parentRichText) { currentMap = photoCaptionTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); } else { currentMap = photoCreditTextPaints; - textSize = AndroidUtilities.dp(12); + textSize = dp(12); } textColor = getGrayTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockEmbedPost) { TLRPC.TL_pageBlockEmbedPost pageBlockEmbedPost = (TLRPC.TL_pageBlockEmbedPost) parentBlock; if (richText == pageBlockEmbedPost.caption.text) { currentMap = photoCaptionTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); textColor = getGrayTextColor(); } else if (richText == pageBlockEmbedPost.caption.credit) { currentMap = photoCreditTextPaints; - textSize = AndroidUtilities.dp(12); + textSize = dp(12); textColor = getGrayTextColor(); } else if (richText != null) { currentMap = embedPostTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); textColor = getTextColor(); } } else if (parentBlock instanceof TLRPC.TL_pageBlockVideo) { TLRPC.TL_pageBlockVideo pageBlockVideo = (TLRPC.TL_pageBlockVideo) parentBlock; if (richText == pageBlockVideo.caption.text) { currentMap = mediaCaptionTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); } else { currentMap = mediaCreditTextPaints; - textSize = AndroidUtilities.dp(12); + textSize = dp(12); } textColor = getTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockAudio) { TLRPC.TL_pageBlockAudio pageBlockAudio = (TLRPC.TL_pageBlockAudio) parentBlock; if (richText == pageBlockAudio.caption.text) { currentMap = mediaCaptionTextPaints; - textSize = AndroidUtilities.dp(14); + textSize = dp(14); } else { currentMap = mediaCreditTextPaints; - textSize = AndroidUtilities.dp(12); + textSize = dp(12); } textColor = getTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockRelatedArticles) { currentMap = relatedArticleTextPaints; - textSize = AndroidUtilities.dp(15); + textSize = dp(15); textColor = getGrayTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockDetails) { currentMap = detailsTextPaints; - textSize = AndroidUtilities.dp(15); + textSize = dp(15); textColor = getTextColor(); } else if (parentBlock instanceof TLRPC.TL_pageBlockTable) { currentMap = tableTextPaints; - textSize = AndroidUtilities.dp(15); + textSize = dp(15); textColor = getTextColor(); } if ((flags & TEXT_FLAG_SUP) != 0 || (flags & TEXT_FLAG_SUB) != 0) { - textSize -= AndroidUtilities.dp(4); + textSize -= dp(4); } if (currentMap == null) { if (errorTextPaint == null) { errorTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); errorTextPaint.setColor(0xffff0000); } - errorTextPaint.setTextSize(AndroidUtilities.dp(14)); + errorTextPaint.setTextSize(dp(14)); return errorTextPaint; } TextPaint paint = currentMap.get(flags); @@ -2443,9 +2901,9 @@ private TextPaint getTextPaint(TLRPC.RichText parentRichText, TLRPC.RichText ric textColor = getLinkTextColor(); } if ((flags & TEXT_FLAG_SUP) != 0) { - paint.baselineShift -= AndroidUtilities.dp(6.0f); + paint.baselineShift -= dp(6.0f); } else if ((flags & TEXT_FLAG_SUB) != 0) { - paint.baselineShift += AndroidUtilities.dp(2.0f); + paint.baselineShift += dp(2.0f); } paint.setColor(textColor); currentMap.put(flags, paint); @@ -2467,7 +2925,7 @@ private DrawingText createLayoutForText(View parentView, CharSequence plainText, return null; } if (width < 0) { - width = AndroidUtilities.dp(10); + width = dp(10); } CharSequence text; @@ -2480,7 +2938,7 @@ private DrawingText createLayoutForText(View parentView, CharSequence plainText, return null; } - int additionalSize = AndroidUtilities.dp(SharedConfig.ivFontSize - 16); + int additionalSize = dp(SharedConfig.ivFontSize - 16); TextPaint paint; if (parentBlock instanceof TLRPC.TL_pageBlockEmbedPost && richText == null) { @@ -2490,14 +2948,14 @@ private DrawingText createLayoutForText(View parentView, CharSequence plainText, embedPostAuthorPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); embedPostAuthorPaint.setColor(getTextColor()); } - embedPostAuthorPaint.setTextSize(AndroidUtilities.dp(15) + additionalSize); + embedPostAuthorPaint.setTextSize(dp(15) + additionalSize); paint = embedPostAuthorPaint; } else { if (embedPostDatePaint == null) { embedPostDatePaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); embedPostDatePaint.setColor(getGrayTextColor()); } - embedPostDatePaint.setTextSize(AndroidUtilities.dp(14) + additionalSize); + embedPostDatePaint.setTextSize(dp(14) + additionalSize); paint = embedPostDatePaint; } } else if (parentBlock instanceof TLRPC.TL_pageBlockChannel) { @@ -2509,10 +2967,10 @@ private DrawingText createLayoutForText(View parentView, CharSequence plainText, channelNamePhotoPaint.setTypeface(AndroidUtilities.bold()); } channelNamePaint.setColor(getTextColor()); - channelNamePaint.setTextSize(AndroidUtilities.dp(15)); + channelNamePaint.setTextSize(dp(15)); channelNamePhotoPaint.setColor(0xffffffff); - channelNamePhotoPaint.setTextSize(AndroidUtilities.dp(15)); + channelNamePhotoPaint.setTextSize(dp(15)); paint = parentAdapter.channelBlock != null ? channelNamePhotoPaint : channelNamePaint; } else if (parentBlock instanceof TL_pageBlockRelatedArticlesChild) { @@ -2523,14 +2981,14 @@ private DrawingText createLayoutForText(View parentView, CharSequence plainText, relatedArticleHeaderPaint.setTypeface(AndroidUtilities.bold()); } relatedArticleHeaderPaint.setColor(getTextColor()); - relatedArticleHeaderPaint.setTextSize(AndroidUtilities.dp(15) + additionalSize); + relatedArticleHeaderPaint.setTextSize(dp(15) + additionalSize); paint = relatedArticleHeaderPaint; } else { if (relatedArticleTextPaint == null) { relatedArticleTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); } relatedArticleTextPaint.setColor(getGrayTextColor()); - relatedArticleTextPaint.setTextSize(AndroidUtilities.dp(14) + additionalSize); + relatedArticleTextPaint.setTextSize(dp(14) + additionalSize); paint = relatedArticleTextPaint; } } else if (isListItemBlock(parentBlock) && plainText != null) { @@ -2542,8 +3000,8 @@ private DrawingText createLayoutForText(View parentView, CharSequence plainText, listTextNumPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); listTextNumPaint.setColor(getTextColor()); } - listTextPointerPaint.setTextSize(AndroidUtilities.dp(19) + additionalSize); - listTextNumPaint.setTextSize(AndroidUtilities.dp(16) + additionalSize); + listTextPointerPaint.setTextSize(dp(19) + additionalSize); + listTextNumPaint.setTextSize(dp(16) + additionalSize); if (parentBlock instanceof TL_pageBlockListItem && !((TL_pageBlockListItem) parentBlock).parent.pageBlockList.ordered) { paint = listTextPointerPaint; } else { @@ -2558,7 +3016,7 @@ private DrawingText createLayoutForText(View parentView, CharSequence plainText, if (parentBlock instanceof TLRPC.TL_pageBlockPullquote) { result = StaticLayoutEx.createStaticLayout(text, paint, width, Layout.Alignment.ALIGN_CENTER, 1.0f, 0.0f, false, TextUtils.TruncateAt.END, width, maxLines); } else { - result = StaticLayoutEx.createStaticLayout(text, paint, width, align, 1.0f, AndroidUtilities.dp(4), false, TextUtils.TruncateAt.END, width, maxLines); + result = StaticLayoutEx.createStaticLayout(text, paint, width, align, 1.0f, dp(4), false, TextUtils.TruncateAt.END, width, maxLines); } } else { if (text.charAt(text.length() - 1) == '\n') { @@ -2567,7 +3025,7 @@ private DrawingText createLayoutForText(View parentView, CharSequence plainText, if (parentBlock instanceof TLRPC.TL_pageBlockPullquote) { result = new StaticLayout(text, paint, width, Layout.Alignment.ALIGN_CENTER, 1.0f, 0.0f, false); } else { - result = new StaticLayout(text, paint, width, align, 1.0f, AndroidUtilities.dp(4), false); + result = new StaticLayout(text, paint, width, align, 1.0f, dp(4), false); } } if (result == null) { @@ -2584,7 +3042,7 @@ private DrawingText createLayoutForText(View parentView, CharSequence plainText, while ((index = lowerString.indexOf(searchText, startIndex)) >= 0) { startIndex = index + searchText.length(); if (index == 0 || AndroidUtilities.isPunctuationCharacter(lowerString.charAt(index - 1))) { - adapter[0].searchTextOffset.put(searchText + parentBlock + richText + index, textY + result.getLineTop(result.getLineForOffset(index))); + pages[0].adapter.searchTextOffset.put(searchText + parentBlock + richText + index, textY + result.getLineTop(result.getLineForOffset(index))); } } } @@ -2616,7 +3074,7 @@ private DrawingText createLayoutForText(View parentView, CharSequence plainText, int end = spanned.getSpanEnd(innerSpans[a]); textPath.setCurrentLayout(result, start, 0); int shift = innerSpans[a].getTextPaint() != null ? innerSpans[a].getTextPaint().baselineShift : 0; - textPath.setBaselineShift(shift != 0 ? shift + AndroidUtilities.dp(shift > 0 ? 5 : -2) : 0); + textPath.setBaselineShift(shift != 0 ? shift + dp(shift > 0 ? 5 : -2) : 0); result.getSelectionPath(start, end, textPath); } textPath.setAllowReset(true); @@ -2634,7 +3092,7 @@ private DrawingText createLayoutForText(View parentView, CharSequence plainText, int end = spanned.getSpanEnd(innerSpans[a]); markPath.setCurrentLayout(result, start, 0); int shift = innerSpans[a].getTextPaint() != null ? innerSpans[a].getTextPaint().baselineShift : 0; - markPath.setBaselineShift(shift != 0 ? shift + AndroidUtilities.dp(shift > 0 ? 5 : -2) : 0); + markPath.setBaselineShift(shift != 0 ? shift + dp(shift > 0 ? 5 : -2) : 0); result.getSelectionPath(start, end, markPath); } markPath.setAllowReset(true); @@ -2702,14 +3160,14 @@ private boolean checkLayoutForLinks(WebpageAdapter adapter, MotionEvent event, V links.removeLink(pressedLink); } pressedLink = new LinkSpanDrawable(selectedLink, null, x, y); - pressedLink.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteLinkSelection) & 0x33ffffff); + pressedLink.setColor(getThemedColor(Theme.key_windowBackgroundWhiteLinkSelection) & 0x33ffffff); links.addLink(pressedLink, pressedLinkOwnerLayout); try { LinkPath path = pressedLink.obtainNewPath(); path.setCurrentLayout(layout, pressedStart, 0); TextPaint textPaint = selectedLink.getTextPaint(); int shift = textPaint != null ? textPaint.baselineShift : 0; - path.setBaselineShift(shift != 0 ? shift + AndroidUtilities.dp(shift > 0 ? 5 : -2) : 0); + path.setBaselineShift(shift != 0 ? shift + dp(shift > 0 ? 5 : -2) : 0); layout.getSelectionPath(pressedStart, pressedEnd, path); parentView.invalidate(); } catch (Exception e) { @@ -2749,10 +3207,10 @@ private boolean checkLayoutForLinks(WebpageAdapter adapter, MotionEvent event, V } if (url.toLowerCase().contains(webPageUrl)) { if (TextUtils.isEmpty(anchor)) { - layoutManager[0].scrollToPositionWithOffset(0, 0); + pages[0].layoutManager.scrollToPositionWithOffset(0, 0); checkScrollAnimated(); } else { - scrollToAnchor(anchor); + scrollToAnchor(anchor, true); } isAnchor = true; } @@ -2760,7 +3218,7 @@ private boolean checkLayoutForLinks(WebpageAdapter adapter, MotionEvent event, V anchor = null; } if (!isAnchor) { - openWebpageUrl(pressedLink.getSpan().getUrl(), anchor); + openWebpageUrl(pressedLink.getSpan().getUrl(), anchor, pressedLinkOwnerLayout == null ? null : makeProgress(pressedLink, pressedLinkOwnerLayout)); } } } @@ -2784,6 +3242,46 @@ private boolean checkLayoutForLinks(WebpageAdapter adapter, MotionEvent event, V } } + private Browser.Progress makeProgress(LinkSpanDrawable<TextPaintUrlSpan> link, DrawingText text) { + if (link == null) return null; + return new Browser.Progress() { + @Override + public void init() { + loadingText = text; + loadingLinkView = text != null ? text.latestParentView : null; + loadingLink = link.getSpan(); + + links.removeLoading(loadingLinkDrawable, true); + if (text != null) { + loadingLinkDrawable = LinkSpanDrawable.LinkCollector.makeLoading(text.textLayout, link.getSpan(), 0); + final int color = getThemedColor(Theme.key_chat_linkSelectBackground); + loadingLinkDrawable.setColors( + Theme.multAlpha(color, .8f), + Theme.multAlpha(color, 1.3f), + Theme.multAlpha(color, 1f), + Theme.multAlpha(color, 4f) + ); + loadingLinkDrawable.strokePaint.setStrokeWidth(AndroidUtilities.dpf2(1.25f)); + links.addLoading(loadingLinkDrawable, text); + } + + if (loadingLinkView != null) { + loadingLinkView.invalidate(); + } + super.init(); + } + @Override + public void end() { + links.removeLoading(loadingLinkDrawable, true); + if (loadingLinkView != null) { + loadingLinkView.invalidate(); + } + loadingLink = null; + super.end(); + } + }; + } + private void removePressedLink() { if (pressedLink == null && pressedLinkOwnerView == null) { return; @@ -2798,11 +3296,47 @@ private void removePressedLink() { } } - private void openWebpageUrl(String url, String anchor) { + private void openWebpageUrl(String url, String anchor, Browser.Progress progress) { + if (loadingProgress != null) { + loadingProgress.cancel(); + } + loadingProgress = progress; if (openUrlReqId != 0) { ConnectionsManager.getInstance(currentAccount).cancelRequest(openUrlReqId, false); openUrlReqId = 0; } + + final boolean[] forceBrowser = new boolean[1]; + if (Browser.openInExternalApp(parentActivity, url, false)) { + if (pagesStack.isEmpty()) { + if (sheet != null) { + sheet.dismiss(false); + } + } + return; + } + Utilities.Callback0Return<Boolean> checkInternal = () -> { + if (!Browser.isInternalUri(Uri.parse(url), forceBrowser)) { + return false; + } + if (progress != null) { + progress.onEnd(() -> { + if (sheet != null) { + sheet.dismiss(true); + } + if (loadingProgress == progress) { + loadingProgress = null; + } + }); + } else { + if (sheet != null) { + sheet.dismiss(true); + } + } + Browser.openUrl(parentActivity, Uri.parse(url), true, true, false, progress, null, true); + return true; + }; + int reqId = ++lastReqId; showProgressView(true, true); final TLRPC.TL_messages_getWebPage req = new TLRPC.TL_messages_getWebPage(); @@ -2812,6 +3346,9 @@ private void openWebpageUrl(String url, String anchor) { if (openUrlReqId == 0 || reqId != lastReqId) { return; } + if (progress != null) { + progress.end(); + } openUrlReqId = 0; showProgressView(true, false); if (isVisible) { @@ -2821,27 +3358,40 @@ private void openWebpageUrl(String url, String anchor) { MessagesController.getInstance(currentAccount).putChats(res.chats, false); if (res.webpage != null && res.webpage.cached_page instanceof TLRPC.TL_page) { addPageToStack(res.webpage, anchor, 1); - } else { - Browser.openUrl(parentActivity, req.url); + } else if (!checkInternal.run()) { + addPageToStack(req.url, 1); } } else if (response instanceof TLRPC.TL_webPage && ((TLRPC.TL_webPage) response).cached_page instanceof TLRPC.TL_page) { addPageToStack((TLRPC.TL_webPage) response, anchor, 1); - } else { - Browser.openUrl(parentActivity, req.url); + } else if (!checkInternal.run()) { + addPageToStack(req.url, 1); } } })); + if (progress != null) { + progress.onCancel(() -> { + if (lastReqId == reqId && openUrlReqId != 0) { + ConnectionsManager.getInstance(currentAccount).cancelRequest(openUrlReqId, false); + openUrlReqId = 0; + } + if (loadingProgress == progress) { + loadingProgress = null; + } + }); + progress.init(); + } + } @Override public void didReceivedNotification(int id, int account, Object... args) { if (id == NotificationCenter.messagePlayingDidStart) { MessageObject messageObject = (MessageObject) args[0]; - if (listView != null) { - for (int i = 0; i < listView.length; i++) { - int count = listView[i].getChildCount(); + if (pages != null) { + for (int i = 0; i < pages.length; i++) { + int count = pages[i].listView.getChildCount(); for (int a = 0; a < count; a++) { - View view = listView[i].getChildAt(a); + View view = pages[i].listView.getChildAt(a); if (view instanceof BlockAudioCell) { BlockAudioCell cell = (BlockAudioCell) view; cell.updateButtonState(true); @@ -2850,11 +3400,11 @@ public void didReceivedNotification(int id, int account, Object... args) { } } } else if (id == NotificationCenter.messagePlayingDidReset || id == NotificationCenter.messagePlayingPlayStateChanged) { - if (listView != null) { - for (int i = 0; i < listView.length; i++) { - int count = listView[i].getChildCount(); + if (pages != null) { + for (int i = 0; i < pages.length; i++) { + int count = pages[i].listView.getChildCount(); for (int a = 0; a < count; a++) { - View view = listView[i].getChildAt(a); + View view = pages[i].listView.getChildAt(a); if (view instanceof BlockAudioCell) { BlockAudioCell cell = (BlockAudioCell) view; MessageObject messageObject = cell.getMessageObject(); @@ -2867,11 +3417,11 @@ public void didReceivedNotification(int id, int account, Object... args) { } } else if (id == NotificationCenter.messagePlayingProgressDidChanged) { Integer mid = (Integer) args[0]; - if (listView != null) { - for (int i = 0; i < listView.length; i++) { - int count = listView[i].getChildCount(); + if (pages != null) { + for (int i = 0; i < pages.length; i++) { + int count = pages[i].listView.getChildCount(); for (int a = 0; a < count; a++) { - View view = listView[i].getChildAt(a); + View view = pages[i].listView.getChildAt(a); if (view instanceof BlockAudioCell) { BlockAudioCell cell = (BlockAudioCell) view; MessageObject playing = cell.getMessageObject(); @@ -2896,20 +3446,21 @@ public void updateThemeColors(float progress) { refreshThemeColors(); updatePaintColors(); if (windowView != null) { - listView[0].invalidateViews(); - listView[1].invalidateViews(); + pages[0].listView.invalidateViews(); + pages[1].listView.invalidateViews(); windowView.invalidate(); searchPanel.invalidate(); if (progress == 1) { - adapter[0].notifyDataSetChanged(); - adapter[1].notifyDataSetChanged(); + pages[0].adapter.notifyDataSetChanged(); + pages[1].adapter.notifyDataSetChanged(); } } } private void updatePaintSize() { for (int i = 0; i < 2; i++) { - adapter[i].notifyDataSetChanged(); + pages[i].adapter.notifyDataSetChanged(); + pages[i].adapter.resetCachedHeights(); } } @@ -2982,10 +3533,10 @@ private void updateFontEntry(int flags, TextPaint paint, Typeface typefaceNormal } private void updatePaintColors() { - backgroundPaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - for (int i = 0; i < listView.length; i++) { - listView[i].setGlowColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - } + backgroundPaint.setColor(getThemedColor(Theme.key_iv_background)); +// for (int i = 0; i < pages.length; i++) { +// pages[i].listView.setGlowColor(getThemedColor(Theme.key_windowBackgroundWhite)); +// } if (listTextPointerPaint != null) { listTextPointerPaint.setColor(getTextColor()); @@ -3041,6 +3592,7 @@ private void setMapColors(SparseArray<TextPaint> map) { for (int a = 0; a < map.size(); a++) { int flags = map.keyAt(a); TextPaint paint = map.valueAt(a); + if (paint == null) continue; if ((flags & TEXT_FLAG_URL) != 0 || (flags & TEXT_FLAG_WEBPAGE_URL) != 0) { paint.setColor(getLinkTextColor()); } else { @@ -3051,7 +3603,7 @@ private void setMapColors(SparseArray<TextPaint> map) { public void setParentActivity(Activity activity, BaseFragment fragment) { parentFragment = fragment; - currentAccount = fragment != null ? fragment.getCurrentAccount() : UserConfig.selectedAccount; + currentAccount = fragment != null && !(fragment instanceof EmptyBaseFragment) ? fragment.getCurrentAccount() : UserConfig.selectedAccount; NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.messagePlayingProgressDidChanged); NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.messagePlayingDidReset); NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.messagePlayingPlayStateChanged); @@ -3081,15 +3633,15 @@ public void setParentActivity(Activity activity, BaseFragment fragment) { @Override protected boolean drawChild(Canvas canvas, View child, long drawingTime) { - if (windowView.movingPage) { + if (windowView != null && (windowView.movingPage || windowView.openingPage)) { int width = getMeasuredWidth(); - int translationX = (int) listView[0].getTranslationX(); + int translationX = (int) pages[0].getTranslationX(); int clipLeft = 0; int clipRight = width; - if (child == listView[1]) { + if (child == pages[1]) { clipRight = translationX; - } else if (child == listView[0]) { + } else if (child == pages[0]) { clipLeft = translationX; } @@ -3099,12 +3651,12 @@ protected boolean drawChild(Canvas canvas, View child, long drawingTime) { canvas.restoreToCount(restoreCount); if (translationX != 0) { - if (child == listView[0]) { - final float alpha = Math.max(0, Math.min((width - translationX) / (float) AndroidUtilities.dp(20), 1.0f)); + if (child == pages[0]) { + final float alpha = Math.max(0, Math.min((width - translationX) / (float) dp(20), 1.0f)); layerShadowDrawable.setBounds(translationX - layerShadowDrawable.getIntrinsicWidth(), child.getTop(), translationX, child.getBottom()); layerShadowDrawable.setAlpha((int) (0xff * alpha)); layerShadowDrawable.draw(canvas); - } else if (child == listView[1]) { + } else if (child == pages[1]) { float opacity = Math.min(0.8f, (width - translationX) / (float) width); if (opacity < 0) { opacity = 0; @@ -3127,7 +3679,7 @@ public void invalidate() { }; windowView.addView(containerView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.LEFT)); //containerView.setFitsSystemWindows(true); - if (Build.VERSION.SDK_INT >= 21) { + if (Build.VERSION.SDK_INT >= 21 && sheet == null) { windowView.setFitsSystemWindows(true); containerView.setOnApplyWindowInsetsListener((v, insets) -> { if (Build.VERSION.SDK_INT >= 30) { @@ -3150,79 +3702,12 @@ public void invalidate() { fullscreenTextureView = new TextureView(activity); - listView = new RecyclerListView[2]; - adapter = new WebpageAdapter[2]; - layoutManager = new LinearLayoutManager[2]; - for (int i = 0; i < listView.length; i++) { - WebpageAdapter webpageAdapter = adapter[i] = new WebpageAdapter(parentActivity); - listView[i] = new RecyclerListView(activity) { - @Override - protected void onLayout(boolean changed, int l, int t, int r, int b) { - super.onLayout(changed, l, t, r, b); - int count = getChildCount(); - for (int a = 0; a < count; a++) { - View child = getChildAt(a); - if (child.getTag() instanceof Integer) { - Integer tag = (Integer) child.getTag(); - if (tag == 90) { - int bottom = child.getBottom(); - if (bottom < getMeasuredHeight()) { - int height = getMeasuredHeight(); - child.layout(0, height - child.getMeasuredHeight(), child.getMeasuredWidth(), height); - break; - } - } - } - } - } - - @Override - public boolean onInterceptTouchEvent(MotionEvent e) { - if (pressedLinkOwnerLayout != null && pressedLink == null && (popupWindow == null || !popupWindow.isShowing()) && (e.getAction() == MotionEvent.ACTION_UP || e.getAction() == MotionEvent.ACTION_CANCEL)) { - pressedLink = null; - pressedLinkOwnerLayout = null; - pressedLinkOwnerView = null; - } else if (pressedLinkOwnerLayout != null && pressedLink != null && e.getAction() == MotionEvent.ACTION_UP) { - checkLayoutForLinks(webpageAdapter, e, pressedLinkOwnerView, pressedLinkOwnerLayout, 0, 0); - } - return super.onInterceptTouchEvent(e); - } - - @Override - public boolean onTouchEvent(MotionEvent e) { - if (pressedLinkOwnerLayout != null && pressedLink == null && (popupWindow == null || !popupWindow.isShowing()) && (e.getAction() == MotionEvent.ACTION_UP || e.getAction() == MotionEvent.ACTION_CANCEL)) { - pressedLink = null; - pressedLinkOwnerLayout = null; - pressedLinkOwnerView = null; - } - return super.onTouchEvent(e); - } - - @Override - public void setTranslationX(float translationX) { - super.setTranslationX(translationX); - if (windowView.movingPage) { - containerView.invalidate(); - float progress = translationX / getMeasuredWidth(); - setCurrentHeaderHeight((int) (windowView.startMovingHeaderHeight + (AndroidUtilities.dp(56) - windowView.startMovingHeaderHeight) * progress)); - } - } - - @Override - protected void dispatchDraw(Canvas canvas) { - checkVideoPlayer(); - super.dispatchDraw(canvas); - } - }; - ((DefaultItemAnimator) listView[i].getItemAnimator()).setDelayAnimations(false); - listView[i].setLayoutManager(layoutManager[i] = new LinearLayoutManager(parentActivity, LinearLayoutManager.VERTICAL, false)); - listView[i].setAdapter(webpageAdapter); - listView[i].setClipToPadding(false); - listView[i].setVisibility(i == 0 ? View.VISIBLE : View.GONE); - listView[i].setPadding(0, AndroidUtilities.dp(56), 0, 0); - listView[i].setTopGlowOffset(AndroidUtilities.dp(56)); - containerView.addView(listView[i], LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); - listView[i].setOnItemLongClickListener((view, position) -> { + pages = new PageLayout[2]; + for (int i = 0; i < pages.length; i++) { + PageLayout page = pages[i] = new PageLayout(activity, getResourcesProvider()); + page.setVisibility(i == 0 ? View.VISIBLE : View.GONE); + containerView.addView(page, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL, 0, !BOTTOM_ACTION_BAR && sheet != null && !sheet.halfSize() ? 56 : 0, 0, BOTTOM_ACTION_BAR && sheet != null && !sheet.halfSize() ? 24 : 0)); + page.listView.setOnItemLongClickListener((view, position) -> { if (view instanceof BlockRelatedArticlesCell) { BlockRelatedArticlesCell cell = (BlockRelatedArticlesCell) view; showCopyPopup(cell.currentBlock.parent.articles.get(cell.currentBlock.num).url); @@ -3230,7 +3715,11 @@ protected void dispatchDraw(Canvas canvas) { } return false; }); - listView[i].setOnItemClickListener((view, position, x, y) -> { + page.listView.setOnItemClickListener((view, position, x, y) -> { + if (sheet != null) { + position--; + if (position < 0) return; + } if (textSelectionHelper != null) { if (textSelectionHelper.isInSelectionMode()) { textSelectionHelper.clear(); @@ -3238,17 +3727,18 @@ protected void dispatchDraw(Canvas canvas) { } textSelectionHelper.clear(); } - if (view instanceof ReportCell && webpageAdapter.currentPage != null) { + final WebpageAdapter adapter = page.getAdapter(); + if (view instanceof ReportCell && adapter.currentPage != null) { ReportCell cell = (ReportCell) view; if (previewsReqId != 0 || cell.hasViews && x < view.getMeasuredWidth() / 2) { return; } TLObject object = MessagesController.getInstance(currentAccount).getUserOrChat("previews"); if (object instanceof TLRPC.TL_user) { - openPreviewsChat((TLRPC.User) object, webpageAdapter.currentPage.id); + openPreviewsChat((TLRPC.User) object, adapter.currentPage.id); } else { final int currentAccount = UserConfig.selectedAccount; - final long pageId = webpageAdapter.currentPage.id; + final long pageId = adapter.currentPage.id; showProgressView(true, true); TLRPC.TL_contacts_resolveUsername req = new TLRPC.TL_contacts_resolveUsername(); req.username = "previews"; @@ -3268,8 +3758,8 @@ protected void dispatchDraw(Canvas canvas) { } })); } - } else if (position >= 0 && position < webpageAdapter.localBlocks.size()) { - TLRPC.PageBlock pageBlock = webpageAdapter.localBlocks.get(position); + } else if (position >= 0 && position < adapter.localBlocks.size()) { + TLRPC.PageBlock pageBlock = adapter.localBlocks.get(position); TLRPC.PageBlock originalBlock = pageBlock; pageBlock = getLastNonListPageBlock(pageBlock); if (pageBlock instanceof TL_pageBlockDetailsChild) { @@ -3282,7 +3772,7 @@ protected void dispatchDraw(Canvas canvas) { close(false, true); } else if (pageBlock instanceof TL_pageBlockRelatedArticlesChild) { TL_pageBlockRelatedArticlesChild pageBlockRelatedArticlesChild = (TL_pageBlockRelatedArticlesChild) pageBlock; - openWebpageUrl(pageBlockRelatedArticlesChild.parent.articles.get(pageBlockRelatedArticlesChild.num).url, null); + openWebpageUrl(pageBlockRelatedArticlesChild.parent.articles.get(pageBlockRelatedArticlesChild.num).url, null, null); } else if (pageBlock instanceof TLRPC.TL_pageBlockDetails) { view = getLastNonListCell(view); if (!(view instanceof BlockDetailsCell)) { @@ -3291,16 +3781,16 @@ protected void dispatchDraw(Canvas canvas) { pressedLinkOwnerLayout = null; pressedLinkOwnerView = null; - int index = webpageAdapter.blocks.indexOf(originalBlock); + int index = adapter.blocks.indexOf(originalBlock); if (index < 0) { return; } TLRPC.TL_pageBlockDetails pageBlockDetails = (TLRPC.TL_pageBlockDetails) pageBlock; pageBlockDetails.open = !pageBlockDetails.open; - int oldCount = webpageAdapter.getItemCount(); - webpageAdapter.updateRows(); - int newCount = webpageAdapter.getItemCount(); + int oldCount = adapter.getItemCount(); + adapter.updateRows(); + int newCount = adapter.getItemCount(); int changeCount = Math.abs(newCount - oldCount); BlockDetailsCell cell = (BlockDetailsCell) view; @@ -3308,99 +3798,198 @@ protected void dispatchDraw(Canvas canvas) { cell.invalidate(); if (changeCount != 0) { if (pageBlockDetails.open) { - webpageAdapter.notifyItemRangeInserted(position + 1, changeCount); + adapter.notifyItemRangeInserted(position + 1, changeCount); } else { - webpageAdapter.notifyItemRangeRemoved(position + 1, changeCount); + adapter.notifyItemRangeRemoved(position + 1, changeCount); } } } } }); - listView[i].setOnScrollListener(new RecyclerView.OnScrollListener() { - - @Override - public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { - if (newState == RecyclerView.SCROLL_STATE_IDLE) { - textSelectionHelper.stopScrolling(); - } - } - - @Override - public void onScrolled(RecyclerView recyclerView, int dx, int dy) { - if (recyclerView.getChildCount() == 0) { - return; - } - recyclerView.invalidate(); - textSelectionHelper.onParentScrolled(); - headerView.invalidate(); - checkScroll(dy); - } - }); } + bulletinContainer = new FrameLayout(activity); + containerView.addView(bulletinContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL, 0, !BOTTOM_ACTION_BAR && sheet != null && !sheet.halfSize() ? 56 : 0, 0, BOTTOM_ACTION_BAR && sheet != null && !sheet.halfSize() ? 24 : 0)); headerPaint.setColor(0xff000000); statusBarPaint.setColor(0xff000000); headerProgressPaint.setColor(0xff242426); navigationBarPaint.setColor(Color.BLACK); - headerView = new FrameLayout(activity) { + actionBar = new WebActionBar(activity, getResourcesProvider()) { @Override - protected void onDraw(Canvas canvas) { - int width = getMeasuredWidth(); - int height = getMeasuredHeight(); - canvas.drawRect(0, 0, width, height, headerPaint); - if (layoutManager == null) { - return; - } - int first = layoutManager[0].findFirstVisibleItemPosition(); - int last = layoutManager[0].findLastVisibleItemPosition(); - int count = layoutManager[0].getItemCount(); - View view; - if (last >= count - 2) { - view = layoutManager[0].findViewByPosition(count - 2); - } else { - view = layoutManager[0].findViewByPosition(first); + protected void onOpenedMenu() { + pages[0].listView.stopScroll(); + checkScrollAnimated(); + } + @Override + protected void onSearchUpdated(String s) { + processSearch(s.toLowerCase()); + } + @Override + protected void onColorsUpdated() { + if (sheet != null) { + sheet.checkNavColor(); } - if (view == null) { - return; + } + @Override + protected void onScrolledProgress(float delta) { + pages[0].addProgress(delta); + } + + @Override + protected void onAddressColorsChanged(int backgroundColor, int textColor) { + if (addressBarList != null) { + addressBarList.setColors(backgroundColor, textColor); } + } - float itemProgress = width / (float) (count - 1); + @Override + protected void onAddressingProgress(float progress) { + super.onAddressingProgress(progress); + if (addressBarList != null) { + addressBarList.setOpenProgress(progress); + } + if (sheet != null) { + sheet.checkNavColor(); + } + } - int childCount = layoutManager[0].getChildCount(); + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + ((MarginLayoutParams) addressBarList.getLayoutParams()).topMargin = getMeasuredHeight(); + } - float viewHeight = view.getMeasuredHeight(); - float viewProgress; - if (last >= count - 2) { - viewProgress = (count - 2 - first) * itemProgress * (listView[0].getMeasuredHeight() - view.getTop()) / viewHeight; + @Override + public void showAddress(boolean show, boolean animated) { + super.showAddress(show, animated); + if (addressBarList != null) { + addressBarList.setOpened(show); + } + } + }; + actionBar.occupyStatusBar(sheet != null && !BOTTOM_ACTION_BAR); + containerView.addView(actionBar, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, BOTTOM_ACTION_BAR ? Gravity.BOTTOM : Gravity.TOP)); + actionBar.setOnClickListener(v -> { + if (actionBar.longClicked) return; + final PageLayout page = pages[0]; + if (page.isWeb()) { + if (page.getWebView() != null && !actionBar.isAddressing()) { + if (addressBarList != null) { + BotWebViewContainer.MyWebView webView = page.getWebView(); + final String title = webView != null ? webView.getTitle() : null; + final String url = BotWebViewContainer.magic2tonsite(webView != null ? webView.getUrl() : null); + addressBarList.setCurrent( + webView != null ? webView.getFavicon() : null, + TextUtils.isEmpty(title) ? getString(R.string.WebEmpty) : title, + TextUtils.isEmpty(url) ? "about:blank" : url, + + () -> { + actionBar.addressEditText.setText(TextUtils.isEmpty(url) ? "about:blank" : url); + actionBar.addressEditText.setSelection(actionBar.addressEditText.getText().length()); + AndroidUtilities.showKeyboard(actionBar.addressEditText); + }, + query -> { + if (TextUtils.isEmpty(query)) return; + if (page.getWebView() == null) return; + SpannableStringBuilder sb = new SpannableStringBuilder(query.trim()); + AndroidUtilities.addLinksSafe(sb, Linkify.WEB_URLS, false, true); + URLSpan[] spans = sb.getSpans(0, sb.length(), URLSpan.class); + int start = sb.length(), end = 0; + for (int i = 0; i < spans.length; ++i) { + start = Math.min(sb.getSpanStart(spans[i]), start); + end = Math.max(sb.getSpanEnd(spans[i]), end); + } + actionBar.showAddress(false, true); + Uri uri = Utilities.uriParseSafe(query); + if (spans.length > 0 && start == 0 && end > 0 || uri != null && uri.getScheme() != null) { + if (uri != null && uri.getScheme() == null && uri.getHost() == null && uri.getPath() != null) { + query = Browser.replace(uri, "https", uri.getPath(), "/"); + } + page.getWebView().loadUrl(query); + } else { + AddressBarList.pushRecentSearch(activity, query); + page.getWebView().loadUrl(SearchEngine.getCurrent().getSearchURL(query)); + } + }, + query -> { + if (TextUtils.isEmpty(query)) return; + actionBar.addressEditText.setText(query); + actionBar.addressEditText.setSelection(actionBar.addressEditText.getText().length()); + AndroidUtilities.showKeyboard(actionBar.addressEditText); + }, + ArticleViewer.this::openBookmark, + view -> { + actionBar.showAddress(false, true); + AndroidUtilities.hideKeyboard(actionBar.addressEditText); + final String link = TextUtils.isEmpty(url) ? "about:blank" : url; + AndroidUtilities.addToClipboard(link); + BulletinFactory.of(page.webViewContainer, getResourcesProvider()).createCopyLinkBulletin().show(true); + } + ); + } + actionBar.showAddress("", url -> { + if (TextUtils.isEmpty(url)) return; + if (page.getWebView() == null) return; + SpannableStringBuilder sb = new SpannableStringBuilder(url.trim()); + AndroidUtilities.addLinksSafe(sb, Linkify.WEB_URLS, false, true); + URLSpan[] spans = sb.getSpans(0, sb.length(), URLSpan.class); + int start = sb.length(), end = 0; + for (int i = 0; i < spans.length; ++i) { + start = Math.min(sb.getSpanStart(spans[i]), start); + end = Math.max(sb.getSpanEnd(spans[i]), end); + } + Uri uri = Utilities.uriParseSafe(url); + if (spans.length > 0 && start == 0 && end > 0 || uri != null && uri.getScheme() != null) { + if (uri.getScheme() == null && uri.getHost() == null && uri.getPath() != null) { + url = Browser.replace(uri, "https", uri.getPath(), "/"); + } + page.getWebView().loadUrl(url); + } else { + AddressBarList.pushRecentSearch(activity, url); + page.getWebView().loadUrl(SearchEngine.getCurrent().getSearchURL(url)); + } + }); + } + } else if (sheet != null) { + SmoothScroller s = new SmoothScroller(activity); + if (sheet.halfSize()) { + s.setTargetPosition(1); + s.setOffset(-dp(56 - 24)); } else { - viewProgress = itemProgress * (1.0f - (Math.min(0, view.getTop() - listView[0].getPaddingTop()) + viewHeight) / viewHeight); + s.setTargetPosition(0); } - float progress = first * itemProgress + viewProgress; + page.layoutManager.startSmoothScroll(s); + } else { + page.listView.smoothScrollToPosition(0); + } + }); + actionBar.addressEditText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) {} + @Override + public void afterTextChanged(Editable s) { + if (!actionBar.isAddressing()) return; + if (addressBarList == null) return; + addressBarList.setInput(s == null ? null : s.toString()); + } + }); - canvas.drawRect(0, 0, progress, height, headerProgressPaint); + addressBarList = new AddressBarList(activity); + addressBarList.setOpenProgress(0f); + addressBarList.listView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + if (addressBarList.listView.scrollingByUser) { + AndroidUtilities.hideKeyboard(actionBar.addressEditText); + } } - }; - headerView.setWillNotDraw(false); - containerView.addView(headerView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 56)); - headerView.setOnClickListener(v -> listView[0].smoothScrollToPosition(0)); - - titleTextView = new SimpleTextView(activity); - titleTextView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); - titleTextView.setTextSize(20); - titleTextView.setTypeface(AndroidUtilities.bold()); - titleTextView.setTextColor(0xffb3b3b3); - titleTextView.setPivotX(0.0f); - titleTextView.setPivotY(AndroidUtilities.dp(28)); - headerView.addView(titleTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 56, Gravity.LEFT | Gravity.TOP, 72, 0, 48 * 2, 0)); - - lineProgressView = new LineProgressView(activity); - lineProgressView.setProgressColor(0xffffffff); - lineProgressView.setPivotX(0.0f); - lineProgressView.setPivotY(AndroidUtilities.dp(2)); - headerView.addView(lineProgressView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 2, Gravity.LEFT | Gravity.BOTTOM, 0, 0, 0, 1)); + }); + containerView.addView(addressBarList, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); lineProgressTickRunnable = () -> { - float progressLeft = 0.7f - lineProgressView.getCurrentProgress(); + float progressLeft = 0.7f - actionBar.lineProgressView.getCurrentProgress(); if (progressLeft > 0.0f) { float tick; if (progressLeft < 0.25f) { @@ -3408,286 +3997,470 @@ protected void onDraw(Canvas canvas) { } else { tick = 0.02f; } - lineProgressView.setProgress(lineProgressView.getCurrentProgress() + tick, true); + actionBar.lineProgressView.setProgress(actionBar.lineProgressView.getCurrentProgress() + tick, true); AndroidUtilities.runOnUIThread(lineProgressTickRunnable, 100); } }; + actionBar.backButton.setOnClickListener(v -> { + if (actionBar.isSearching()) { + actionBar.showSearch(false, true); + } else if (actionBar.isAddressing()) { + actionBar.showAddress(false, true); + } else if (isFirstArticle() && pages[0].hasBackButton()) { + pages[0].back(); + } else if (pagesStack.size() > 1) { + goBack(); + } else if (sheet != null) { + sheet.dismiss(false); + } else { + close(true, true); + } + }); + actionBar.backButton.setOnLongClickListener(v -> { + if (pages[0] == null) return false; + + final float wasRotation = actionBar.backButtonDrawable.getRotation(); + ItemOptions options = ItemOptions.makeOptions(sheet != null ? sheet.windowView : windowView, v); + + final int backgroundColor = SharedConfig.adaptableColorInBrowser ? Theme.getColor(Theme.key_iv_background) : pages[0].getBackgroundColor(); + final int textColor = SharedConfig.adaptableColorInBrowser ? Theme.getColor(Theme.key_windowBackgroundWhiteBlackText) : AndroidUtilities.computePerceivedBrightness(pages[0].getBackgroundColor()) >= .721f ? Color.BLACK : Color.WHITE; + final int subtextColor = Theme.multAlpha(textColor, .65f); + + final BotWebViewContainer.MyWebView webView = pages[0].getWebView(); + if (webView != null) { + final WebBackForwardList history = webView.copyBackForwardList(); + final int currentIndex = history.getCurrentIndex(); + if (history.getCurrentIndex() > 0) { + for (int i = 0; i < currentIndex; ++i) { + WebHistoryItem item = history.getItemAtIndex(i); + final int index = i; + options.add(item.getTitle(), () -> { + for (int j = 0; j < (currentIndex - index); ++j) webView.goBack(); + }); + ActionBarMenuSubItem menuItem = options.getLast(); + if (menuItem != null) { + menuItem.setSubtext(item.getUrl()); + Bitmap bitmap = webView.getFavicon(item.getUrl()); + if (bitmap == null) { + bitmap = item.getFavicon(); + } + final Bitmap finalBitmap = bitmap; + final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); + menuItem.setTextAndIcon(item.getTitle(), 0, new Drawable() { + @Override + public void draw(@NonNull Canvas canvas) { + if (finalBitmap != null) { + canvas.save(); + canvas.translate(getBounds().left, getBounds().top); + canvas.scale(getBounds().width() / (float) finalBitmap.getWidth(), getBounds().height() / (float) finalBitmap.getHeight()); + canvas.drawBitmap(finalBitmap, 0, 0, paint); + canvas.restore(); + } + } - menuContainer = new FrameLayout(activity); - headerView.addView(menuContainer, LayoutHelper.createFrame(48, 56, Gravity.TOP | Gravity.RIGHT)); + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) { - searchShadow = new View(activity); - searchShadow.setBackgroundResource(R.drawable.header_shadow); - searchShadow.setAlpha(0.0f); - containerView.addView(searchShadow, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 3, Gravity.LEFT | Gravity.TOP, 0, 56, 0, 0)); + } - searchContainer = new FrameLayout(parentActivity); - searchContainer.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - searchContainer.setVisibility(View.INVISIBLE); - if (Build.VERSION.SDK_INT < 21) { - searchContainer.setAlpha(0.0f); - } - headerView.addView(searchContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 56)); + @Override + public void setAlpha(int alpha) { - searchField = new EditTextBoldCursor(parentActivity) { - @Override - public boolean onTouchEvent(MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_DOWN) { - if (!AndroidUtilities.showKeyboard(this)) { - clearFocus(); - requestFocus(); + } + + @Override + public int getIntrinsicHeight() { + return dp(24); + } + + @Override + public int getIntrinsicWidth() { + return dp(24); + } + + @Override + public int getOpacity() { + return PixelFormat.TRANSPARENT; + } + }); + menuItem.setTextColor(textColor); + menuItem.setSubtextColor(subtextColor); + } } } - return super.onTouchEvent(event); } - }; - searchField.setCursorWidth(1.5f); - searchField.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); - searchField.setCursorColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); - searchField.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18); - searchField.setHintTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteHintText)); - searchField.setSingleLine(true); - searchField.setHint(LocaleController.getString("Search", R.string.Search)); - searchField.setBackgroundResource(0); - searchField.setPadding(0, 0, 0, 0); - int inputType = searchField.getInputType() | EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS; - searchField.setInputType(inputType); - if (Build.VERSION.SDK_INT < 23) { - searchField.setCustomSelectionActionModeCallback(new ActionMode.Callback() { - public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - return false; - } + for (int i = pagesStack.size() - 2; i >= 0; --i) { + Object obj = pagesStack.get(i); + if (obj instanceof CachedWeb) { + CachedWeb web = (CachedWeb) obj; + final int index = i; + options.add(web.getTitle(), () -> { + goBack(index); + }); + ActionBarMenuSubItem item = options.getLast(); + if (item != null) { + item.setSubtext(web.lastUrl); + Bitmap bitmap = webView != null ? webView.getFavicon(web.lastUrl) : null; + if (bitmap == null) { + bitmap = web.favicon; + } + final Bitmap finalBitmap = bitmap; + final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); + item.setTextAndIcon(web.getTitle(), 0, new Drawable() { + @Override + public void draw(@NonNull Canvas canvas) { + if (finalBitmap != null) { + canvas.save(); + canvas.translate(getBounds().left, getBounds().top); + canvas.scale(getBounds().width() / (float) finalBitmap.getWidth(), getBounds().height() / (float) finalBitmap.getHeight()); + canvas.drawBitmap(finalBitmap, 0, 0, paint); + canvas.restore(); + } + } - public void onDestroyActionMode(ActionMode mode) { + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) { - } + } - public boolean onCreateActionMode(ActionMode mode, Menu menu) { - return false; - } + @Override + public void setAlpha(int alpha) { - public boolean onActionItemClicked(ActionMode mode, MenuItem item) { - return false; - } - }); - } - searchField.setOnEditorActionListener((v, actionId, event) -> { - if (event != null && (event.getAction() == KeyEvent.ACTION_UP && event.getKeyCode() == KeyEvent.KEYCODE_SEARCH || event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { - AndroidUtilities.hideKeyboard(searchField); - } - return false; - }); - searchField.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } - } + @Override + public int getIntrinsicHeight() { + return dp(24); + } - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - if (ignoreOnTextChange) { - ignoreOnTextChange = false; - return; - } - processSearch(s.toString().toLowerCase()); - if (clearButton != null) { - if (TextUtils.isEmpty(s)) { - if (clearButton.getTag() != null) { - clearButton.setTag(null); - clearButton.clearAnimation(); - if (animateClear) { - clearButton.animate().setInterpolator(new DecelerateInterpolator()).alpha(0.0f).setDuration(180).scaleY(0.0f).scaleX(0.0f).rotation(45).withEndAction(() -> clearButton.setVisibility(View.INVISIBLE)).start(); - } else { - clearButton.setAlpha(0.0f); - clearButton.setRotation(45); - clearButton.setScaleX(0.0f); - clearButton.setScaleY(0.0f); - clearButton.setVisibility(View.INVISIBLE); - animateClear = true; + @Override + public int getIntrinsicWidth() { + return dp(24); } - } - } else { - if (clearButton.getTag() == null) { - clearButton.setTag(1); - clearButton.clearAnimation(); - clearButton.setVisibility(View.VISIBLE); - if (animateClear) { - clearButton.animate().setInterpolator(new DecelerateInterpolator()).alpha(1.0f).setDuration(180).scaleY(1.0f).scaleX(1.0f).rotation(0).start(); - } else { - clearButton.setAlpha(1.0f); - clearButton.setRotation(0); - clearButton.setScaleX(1.0f); - clearButton.setScaleY(1.0f); - animateClear = true; + + @Override + public int getOpacity() { + return PixelFormat.TRANSPARENT; } + }); + item.setTextColor(textColor); + item.setSubtextColor(subtextColor); + item.setColors(textColor, textColor); + } + } else if (obj instanceof TLRPC.WebPage) { + TLRPC.WebPage webpage = (TLRPC.WebPage) obj; + final int index = i; + options.add(webpage.title, () -> { + goBack(index); + }); + ActionBarMenuSubItem item = options.getLast(); + if (item != null) { + item.setTextAndIcon(webpage.title, R.drawable.msg_instant); + item.setTextColor(textColor); + if (!TextUtils.isEmpty(webpage.site_name)) { + item.setSubtext(webpage.site_name); } - } - } - } - - @Override - public void afterTextChanged(Editable s) { - - } - }); - searchField.setImeOptions(EditorInfo.IME_FLAG_NO_FULLSCREEN | EditorInfo.IME_ACTION_SEARCH); - searchField.setTextIsSelectable(false); - searchContainer.addView(searchField, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 36, Gravity.CENTER_VERTICAL, 72, 0, 48, 0)); + item.setSubtextColor(subtextColor); + item.imageView.getLayoutParams().width = dp(24); + item.imageView.setScaleX(1.45f); + item.imageView.setScaleY(1.45f); + item.setColors(textColor, textColor); + } + } + } + options.setScrimViewBackground(Theme.createCircleDrawable(dp(40), actionBar.getBackgroundColor())); + options.setBackgroundColor(backgroundColor); + options.updateColors(); + if (options.getItemsCount() <= 0) return false; + checkScrollAnimated(() -> { + actionBar.backButtonDrawable.setRotation(0f, true); + options.setOnDismiss(() -> { + actionBar.backButtonDrawable.setRotation(wasRotation, true); + }); + options.show(); + }); - clearButton = new ImageView(parentActivity) { - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - clearAnimation(); - if (getTag() == null) { - clearButton.setVisibility(INVISIBLE); - clearButton.setAlpha(0.0f); - clearButton.setRotation(45); - clearButton.setScaleX(0.0f); - clearButton.setScaleY(0.0f); - } else { - clearButton.setAlpha(1.0f); - clearButton.setRotation(0); - clearButton.setScaleX(1.0f); - clearButton.setScaleY(1.0f); - } - } - }; - clearButton.setImageDrawable(new CloseProgressDrawable2() { - @Override - protected int getCurrentColor() { - return Theme.getColor(Theme.key_windowBackgroundWhiteBlackText); - } - }); - clearButton.setScaleType(ImageView.ScaleType.CENTER); - clearButton.setAlpha(0.0f); - clearButton.setRotation(45); - clearButton.setScaleX(0.0f); - clearButton.setScaleY(0.0f); - clearButton.setOnClickListener(v -> { - if (searchField.length() != 0) { - searchField.setText(""); - } - searchField.requestFocus(); - AndroidUtilities.showKeyboard(searchField); - }); - clearButton.setContentDescription(LocaleController.getString("ClearButton", R.string.ClearButton)); - searchContainer.addView(clearButton, LayoutHelper.createFrame(48, LayoutHelper.MATCH_PARENT, Gravity.CENTER_VERTICAL | Gravity.RIGHT)); - - backButton = new ImageView(activity); - backButton.setScaleType(ImageView.ScaleType.CENTER); - backDrawable = new BackDrawable(false); - backDrawable.setAnimationTime(200.0f); - backDrawable.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); - backDrawable.setRotatedColor(0xffb3b3b3); - backDrawable.setRotation(1.0f, false); - backButton.setImageDrawable(backDrawable); - backButton.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); - headerView.addView(backButton, LayoutHelper.createFrame(54, 56)); - backButton.setOnClickListener(v -> { - /*if (collapsed) { - uncollapse(); - } else { - collapse(); - }*/ - if (searchContainer.getTag() != null) { - showSearch(false); - } else { - close(true, true); - } + return true; }); - backButton.setContentDescription(LocaleController.getString("AccDescrGoBack", R.string.AccDescrGoBack)); - - menuButton = new ActionBarMenuItem(parentActivity, null, Theme.ACTION_BAR_WHITE_SELECTOR_COLOR, 0xffb3b3b3) { - @Override - public void toggleSubMenu() { - super.toggleSubMenu(); - listView[0].stopScroll(); - checkScrollAnimated(); - } - }; - menuButton.setLayoutInScreen(true); - menuButton.setDuplicateParentStateEnabled(false); - menuButton.setClickable(true); - menuButton.setIcon(R.drawable.ic_ab_other); - menuButton.addSubItem(search_item, R.drawable.msg_search, LocaleController.getString("Search", R.string.Search)); - menuButton.addSubItem(share_item, R.drawable.msg_share, LocaleController.getString("ShareFile", R.string.ShareFile)); - menuButton.addSubItem(open_item, R.drawable.msg_openin, LocaleController.getString("OpenInExternalApp", R.string.OpenInExternalApp)); - menuButton.addSubItem(settings_item, R.drawable.msg_settings_old, LocaleController.getString("Settings", R.string.Settings)); - menuButton.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); - menuButton.setContentDescription(LocaleController.getString("AccDescrMoreOptions", R.string.AccDescrMoreOptions)); - menuContainer.addView(menuButton, LayoutHelper.createFrame(48, 56)); - progressView = new ContextProgressView(activity, 2); - progressView.setVisibility(View.GONE); - menuContainer.addView(progressView, LayoutHelper.createFrame(48, 56)); - menuButton.setOnClickListener(v -> menuButton.toggleSubMenu()); - menuButton.setDelegate(id -> { - if (adapter[0].currentPage == null || parentActivity == null) { +// actionBar.forwardButton.setOnLongClickListener(v -> { +// if (pages[0] == null) return false; +// final BotWebViewContainer.MyWebView webView = pages[0].getWebView(); +// if (webView == null) return false; +// final WebBackForwardList history = webView.copyBackForwardList(); +// final int currentIndex = history.getCurrentIndex(); +// if (history.getSize() - (currentIndex + 1) <= 0) return false; +// +// ItemOptions options = ItemOptions.makeOptions(sheet != null ? sheet.windowView : windowView, v); +// final int textColor = AndroidUtilities.computePerceivedBrightness(pages[0].getBackgroundColor()) >= .721f ? Color.BLACK : Color.WHITE; +// final int subtextColor = Theme.multAlpha(textColor, .65f); +// +// for (int i = currentIndex + 1; i < history.getSize(); ++i) { +// WebHistoryItem item = history.getItemAtIndex(i); +// final int index = i; +// options.add(item.getTitle(), () -> { +// for (int j = 0; j < (index - currentIndex); ++j) webView.goForward(); +// }); +// ActionBarMenuSubItem menuItem = options.getLast(); +// if (menuItem != null) { +// menuItem.setSubtext(item.getUrl()); +// Bitmap bitmap = webView.getFavicon(item.getUrl()); +// if (bitmap == null) { +// bitmap = item.getFavicon(); +// } +// final Bitmap finalBitmap = bitmap; +// final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); +// menuItem.setTextAndIcon(item.getTitle(), 0, new Drawable() { +// @Override +// public void draw(@NonNull Canvas canvas) { +// if (finalBitmap != null) { +// canvas.save(); +// canvas.translate(getBounds().left, getBounds().top); +// canvas.scale(getBounds().width() / (float) finalBitmap.getWidth(), getBounds().height() / (float) finalBitmap.getHeight()); +// canvas.drawBitmap(finalBitmap, 0, 0, paint); +// canvas.restore(); +// } +// } +// @Override +// public void setColorFilter(@Nullable ColorFilter colorFilter) {} +// @Override +// public void setAlpha(int alpha) {} +// @Override +// public int getIntrinsicHeight() { +// return dp(24); +// } +// @Override +// public int getIntrinsicWidth() { +// return dp(24); +// } +// @Override +// public int getOpacity() { +// return PixelFormat.TRANSPARENT; +// } +// }); +// menuItem.setColors(textColor, textColor); +// menuItem.setSubtextColor(subtextColor); +// } +// } +// options.setScrimViewBackground(Theme.createCircleDrawable(dp(40), actionBar.getBackgroundColor())); +// options.setBackgroundColor(pages[0].getBackgroundColor()); +// checkScrollAnimated(options::show); +// +// return true; +// }); + + actionBar.setMenuListener(id -> { + if (pages[0].isArticle() && pages[0].adapter.currentPage == null || parentActivity == null) { return; } - if (id == search_item) { - showSearch(true); - } else if (id == share_item) { - showDialog(new ShareAlert(parentActivity, null, adapter[0].currentPage.url, false, adapter[0].currentPage.url, false)); - } else if (id == open_item) { - String webPageUrl; - if (!TextUtils.isEmpty(adapter[0].currentPage.cached_page.url)) { - webPageUrl = adapter[0].currentPage.cached_page.url; + if (id == WebActionBar.search_item) { + actionBar.showSearch(true, true); + } else if (id == WebActionBar.share_item) { + String url; + if (pages[0].isWeb()) { + if (pages[0].getWebView() == null) return; + url = pages[0].getWebView().getUrl(); + } else { + if (pages[0].adapter.currentPage == null) return; + url = pages[0].adapter.currentPage.url; + } + url = BotWebViewContainer.magic2tonsite(url); + showDialog(new ShareAlert(parentActivity, null, url, false, url, false, AndroidUtilities.computePerceivedBrightness(actionBar.getBackgroundColor()) < .721f ? new DarkThemeResourceProvider() : null)); + } else if (id == WebActionBar.bookmark_item) { + String url; + final FrameLayout container; + if (pages[0].isWeb()) { + if (pages[0].getWebView() == null) return; + url = pages[0].getWebView().getUrl(); + container = pages[0].webViewContainer; + } else { + if (pages[0].adapter.currentPage == null) return; + url = pages[0].adapter.currentPage.url; + container = pages[0]; + } + url = BotWebViewContainer.magic2tonsite(url); + final long selfId = UserConfig.getInstance(currentAccount).getClientUserId(); + SendMessagesHelper.getInstance(currentAccount).sendMessage(SendMessagesHelper.SendMessageParams.of(url, selfId)); + TLRPC.TL_message msg = new TLRPC.TL_message(); + msg.peer_id = new TLRPC.TL_peerUser(); + msg.peer_id.user_id = selfId; + msg.from_id = new TLRPC.TL_peerUser(); + msg.from_id.user_id = selfId; + msg.message = url; + msg.media = new TLRPC.TL_messageMediaWebPage(); + msg.media.webpage = new TLRPC.TL_webPage(); + msg.media.webpage.url = url; + msg.media.webpage.display_url = url; + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.bookmarkAdded, new MessageObject(currentAccount, msg, false, false)); + BulletinFactory.of(container, getResourcesProvider()).createSimpleBulletin(R.raw.saved_messages, AndroidUtilities.replaceSingleTag(LocaleController.getString(R.string.WebBookmarkedToast), () -> { + if (sheet != null) { + sheet.dismiss(true); + } + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment != null) { + Bundle args = new Bundle(); + args.putLong("user_id", selfId); + lastFragment.presentFragment(new ChatActivity(args)); + } + })).show(true); + } else if (id == WebActionBar.bookmarks_item) { + BaseFragment.BottomSheetParams params = new BaseFragment.BottomSheetParams(); + params.transitionFromLeft = true; + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment != null) { + lastFragment.showAsSheet(new BookmarksFragment(sheet == null ? null : () -> sheet.dismiss(true), ArticleViewer.this::openBookmark), params); + } + } else if (id == WebActionBar.history_item) { + BaseFragment.BottomSheetParams params = new BaseFragment.BottomSheetParams(); + params.transitionFromLeft = true; + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment != null) { + lastFragment.showAsSheet(new HistoryFragment(sheet == null ? null : () -> sheet.dismiss(true), ArticleViewer.this::openHistoryEntry), params); + } + } else if (id == WebActionBar.forward_item) { + if (pages[0].getWebView() != null) { + pages[0].getWebView().goForward(); + } + } else if (id == WebActionBar.open_item) { + String webPageUrl, webPageOpenUrl; + final FrameLayout container; + if (pages[0].isWeb()) { + if (pages[0].getWebView() == null) return; + webPageUrl = pages[0].getWebView().getUrl(); + webPageOpenUrl = pages[0].getWebView().getOpenURL(); + container = pages[0].webViewContainer; } else { - webPageUrl = adapter[0].currentPage.url; + if (pages[0].adapter.currentPage == null) return; + webPageUrl = pages[0].adapter.currentPage.url; + webPageOpenUrl = null; + container = pages[0]; } if (parentActivity == null || parentActivity.isFinishing()) return; - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(webPageUrl)); - intent.putExtra(android.provider.Browser.EXTRA_CREATE_NEW_TAB, true); - intent.putExtra(android.provider.Browser.EXTRA_APPLICATION_ID, parentActivity.getPackageName()); - parentActivity.startActivity(intent); - } else if (id == settings_item) { - BottomSheet.Builder builder = new BottomSheet.Builder(parentActivity); - builder.setApplyTopPadding(false); + if (webPageUrl == null) return; + final String open_domain = AndroidUtilities.getHostAuthority(webPageOpenUrl, true); + final String domain = AndroidUtilities.getHostAuthority(webPageUrl, true); + final Runnable open = () -> { + Browser.openInExternalBrowser(parentActivity, webPageUrl, false); + }; + final Utilities.Callback<Boolean> restrict = waitForResume -> { + RestrictedDomainsList.getInstance().setRestricted(true, domain, !TextUtils.isEmpty(open_domain) && !TextUtils.equals(open_domain, domain) ? open_domain : null); + if (!waitForResume) { + showRestrictedWebsiteToast(); + } else { + LaunchActivity.whenResumed = this::showRestrictedWebsiteToast; + } + }; + if (pages[0].isWeb() && !RestrictedDomainsList.getInstance().isRestricted(domain) && RestrictedDomainsList.getInstance().incrementOpen(domain) >= 2) { + AlertDialog.Builder a = new AlertDialog.Builder(activity, getResourcesProvider()); + a.setTitle(getString(R.string.BrowserExternalTitle)); + + LinearLayout linearLayout = new LinearLayout(activity); + linearLayout.setOrientation(LinearLayout.VERTICAL); + TextView textView = new TextView(activity); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + textView.setLetterSpacing(0.025f); + } + textView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 24, 0, 24, 0)); + + CheckBoxCell cell = new CheckBoxCell(activity, 1, null); + cell.setMultiline(true); + cell.getTextView().getLayoutParams().width = LayoutHelper.MATCH_PARENT; + cell.getTextView().setSingleLine(false); + cell.getTextView().setMaxLines(3); + cell.getTextView().setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + cell.setOnClickListener(v -> { + cell.setChecked(!cell.isChecked(), true); + }); + cell.setBackground(Theme.createRadSelectorDrawable(Theme.getColor(Theme.key_listSelector), 9, 9)); + linearLayout.addView(cell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT, 8, 6, 8, 4)); + + textView.setText(AndroidUtilities.replaceTags(LocaleController.getString(R.string.BrowserExternalText))); + cell.setText(AndroidUtilities.replaceTags(LocaleController.formatString(R.string.BrowserExternalCheck, domain)), "", false, false); + a.setView(linearLayout); + + a.setPositiveButton(LocaleController.getString(R.string.Continue), (di, w) -> { + if (cell.isChecked()) { + restrict.run(true); + } + open.run(); + }); + a.setNegativeButton(LocaleController.getString(R.string.Cancel), (di, w) -> { + if (cell.isChecked()) { + restrict.run(false); + } + }); - LinearLayout settingsContainer = new LinearLayout(parentActivity); - settingsContainer.setPadding(0, 0, 0, AndroidUtilities.dp(4)); - settingsContainer.setOrientation(LinearLayout.VERTICAL); + a.show(); + } else open.run(); + } else if (id == WebActionBar.settings_item) { + if (pages[0].isWeb()) { + openWebSettings(); + } else { - HeaderCell headerCell = new HeaderCell(parentActivity); - headerCell.setText(LocaleController.getString("FontSize", R.string.FontSize)); - settingsContainer.addView(headerCell, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 3, 1, 3, 0)); + BottomSheet.Builder builder = new BottomSheet.Builder(parentActivity); + builder.setApplyTopPadding(false); - TextSizeCell sizeCell = new TextSizeCell(parentActivity); - settingsContainer.addView(sizeCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 3, 0, 3, 0)); + LinearLayout settingsContainer = new LinearLayout(parentActivity); + settingsContainer.setPadding(0, 0, 0, dp(4)); + settingsContainer.setOrientation(LinearLayout.VERTICAL); - headerCell = new HeaderCell(parentActivity); - headerCell.setText(LocaleController.getString("FontType", R.string.FontType)); - settingsContainer.addView(headerCell, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 3, 4, 3, 2)); + HeaderCell headerCell = new HeaderCell(parentActivity, getResourcesProvider()); + headerCell.setText(LocaleController.getString(R.string.FontSize)); + settingsContainer.addView(headerCell, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 3, 1, 3, 0)); - for (int a = 0; a < 2; a++) { - fontCells[a] = new FontCell(parentActivity); - switch (a) { - case 0: - fontCells[a].setTextAndTypeface(LocaleController.getString("Default", R.string.Default), Typeface.DEFAULT); - break; - case 1: - fontCells[a].setTextAndTypeface("Serif", Typeface.SERIF); - break; - } - fontCells[a].select(a == selectedFont, false); - fontCells[a].setTag(a); - fontCells[a].setOnClickListener(v -> { - int num = (Integer) v.getTag(); - selectedFont = num; - for (int a1 = 0; a1 < 2; a1++) { - fontCells[a1].select(a1 == num, true); - } - updatePaintFonts(); - for (int i = 0; i < listView.length; i++) { - adapter[i].notifyDataSetChanged(); + TextSizeCell sizeCell = new TextSizeCell(parentActivity); + settingsContainer.addView(sizeCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 3, 0, 3, 0)); + + headerCell = new HeaderCell(parentActivity, getResourcesProvider()); + headerCell.setText(LocaleController.getString("FontType", R.string.FontType)); + settingsContainer.addView(headerCell, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 3, 4, 3, 2)); + + for (int a = 0; a < 2; a++) { + fontCells[a] = new FontCell(parentActivity); + switch (a) { + case 0: + fontCells[a].setTextAndTypeface(LocaleController.getString("Default", R.string.Default), Typeface.DEFAULT); + break; + case 1: + fontCells[a].setTextAndTypeface("Serif", Typeface.SERIF); + break; } - }); - settingsContainer.addView(fontCells[a], LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 50)); + fontCells[a].select(a == selectedFont, false); + fontCells[a].setTag(a); + fontCells[a].setOnClickListener(v -> { + int num = (Integer) v.getTag(); + selectedFont = num; + for (int a1 = 0; a1 < 2; a1++) { + fontCells[a1].select(a1 == num, true); + } + updatePaintFonts(); + for (int i = 0; i < pages.length; i++) { + pages[i].adapter.notifyDataSetChanged(); + } + }); + settingsContainer.addView(fontCells[a], LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 50)); + } + + builder.setCustomView(settingsContainer); + showDialog(linkSheet = builder.create()); + } + } else if (id == WebActionBar.reload_item) { + if (pages[0].isWeb() && pages[0].getWebView() != null) { + pages[0].getWebView().reload(); } + } + }); - builder.setCustomView(settingsContainer); - showDialog(linkSheet = builder.create()); + actionBar.forwardButton.setOnClickListener(v -> { + if (sheet != null) { +// if (pages[0].hasForwardButton()) { +// if (pages[0].getWebView() != null) { +// pages[0].getWebView().goForward(); +// } +// } else { + sheet.dismiss(true); +// } } }); @@ -3702,36 +4475,60 @@ public void onDraw(Canvas canvas) { }; searchPanel.setOnTouchListener((v, event) -> true); searchPanel.setWillNotDraw(false); + searchPanel.setTranslationY(dp(51)); searchPanel.setVisibility(View.INVISIBLE); searchPanel.setFocusable(true); searchPanel.setFocusableInTouchMode(true); searchPanel.setClickable(true); - searchPanel.setPadding(0, AndroidUtilities.dp(3), 0, 0); + searchPanel.setPadding(0, dp(3), 0, 0); containerView.addView(searchPanel, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 51, Gravity.BOTTOM)); + new KeyboardNotifier(windowView, (keyboardHeight) -> { + searchPanel.setTranslationY((searchPanelTranslation = -keyboardHeight) + dp(51) * (1f - searchPanelAlpha)); + }); + searchUpButton = new ImageView(parentActivity); searchUpButton.setScaleType(ImageView.ScaleType.CENTER); searchUpButton.setImageResource(R.drawable.msg_go_up); - searchUpButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY)); - searchUpButton.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_actionBarActionModeDefaultSelector), 1)); + searchUpButton.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY)); + searchUpButton.setBackgroundDrawable(Theme.createSelectorDrawable(getThemedColor(Theme.key_actionBarActionModeDefaultSelector), 1)); searchPanel.addView(searchUpButton, LayoutHelper.createFrame(48, 48, Gravity.RIGHT | Gravity.TOP, 0, 0, 48, 0)); - searchUpButton.setOnClickListener(view -> scrollToSearchIndex(currentSearchIndex - 1)); + searchUpButton.setOnClickListener(view -> { + if (pages[0].isWeb()) { + if (pages[0].getWebView() != null) { + pages[0].getWebView().findNext(false); + } + } else { + scrollToSearchIndex(currentSearchIndex - 1); + } + }); searchUpButton.setContentDescription(LocaleController.getString("AccDescrSearchNext", R.string.AccDescrSearchNext)); searchDownButton = new ImageView(parentActivity); searchDownButton.setScaleType(ImageView.ScaleType.CENTER); searchDownButton.setImageResource(R.drawable.msg_go_down); - searchDownButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY)); - searchDownButton.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_actionBarActionModeDefaultSelector), 1)); + searchDownButton.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY)); + searchDownButton.setBackgroundDrawable(Theme.createSelectorDrawable(getThemedColor(Theme.key_actionBarActionModeDefaultSelector), 1)); searchPanel.addView(searchDownButton, LayoutHelper.createFrame(48, 48, Gravity.RIGHT | Gravity.TOP, 0, 0, 0, 0)); - searchDownButton.setOnClickListener(view -> scrollToSearchIndex(currentSearchIndex + 1)); + searchDownButton.setOnClickListener(view -> { + if (pages[0].isWeb()) { + if (pages[0].getWebView() != null) { + pages[0].getWebView().findNext(true); + } + } else { + scrollToSearchIndex(currentSearchIndex + 1); + } + }); searchDownButton.setContentDescription(LocaleController.getString("AccDescrSearchPrev", R.string.AccDescrSearchPrev)); - searchCountText = new SimpleTextView(parentActivity); - searchCountText.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); - searchCountText.setTextSize(15); + searchCountText = new AnimatedTextView(parentActivity, true, true, true); + searchCountText.setScaleProperty(.6f); + searchCountText.setAnimationProperties(0.4f, 0, 350, CubicBezierInterpolator.EASE_OUT_QUINT); + searchCountText.setTextColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); + searchCountText.setTextSize(dp(15)); searchCountText.setTypeface(AndroidUtilities.bold()); searchCountText.setGravity(Gravity.LEFT); + searchCountText.getDrawable().setOverrideFullWidth(AndroidUtilities.displaySize.x); searchPanel.addView(searchCountText, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.CENTER_VERTICAL, 18, 0, 108, 0)); windowLayoutParams = new WindowManager.LayoutParams(); @@ -3744,7 +4541,7 @@ public void onDraw(Canvas canvas) { windowLayoutParams.flags = WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; int uiFlags = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; - int navigationColor = Theme.getColor(Theme.key_windowBackgroundGray, null, true); + int navigationColor = sheet == null ? Theme.getColor(Theme.key_windowBackgroundGray, null, true) : getThemedColor(Theme.key_windowBackgroundGray); float navigationBrightness = AndroidUtilities.computePerceivedBrightness(navigationColor); boolean isLightNavigation = navigationBrightness >= 0.721f; if (isLightNavigation && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { @@ -3763,18 +4560,18 @@ public void onDraw(Canvas canvas) { } textSelectionHelper = new TextSelectionHelper.ArticleTextSelectionHelper(); - textSelectionHelper.setParentView(listView[0]); + textSelectionHelper.setParentView(pages[0].listView); if (MessagesController.getInstance(currentAccount).getTranslateController().isContextTranslateEnabled()) { textSelectionHelper.setOnTranslate((text, fromLang, toLang, onAlertDismiss) -> { TranslateAlert2.showAlert(parentActivity, parentFragment, currentAccount, fromLang, toLang, text, null, false, null, onAlertDismiss); }); } - textSelectionHelper.layoutManager = layoutManager[0]; + textSelectionHelper.layoutManager = pages[0].layoutManager; textSelectionHelper.setCallback(new TextSelectionHelper.Callback() { @Override public void onStateChanged(boolean isSelected) { if (isSelected) { - showSearch(false); + actionBar.showSearch(false, true); } } @@ -3790,25 +4587,79 @@ public void onTextCopied() { pinchToZoomHelper = new PinchToZoomHelper(containerView, containerView); pinchToZoomHelper.setClipBoundsListener(topBottom -> { topBottom[0] = currentHeaderHeight; - topBottom[1] = listView[0].getMeasuredHeight(); + topBottom[1] = pages[0].listView.getMeasuredHeight(); }); pinchToZoomHelper.setCallback(new PinchToZoomHelper.Callback() { @Override public void onZoomStarted(MessageObject messageObject) { - if (listView[0] != null) { - listView[0].cancelClickRunnables(true); + if (pages[0] != null) { + pages[0].listView.cancelClickRunnables(true); } } }); updatePaintColors(); } + private boolean showRestrictedToastOnResume; + private void showRestrictedWebsiteToast() { + showRestrictedToastOnResume = false; + if (!attachedToWindow || LaunchActivity.instance == null || LaunchActivity.instance.isFinishing()) return; + final FrameLayout container; + if (pages[0].isWeb()) { + if (pages[0].getWebView() == null) return; + container = pages[0].webViewContainer; + } else { + if (pages[0].adapter.currentPage == null) return; + container = pages[0]; + } + BulletinFactory.of(container, getResourcesProvider()) + .createSimpleBulletin(R.raw.chats_infotip, AndroidUtilities.replaceSingleTag(getString(R.string.BrowserExternalRestricted), this::openWebSettings), 4) + .show(true); + } + + public void openBookmark(String link) { + if (parentActivity == null) return; + if (link == null) return; + actionBar.showAddress(false, true); + if (Browser.isInternalUri(Uri.parse(link), null)) { + if (sheet != null) { + sheet.dismiss(true); + } + Browser.openAsInternalIntent(parentActivity, link); + } else if (!Browser.openInExternalApp(parentActivity, link, false)) { + if (pages[0] == null || pages[0].getWebView() == null) { + Browser.openInTelegramBrowser(parentActivity, link, null); + } else { + pages[0].getWebView().loadUrl(link); + } + } + } + + public void openHistoryEntry(BrowserHistory.Entry entry) { + if (parentActivity == null || entry == null) return; + actionBar.showAddress(false, true); + if (pages[0] == null || pages[0].getWebView() == null) { + Browser.openInTelegramBrowser(parentActivity, entry.url, null); + } else { + pages[0].getWebView().loadUrl(entry.url, entry.meta); + } + } + + public void openWebSettings() { + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment != null) { + BaseFragment.BottomSheetParams params = new BaseFragment.BottomSheetParams(); + params.transitionFromLeft = true; + lastFragment.showAsSheet(new WebBrowserSettings(this::openHistoryEntry), params); + } + } + VideoPlayerHolderBase videoPlayer; BlockVideoCell currentPlayer; private void checkVideoPlayer() { - RecyclerView recyclerView = listView[0]; - if (recyclerView == null && attachedToWindow) { + RecyclerView recyclerView = pages[0].listView; + if (recyclerView == null || !attachedToWindow) { return; } BlockVideoCell bestView = null; @@ -3846,103 +4697,6 @@ private void checkVideoPlayer() { } - private void showSearch(boolean show) { - if (searchContainer == null || (searchContainer.getTag() != null) == show) { - return; - } - searchContainer.setTag(show ? 1 : null); - searchResults.clear(); - searchText = null; - adapter[0].searchTextOffset.clear(); - currentSearchIndex = 0; - if (attachedToWindow) { - AnimatorSet animatorSet = new AnimatorSet(); - animatorSet.setDuration(250); - if (show) { - searchContainer.setVisibility(View.VISIBLE); - backDrawable.setRotation(0.0f, true); - } else { - menuButton.setVisibility(View.VISIBLE); - listView[0].invalidateViews(); - AndroidUtilities.hideKeyboard(searchField); - updateWindowLayoutParamsForSearch(); - } - ArrayList<Animator> animators = new ArrayList<>(); - if (Build.VERSION.SDK_INT >= 21) { - if (show) { - searchContainer.setAlpha(1.0f); - } - int x = menuContainer.getLeft() + menuContainer.getMeasuredWidth() / 2; - int y = menuContainer.getTop() + menuContainer.getMeasuredHeight() / 2; - float rad = (float) Math.sqrt(x * x + y * y); - Animator animator = ViewAnimationUtils.createCircularReveal(searchContainer, x, y, show ? 0 : rad, show ? rad : 0); - animators.add(animator); - animator.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - if (!show) { - searchContainer.setAlpha(0.0f); - } - } - }); - } else { - animators.add(ObjectAnimator.ofFloat(searchContainer, View.ALPHA, show ? 1.0f : 0.0f)); - } - if (!show) { - animators.add(ObjectAnimator.ofFloat(searchPanel, View.ALPHA, 0.0f)); - } - animators.add(ObjectAnimator.ofFloat(searchShadow, View.ALPHA, show ? 1.0f : 0.0f)); - animatorSet.playTogether(animators); - animatorSet.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - if (show) { - updateWindowLayoutParamsForSearch(); - searchField.requestFocus(); - AndroidUtilities.showKeyboard(searchField); - menuButton.setVisibility(View.INVISIBLE); - } else { - searchContainer.setVisibility(View.INVISIBLE); - searchPanel.setVisibility(View.INVISIBLE); - searchField.setText(""); - } - } - - @Override - public void onAnimationStart(Animator animation) { - if (!show) { - backDrawable.setRotation(1.0f, true); - } - } - }); - animatorSet.setInterpolator(CubicBezierInterpolator.EASE_OUT); - if (!show && !AndroidUtilities.usingHardwareInput && keyboardVisible) { - runAfterKeyboardClose = animatorSet; - AndroidUtilities.runOnUIThread(() -> { - if (runAfterKeyboardClose != null) { - runAfterKeyboardClose.start(); - runAfterKeyboardClose = null; - } - }, 300); - } else { - animatorSet.start(); - } - } else { - searchContainer.setAlpha(show ? 1.0f : 0.0f); - menuButton.setVisibility(show ? View.INVISIBLE : View.VISIBLE); - backDrawable.setRotation(show ? 0.0f : 1.0f, false); - searchShadow.setAlpha(show ? 1.0f : 0.0f); - if (show) { - searchContainer.setVisibility(View.VISIBLE); - } else { - searchContainer.setVisibility(View.INVISIBLE); - searchPanel.setVisibility(View.INVISIBLE); - searchField.setText(""); - } - updateWindowLayoutParamsForSearch(); - } - } - private void updateWindowLayoutParamsForSearch() { /*try { WindowManager wm = (WindowManager) parentActivity.getSystemService(Context.WINDOW_SERVICE); @@ -3958,14 +4712,22 @@ private void updateWindowLayoutParamsForSearch() { } private void updateSearchButtons() { - if (searchResults == null) { + if (searchResults == null && !pages[0].isWeb()) { return; } - searchUpButton.setEnabled(!searchResults.isEmpty() && currentSearchIndex != 0); - searchDownButton.setEnabled(!searchResults.isEmpty() && currentSearchIndex != searchResults.size() - 1); + int index, count; + if (pages[0].isWeb()) { + index = pages[0].getWebView() == null ? 0 : pages[0].getWebView().getSearchIndex(); + count = pages[0].getWebView() == null ? 0 : pages[0].getWebView().getSearchCount(); + } else { + index = currentSearchIndex; + count = searchResults.size(); + } + searchUpButton.setEnabled(count > 0 && index != 0); + searchDownButton.setEnabled(count > 0 && index != count - 1); searchUpButton.setAlpha(searchUpButton.isEnabled() ? 1.0f : 0.5f); searchDownButton.setAlpha(searchDownButton.isEnabled() ? 1.0f : 0.5f); - int count = searchResults.size(); + searchCountText.cancelAnimation(); if (count < 0) { searchCountText.setText(""); } else if (count == 0) { @@ -3973,7 +4735,7 @@ private void updateSearchButtons() { } else if (count == 1) { searchCountText.setText(LocaleController.getString("OneResult", R.string.OneResult)); } else { - searchCountText.setText(String.format(LocaleController.getPluralString("CountOfResults", count), currentSearchIndex + 1, count)); + searchCountText.setText(String.format(LocaleController.getPluralString("CountOfResults", count), index + 1, count)); } } @@ -3997,61 +4759,102 @@ private void processSearch(final String text) { if (TextUtils.isEmpty(text)) { searchResults.clear(); searchText = text; - adapter[0].searchTextOffset.clear(); - searchPanel.setVisibility(View.INVISIBLE); - listView[0].invalidateViews(); - scrollToSearchIndex(0); + pages[0].adapter.searchTextOffset.clear(); + showSearchPanel(false); + if (pages[0].isWeb()) { + if (pages[0].getWebView() != null) { + pages[0].getWebView().search("", this::updateSearchButtons); + updateSearchButtons(); + } + } else { + pages[0].listView.invalidateViews(); + scrollToSearchIndex(0); + } lastSearchIndex = -1; return; } int searchIndex = ++lastSearchIndex; - AndroidUtilities.runOnUIThread(searchRunnable = () -> { - HashMap<Object, TLRPC.PageBlock> copy = new HashMap<>(adapter[0].textToBlocks); - ArrayList<Object> array = new ArrayList<>(adapter[0].textBlocks); - searchRunnable = null; - Utilities.searchQueue.postRunnable(() -> { - ArrayList<SearchResult> results = new ArrayList<>(); - for (int b = 0, N = array.size(); b < N; b++) { - Object object = array.get(b); - TLRPC.PageBlock block = copy.get(object); - String textToSearchIn = null; - if (object instanceof TLRPC.RichText) { - TLRPC.RichText richText = (TLRPC.RichText) object; - CharSequence innerText = getText(adapter[0], null, richText, richText, block, 1000); - if (!TextUtils.isEmpty(innerText)) { - textToSearchIn = innerText.toString().toLowerCase(); - } - } else if (object instanceof String) { - textToSearchIn = ((String) object).toLowerCase(); - } - if (textToSearchIn != null) { - int startIndex = 0; - int index; - while ((index = textToSearchIn.indexOf(text, startIndex)) >= 0) { - startIndex = index + text.length(); - if (index == 0 || AndroidUtilities.isPunctuationCharacter(textToSearchIn.charAt(index - 1))) { - SearchResult result = new SearchResult(); - result.index = index; - result.block = block; - result.text = object; - results.add(result); + if (pages[0].isWeb()) { + showSearchPanel(true); + if (pages[0].getWebView() != null) { + pages[0].getWebView().search(text, this::updateSearchButtons); + updateSearchButtons(); + } + } else { + AndroidUtilities.runOnUIThread(searchRunnable = () -> { + HashMap<Object, TLRPC.PageBlock> copy = new HashMap<>(pages[0].adapter.textToBlocks); + ArrayList<Object> array = new ArrayList<>(pages[0].adapter.textBlocks); + searchRunnable = null; + Utilities.searchQueue.postRunnable(() -> { + ArrayList<SearchResult> results = new ArrayList<>(); + for (int b = 0, N = array.size(); b < N; b++) { + Object object = array.get(b); + TLRPC.PageBlock block = copy.get(object); + String textToSearchIn = null; + if (object instanceof TLRPC.RichText) { + TLRPC.RichText richText = (TLRPC.RichText) object; + CharSequence innerText = getText(pages[0].adapter, null, richText, richText, block, 1000); + if (!TextUtils.isEmpty(innerText)) { + textToSearchIn = innerText.toString().toLowerCase(); + } + } else if (object instanceof String) { + textToSearchIn = ((String) object).toLowerCase(); + } + if (textToSearchIn != null) { + int startIndex = 0; + int index; + while ((index = textToSearchIn.indexOf(text, startIndex)) >= 0) { + startIndex = index + text.length(); + if (index == 0 || AndroidUtilities.isPunctuationCharacter(textToSearchIn.charAt(index - 1))) { + SearchResult result = new SearchResult(); + result.index = index; + result.block = block; + result.text = object; + results.add(result); + } } } } - } - AndroidUtilities.runOnUIThread(() -> { - if (searchIndex == lastSearchIndex) { - searchPanel.setAlpha(1.0f); - searchPanel.setVisibility(View.VISIBLE); - searchResults = results; - searchText = text; - adapter[0].searchTextOffset.clear(); - listView[0].invalidateViews(); - scrollToSearchIndex(0); - } + AndroidUtilities.runOnUIThread(() -> { + if (searchIndex == lastSearchIndex) { + showSearchPanel(true); + searchResults = results; + searchText = text; + pages[0].adapter.searchTextOffset.clear(); + pages[0].listView.invalidateViews(); + scrollToSearchIndex(0); + } + }); }); - }); - }, 400); + }, 400); + } + } + + private ValueAnimator searchPanelAnimator; + private float searchPanelAlpha; + public void showSearchPanel(boolean show) { + searchPanel.setVisibility(View.VISIBLE); + if (searchPanelAnimator != null) { + searchPanelAnimator.cancel(); + } + searchPanelAnimator = ValueAnimator.ofFloat(searchPanelAlpha, show ? 1f : 0f); + searchPanelAnimator.addUpdateListener(anm -> { + searchPanelAlpha = (float) anm.getAnimatedValue(); + searchPanel.setTranslationY(searchPanelTranslation + (1f - searchPanelAlpha) * dp(51)); + }); + searchPanelAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + searchPanelAlpha = show ? 1f : 0f; + searchPanel.setTranslationY(searchPanelTranslation + (1f - searchPanelAlpha) * dp(51)); + if (!show) { + searchPanel.setVisibility(View.GONE); + } + } + }); + searchPanelAnimator.setDuration(320); + searchPanelAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + searchPanelAnimator.start(); } private void scrollToSearchIndex(int index) { @@ -4065,21 +4868,21 @@ private void scrollToSearchIndex(int index) { TLRPC.PageBlock block = getLastNonListPageBlock(result.block); int row = -1; - for (int a = 0, N = adapter[0].blocks.size(); a < N; a++) { - TLRPC.PageBlock localBlock = adapter[0].blocks.get(a); + for (int a = 0, N = pages[0].adapter.blocks.size(); a < N; a++) { + TLRPC.PageBlock localBlock = pages[0].adapter.blocks.get(a); if (localBlock instanceof TL_pageBlockDetailsChild) { TL_pageBlockDetailsChild child = (TL_pageBlockDetailsChild) localBlock; if (child.block == result.block || child.block == block) { if (openAllParentBlocks(child)) { - adapter[0].updateRows(); - adapter[0].notifyDataSetChanged(); + pages[0].adapter.updateRows(); + pages[0].adapter.notifyDataSetChanged(); } break; } } } - for (int a = 0, N = adapter[0].localBlocks.size(); a < N; a++) { - TLRPC.PageBlock localBlock = adapter[0].localBlocks.get(a); + for (int a = 0, N = pages[0].adapter.localBlocks.size(); a < N; a++) { + TLRPC.PageBlock localBlock = pages[0].adapter.localBlocks.get(a); if (localBlock == result.block || localBlock == block) { row = a; break; @@ -4098,25 +4901,29 @@ private void scrollToSearchIndex(int index) { if (block instanceof TL_pageBlockDetailsChild) { if (openAllParentBlocks((TL_pageBlockDetailsChild) block)) { - adapter[0].updateRows(); - adapter[0].notifyDataSetChanged(); + pages[0].adapter.updateRows(); + pages[0].adapter.notifyDataSetChanged(); } } String key = searchText + result.block + result.text + result.index; - Integer offset = adapter[0].searchTextOffset.get(key); + Integer offset = pages[0].adapter.searchTextOffset.get(key); if (offset == null) { - int type = adapter[0].getTypeForBlock(result.block); - RecyclerView.ViewHolder holder = adapter[0].onCreateViewHolder(null, type); - adapter[0].bindBlockToHolder(type, holder, result.block, 0, 0); - holder.itemView.measure(View.MeasureSpec.makeMeasureSpec(listView[0].getMeasuredWidth(), View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); - offset = adapter[0].searchTextOffset.get(key); + int type = pages[0].adapter.getTypeForBlock(result.block); + RecyclerView.ViewHolder holder = pages[0].adapter.onCreateViewHolder(null, type); + pages[0].adapter.bindBlockToHolder(type, holder, result.block, 0, 0); + holder.itemView.measure(View.MeasureSpec.makeMeasureSpec(pages[0].listView.getMeasuredWidth(), View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); + offset = pages[0].adapter.searchTextOffset.get(key); if (offset == null) { offset = 0; } } - layoutManager[0].scrollToPositionWithOffset(row, currentHeaderHeight - AndroidUtilities.dp(56) - offset + AndroidUtilities.dp(100)); - listView[0].invalidateViews(); + SmoothScroller s = new SmoothScroller(pages[0].getContext()); + s.setTargetPosition( + row); + s.setOffset(-(currentHeaderHeight - dp(56) - offset + dp(100))); + s.setDurationScale(1.2f); + pages[0].layoutManager.startSmoothScroll(s); + pages[0].listView.invalidateViews(); } public static class ScrollEvaluator extends IntEvaluator { @@ -4128,57 +4935,48 @@ public Integer evaluate(float fraction, Integer startValue, Integer endValue) { } private void checkScrollAnimated() { - int maxHeight = AndroidUtilities.dp(56); + checkScrollAnimated(null); + } + private void checkScrollAnimated(Runnable callback) { + int maxHeight = dp(56); if (currentHeaderHeight == maxHeight) { + if (callback != null) { + callback.run(); + } return; } - ValueAnimator va = ValueAnimator.ofObject(new IntEvaluator(), currentHeaderHeight, AndroidUtilities.dp(56)).setDuration(180); + ValueAnimator va = ValueAnimator.ofObject(new IntEvaluator(), currentHeaderHeight, dp(56)).setDuration(180); va.setInterpolator(new DecelerateInterpolator()); va.addUpdateListener(animation -> setCurrentHeaderHeight((int) animation.getAnimatedValue())); + va.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + super.onAnimationEnd(animation); + if (callback != null) { + callback.run(); + } + } + }); + if (callback != null) { + va.setDuration(va.getDuration() / 2); + } va.start(); } private void setCurrentHeaderHeight(int newHeight) { - if (searchContainer.getTag() != null) { + if (actionBar == null || actionBar.isSearching() || actionBar.isAddressing()) { return; } - int maxHeight = AndroidUtilities.dp(56); - int minHeight = AndroidUtilities.dp(24); - - if (newHeight < minHeight) { - newHeight = minHeight; - } else if (newHeight > maxHeight) { - newHeight = maxHeight; - } - - float heightDiff = maxHeight - minHeight; - if (heightDiff == 0) { - heightDiff = 1; - } - - currentHeaderHeight = newHeight; - float scale = 0.8f + (currentHeaderHeight - minHeight) / heightDiff * 0.2f; - float scale2 = 0.5f + (currentHeaderHeight - minHeight) / heightDiff * 0.5f; - backButton.setScaleX(scale); - backButton.setScaleY(scale); - backButton.setTranslationY((maxHeight - currentHeaderHeight) / 2); - menuContainer.setScaleX(scale); - menuContainer.setScaleY(scale); - titleTextView.setScaleX(scale); - titleTextView.setScaleY(scale); - lineProgressView.setScaleY(scale2); - menuContainer.setTranslationY((maxHeight - currentHeaderHeight) / 2); - titleTextView.setTranslationY((maxHeight - currentHeaderHeight) / 2); - headerView.setTranslationY(currentHeaderHeight - maxHeight); - searchShadow.setTranslationY(currentHeaderHeight - maxHeight); - menuButton.setAdditionalYOffset(-(currentHeaderHeight - maxHeight) / 2 + (Build.VERSION.SDK_INT < 21 ? AndroidUtilities.statusBarHeight : 0)); + currentHeaderHeight = Utilities.clamp(newHeight, dp(56), dp(24)); + actionBar.setHeight(currentHeaderHeight); textSelectionHelper.setTopOffset(currentHeaderHeight); - for (int i = 0; i < listView.length; i++) { - listView[i].setTopGlowOffset(currentHeaderHeight); + for (int i = 0; i < pages.length; i++) { + pages[i].listView.setTopGlowOffset(currentHeaderHeight); } } private void checkScroll(int dy) { + if (sheet != null && !sheet.attachedToActionBar) return; setCurrentHeaderHeight(currentHeaderHeight - dy); } @@ -4194,18 +4992,30 @@ private void openPreviewsChat(TLRPC.User user, long wid) { } public boolean open(MessageObject messageObject) { - return open(messageObject, null, null, true); + return open(messageObject, null, null, null, null); } public boolean open(TLRPC.TL_webPage webpage, String url) { - return open(null, webpage, url, true); + return open(null, webpage, url, null, null); } - private boolean open(final MessageObject messageObject, TLRPC.WebPage webpage, String url, boolean first) { - if (parentActivity == null || isVisible && !collapsed || messageObject == null && webpage == null) { + public boolean open(String url) { + return open(null, null, null, url, null); + } + + public boolean open(String url, Browser.Progress progress) { + return open(null, null, null, url, progress); + } + + private boolean open(final MessageObject messageObject, TLRPC.WebPage webpage, String url, String webUrl, Browser.Progress progress) { + if (parentActivity == null || sheet == null && isVisible && !collapsed/* || messageObject == null && webpage == null && webUrl == null*/) { return false; } + if (parentFragment != null && parentFragment.getParentLayout() instanceof ActionBarLayout) { + AndroidUtilities.hideKeyboard((ActionBarLayout) parentFragment.getParentLayout()); + } + String anchor = null; if (messageObject != null) { webpage = messageObject.messageOwner.media.webpage; @@ -4239,26 +5049,40 @@ private boolean open(final MessageObject messageObject, TLRPC.WebPage webpage, S } } - pagesStack.clear(); + final boolean openingAbove = sheet != null && !pagesStack.isEmpty(); + collapsed = false; - containerView.setTranslationX(0); - containerView.setTranslationY(0); - listView[0].setTranslationY(0); - listView[0].setTranslationX(0.0f); - listView[1].setTranslationX(0.0f); - listView[0].setAlpha(1.0f); - windowView.setInnerTranslationX(0); - - layoutManager[0].scrollToPositionWithOffset(0, 0); - if (first) { - setCurrentHeaderHeight(AndroidUtilities.dp(56)); + if (openingAbove) { + } else { - checkScrollAnimated(); + pagesStack.clear(); + containerView.setTranslationX(0); + if (sheet != null) { + sheet.setBackProgress(0); + } + containerView.setTranslationY(0); + pages[0].setTranslationY(0); + pages[0].setTranslationX(0.0f); + pages[1].setTranslationX(0.0f); + pages[0].setAlpha(1.0f); + windowView.setInnerTranslationX(0); + + pages[0].scrollToTop(false); + // if (first) { + setCurrentHeaderHeight(dp(56)); + // } else { + // checkScrollAnimated(); + // } } - boolean scrolledToAnchor = addPageToStack(webpage, anchor, 0); + boolean scrolledToAnchor; - if (first) { + if (sheet != null && BotWebViewContainer.firstWebView) { + sheet.animationsLock.lock(); + } + + if (webpage != null) { + scrolledToAnchor = addPageToStack(webpage, anchor, openingAbove ? 1 : 0); final String anchorFinal = !scrolledToAnchor && anchor != null ? anchor : null; TLRPC.TL_messages_getWebPage req = new TLRPC.TL_messages_getWebPage(); req.url = webpage.url; @@ -4290,12 +5114,16 @@ private boolean open(final MessageObject messageObject, TLRPC.WebPage webpage, S messagesRes.messages.add(messageObject.messageOwner); MessagesStorage.getInstance(currentAccount).putMessages(messagesRes, messageObject.getDialogId(), -2, 0, false, messageObject.scheduled ? 1 : 0, 0); } - pagesStack.set(0, webPage); + if (openingAbove) { + pagesStack.add(webPage); + } else { + pagesStack.set(0, webPage); + } if (pagesStack.size() == 1) { ApplicationLoader.applicationContext.getSharedPreferences("articles", Activity.MODE_PRIVATE).edit().remove("article" + webPage.id).commit(); - updateInterfaceForCurrentPage(webPage, false, 0); + updateInterfaceForCurrentPage(webPage, false, openingAbove ? 1 : 0); if (anchorFinal != null) { - scrollToAnchor(anchorFinal); + scrollToAnchor(anchorFinal, false); } } } @@ -4309,12 +5137,12 @@ private boolean open(final MessageObject messageObject, TLRPC.WebPage webpage, S if (webPageFinal.cached_page.views != webPage.cached_page_views) { webPageFinal.cached_page.views = webPage.cached_page_views; webPageFinal.cached_page.flags |= 8; - for (int a = 0; a < adapter.length; a++) { - if (adapter[a].currentPage == webPageFinal) { - int p = adapter[a].getItemCount() - 1; - RecyclerView.ViewHolder holder = listView[a].findViewHolderForAdapterPosition(p); + for (int a = 0; a < pages.length; a++) { + if (pages[a].adapter.currentPage == webPageFinal) { + int p = pages[a].adapter.getItemCount() - 1; + RecyclerView.ViewHolder holder = pages[a].listView.findViewHolderForAdapterPosition(p); if (holder != null) { - adapter[a].onViewAttachedToWindow(holder); + pages[a].adapter.onViewAttachedToWindow(holder); } } } @@ -4327,12 +5155,17 @@ private boolean open(final MessageObject messageObject, TLRPC.WebPage webpage, S } } })); + } else { + scrolledToAnchor = addPageToStack(webUrl, openingAbove ? 1 : 0); } lastInsets = null; if (sheet != null) { - AndroidUtilities.removeFromParent(windowView); - sheet.windowView.addView(windowView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + if (!openingAbove) { + AndroidUtilities.removeFromParent(windowView); + sheet.setContainerView(windowView); + sheet.windowView.addView(windowView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + } } else if (!isVisible) { WindowManager wm = (WindowManager) parentActivity.getSystemService(Context.WINDOW_SERVICE); if (attachedToWindow) { @@ -4366,46 +5199,78 @@ private boolean open(final MessageObject messageObject, TLRPC.WebPage webpage, S } isVisible = true; animationInProgress = 1; - windowView.setAlpha(0); - containerView.setAlpha(0); - final AnimatorSet animatorSet = new AnimatorSet(); - animatorSet.playTogether( - ObjectAnimator.ofFloat(windowView, View.ALPHA, 0, 1.0f), - ObjectAnimator.ofFloat(containerView, View.ALPHA, 0.0f, 1.0f), - ObjectAnimator.ofFloat(windowView, View.TRANSLATION_X, AndroidUtilities.dp(56), 0) - ); + if (openingAbove) { - animationEndRunnable = () -> { - if (containerView == null || windowView == null) { - return; - } - if (Build.VERSION.SDK_INT >= 18) { - containerView.setLayerType(View.LAYER_TYPE_NONE, null); + } else if (sheet != null) { + if (openingAbove) { + if (sheet != null) { + sheet.animationsLock.unlock(); + } + } else { + if (progress != null) { + // feature: to show progress before opening webview +// BotWebViewContainer.MyWebView webView = pages[0].getWebView(); +// if (webView != null) { +// boolean[] cancelled = new boolean[] { false }; +// progress.onCancel(() -> { +// cancelled[0] = true; +// sheet.dismissInstant(); +// }); +// progress.init(); +// webView.whenPageLoaded(() -> { +// progress.end(); +// if (!cancelled[0]) { +// AndroidUtilities.runOnUIThread(sheet::show, 80); +// } +// }, 1200); +// return true; +// } + } + sheet.show(); } - animationInProgress = 0; - AndroidUtilities.hideKeyboard(parentActivity.getCurrentFocus()); - }; + } else { + windowView.setAlpha(0); + containerView.setAlpha(0); + + final AnimatorSet animatorSet = new AnimatorSet(); + animatorSet.playTogether( + ObjectAnimator.ofFloat(windowView, View.ALPHA, 0, 1.0f), + ObjectAnimator.ofFloat(containerView, View.ALPHA, 0.0f, 1.0f), + ObjectAnimator.ofFloat(windowView, View.TRANSLATION_X, dp(56), 0) + ); + + animationEndRunnable = () -> { + if (containerView == null || windowView == null) { + return; + } + if (Build.VERSION.SDK_INT >= 18) { + containerView.setLayerType(View.LAYER_TYPE_NONE, null); + } + animationInProgress = 0; + AndroidUtilities.hideKeyboard(parentActivity.getCurrentFocus()); + }; - animatorSet.setDuration(150); - animatorSet.setInterpolator(interpolator); - animatorSet.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - AndroidUtilities.runOnUIThread(() -> { - notificationsLocker.unlock(); - if (animationEndRunnable != null) { - animationEndRunnable.run(); - animationEndRunnable = null; - } - }); - } - }); - transitionAnimationStartTime = System.currentTimeMillis(); - AndroidUtilities.runOnUIThread(() -> { - notificationsLocker.lock(); - animatorSet.start(); - }); + animatorSet.setDuration(150); + animatorSet.setInterpolator(interpolator); + animatorSet.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + AndroidUtilities.runOnUIThread(() -> { + notificationsLocker.unlock(); + if (animationEndRunnable != null) { + animationEndRunnable.run(); + animationEndRunnable = null; + } + }); + } + }); + transitionAnimationStartTime = System.currentTimeMillis(); + AndroidUtilities.runOnUIThread(() -> { + notificationsLocker.lock(); + animatorSet.start(); + }); + } if (Build.VERSION.SDK_INT >= 18) { containerView.setLayerType(View.LAYER_TYPE_HARDWARE, null); } @@ -4416,11 +5281,11 @@ private void showProgressView(boolean useLine, final boolean show) { if (useLine) { AndroidUtilities.cancelRunOnUIThread(lineProgressTickRunnable); if (show) { - lineProgressView.setProgress(0.0f, false); - lineProgressView.setProgress(0.3f, true); + actionBar.lineProgressView.setProgress(0.0f, false); + actionBar.lineProgressView.setProgress(0.3f, true); AndroidUtilities.runOnUIThread(lineProgressTickRunnable, 100); } else { - lineProgressView.setProgress(1.0f, true); + actionBar.lineProgressView.setProgress(1.0f, true); } } else { if (progressViewAnimation != null) { @@ -4429,24 +5294,32 @@ private void showProgressView(boolean useLine, final boolean show) { progressViewAnimation = new AnimatorSet(); if (show) { progressView.setVisibility(View.VISIBLE); - menuContainer.setEnabled(false); +// menuContainer.setEnabled(false); progressViewAnimation.playTogether( - ObjectAnimator.ofFloat(menuButton, View.SCALE_X, 0.1f), - ObjectAnimator.ofFloat(menuButton, View.SCALE_Y, 0.1f), - ObjectAnimator.ofFloat(menuButton, View.ALPHA, 0.0f), +// ObjectAnimator.ofFloat(menuButton, View.SCALE_X, 0.1f), +// ObjectAnimator.ofFloat(menuButton, View.SCALE_Y, 0.1f), +// ObjectAnimator.ofFloat(menuButton, View.ALPHA, 0.0f), +// ObjectAnimator.ofFloat(collapseButton, View.SCALE_X, 0.1f), +// ObjectAnimator.ofFloat(collapseButton, View.SCALE_Y, 0.1f), +// ObjectAnimator.ofFloat(collapseButton, View.ALPHA, 0.0f), ObjectAnimator.ofFloat(progressView, View.SCALE_X, 1.0f), ObjectAnimator.ofFloat(progressView, View.SCALE_Y, 1.0f), ObjectAnimator.ofFloat(progressView, View.ALPHA, 1.0f)); } else { - menuButton.setVisibility(View.VISIBLE); - menuContainer.setEnabled(true); +// menuButton.setVisibility(View.VISIBLE); +// collapseButton.setVisibility(View.VISIBLE); +// menuContainer.setEnabled(true); progressViewAnimation.playTogether( ObjectAnimator.ofFloat(progressView, View.SCALE_X, 0.1f), ObjectAnimator.ofFloat(progressView, View.SCALE_Y, 0.1f), - ObjectAnimator.ofFloat(progressView, View.ALPHA, 0.0f), - ObjectAnimator.ofFloat(menuButton, View.SCALE_X, 1.0f), - ObjectAnimator.ofFloat(menuButton, View.SCALE_Y, 1.0f), - ObjectAnimator.ofFloat(menuButton, View.ALPHA, 1.0f)); + ObjectAnimator.ofFloat(progressView, View.ALPHA, 0.0f)//, +// ObjectAnimator.ofFloat(menuButton, View.SCALE_X, 1.0f), +// ObjectAnimator.ofFloat(menuButton, View.SCALE_Y, 1.0f), +// ObjectAnimator.ofFloat(menuButton, View.ALPHA, 1.0f), +// ObjectAnimator.ofFloat(collapseButton, View.SCALE_X, 1.0f), +// ObjectAnimator.ofFloat(collapseButton, View.SCALE_Y, 1.0f), +// ObjectAnimator.ofFloat(collapseButton, View.ALPHA, 1.0f) + ); } progressViewAnimation.addListener(new AnimatorListenerAdapter() { @Override @@ -4455,7 +5328,8 @@ public void onAnimationEnd(Animator animation) { if (!show) { progressView.setVisibility(View.INVISIBLE); } else { - menuButton.setVisibility(View.INVISIBLE); +// menuButton.setVisibility(View.INVISIBLE); +// collapseButton.setVisibility(View.INVISIBLE); } } } @@ -4472,195 +5346,47 @@ public void onAnimationCancel(Animator animation) { } } - public void collapse() { - if (parentActivity == null || !isVisible || checkAnimation()) { - return; - } - if (fullscreenVideoContainer.getVisibility() == View.VISIBLE) { - if (customView != null) { - fullscreenVideoContainer.setVisibility(View.INVISIBLE); - customViewCallback.onCustomViewHidden(); - fullscreenVideoContainer.removeView(customView); - customView = null; - } else if (fullscreenedVideo != null) { - fullscreenedVideo.exitFullscreen(); - } - } - try { - if (visibleDialog != null) { - visibleDialog.dismiss(); - visibleDialog = null; - } - } catch (Exception e) { - FileLog.e(e); - } - - AnimatorSet animatorSet = new AnimatorSet(); - animatorSet.playTogether( - ObjectAnimator.ofFloat(containerView, View.TRANSLATION_X, containerView.getMeasuredWidth() - AndroidUtilities.dp(56)), - ObjectAnimator.ofFloat(containerView, View.TRANSLATION_Y, ActionBar.getCurrentActionBarHeight() + (Build.VERSION.SDK_INT >= 21 ? AndroidUtilities.statusBarHeight : 0)), - ObjectAnimator.ofFloat(windowView, View.ALPHA, 0.0f), - ObjectAnimator.ofFloat(listView[0], View.ALPHA, 0.0f), - ObjectAnimator.ofFloat(listView[0], View.TRANSLATION_Y, -AndroidUtilities.dp(56)), - ObjectAnimator.ofFloat(headerView, View.TRANSLATION_Y, 0), - - ObjectAnimator.ofFloat(backButton, View.SCALE_X, 1.0f), - ObjectAnimator.ofFloat(backButton, View.SCALE_Y, 1.0f), - ObjectAnimator.ofFloat(backButton, View.TRANSLATION_Y, 0), - ObjectAnimator.ofFloat(menuContainer, View.SCALE_X, 1.0f), - ObjectAnimator.ofFloat(menuContainer, View.TRANSLATION_Y, 0), - ObjectAnimator.ofFloat(menuContainer, View.SCALE_Y, 1.0f) - ); - collapsed = true; - animationInProgress = 2; - animationEndRunnable = () -> { - if (containerView == null) { - return; - } - if (Build.VERSION.SDK_INT >= 18) { - containerView.setLayerType(View.LAYER_TYPE_NONE, null); - } - animationInProgress = 0; - - //windowLayoutParams.flags |= WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; - WindowManager wm = (WindowManager) parentActivity.getSystemService(Context.WINDOW_SERVICE); - wm.updateViewLayout(windowView, windowLayoutParams); - - //onClosed(); - //containerView.setScaleX(1.0f); - //containerView.setScaleY(1.0f); - }; - animatorSet.setInterpolator(new DecelerateInterpolator()); - animatorSet.setDuration(250); - animatorSet.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - if (animationEndRunnable != null) { - animationEndRunnable.run(); - animationEndRunnable = null; - } - } - }); - transitionAnimationStartTime = System.currentTimeMillis(); - if (Build.VERSION.SDK_INT >= 18) { - containerView.setLayerType(View.LAYER_TYPE_HARDWARE, null); - } - backDrawable.setRotation(1, true); - animatorSet.start(); - } - - public void uncollapse() { - if (parentActivity == null || !isVisible || checkAnimation()) { - return; - } - - /*windowLayoutParams.flags &= ~WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; - WindowManager wm = (WindowManager) parentActivity.getSystemService(Context.WINDOW_SERVICE); - wm.updateViewLayout(windowView, windowLayoutParams);*/ - - AnimatorSet animatorSet = new AnimatorSet(); - animatorSet.playTogether( - ObjectAnimator.ofFloat(containerView, View.TRANSLATION_X, 0), - ObjectAnimator.ofFloat(containerView, View.TRANSLATION_Y, 0), - ObjectAnimator.ofFloat(windowView, View.ALPHA, 1.0f), - ObjectAnimator.ofFloat(listView[0], View.ALPHA, 1.0f), - ObjectAnimator.ofFloat(listView[0], View.TRANSLATION_Y, 0), - ObjectAnimator.ofFloat(headerView, View.TRANSLATION_Y, 0), - - ObjectAnimator.ofFloat(backButton, View.SCALE_X, 1.0f), - ObjectAnimator.ofFloat(backButton, View.SCALE_Y, 1.0f), - ObjectAnimator.ofFloat(backButton, View.TRANSLATION_Y, 0), - ObjectAnimator.ofFloat(menuContainer, View.SCALE_X, 1.0f), - ObjectAnimator.ofFloat(menuContainer, View.TRANSLATION_Y, 0), - ObjectAnimator.ofFloat(menuContainer, View.SCALE_Y, 1.0f) - ); - collapsed = false; - animationInProgress = 2; - animationEndRunnable = () -> { - if (containerView == null) { - return; - } - if (Build.VERSION.SDK_INT >= 18) { - containerView.setLayerType(View.LAYER_TYPE_NONE, null); - } - animationInProgress = 0; - //onClosed(); - }; - animatorSet.setDuration(250); - animatorSet.setInterpolator(new DecelerateInterpolator()); - animatorSet.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - if (animationEndRunnable != null) { - animationEndRunnable.run(); - animationEndRunnable = null; - } - } - }); - transitionAnimationStartTime = System.currentTimeMillis(); - if (Build.VERSION.SDK_INT >= 18) { - containerView.setLayerType(View.LAYER_TYPE_HARDWARE, null); - } - backDrawable.setRotation(0, true); - animatorSet.start(); - } - private void saveCurrentPagePosition() { - if (adapter[0].currentPage == null) { + if (pages[0].adapter.currentPage == null) { return; } - int position = layoutManager[0].findFirstVisibleItemPosition(); + int position = pages[0].layoutManager.findFirstVisibleItemPosition(); if (position != RecyclerView.NO_POSITION) { int offset; - View view = layoutManager[0].findViewByPosition(position); + View view = pages[0].layoutManager.findViewByPosition(position); if (view != null) { offset = view.getTop(); } else { offset = 0; } SharedPreferences.Editor editor = ApplicationLoader.applicationContext.getSharedPreferences("articles", Activity.MODE_PRIVATE).edit(); - String key = "article" + adapter[0].currentPage.id; + String key = "article" + pages[0].adapter.currentPage.id; editor.putInt(key, position).putInt(key + "o", offset).putBoolean(key + "r", AndroidUtilities.displaySize.x > AndroidUtilities.displaySize.y).commit(); } } private void refreshThemeColors() { if (deleteView != null) { - deleteView.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_listSelector), 2)); - deleteView.setTextColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuItem)); + deleteView.setBackgroundDrawable(Theme.createSelectorDrawable(getThemedColor(Theme.key_listSelector), 2)); + deleteView.setTextColor(getThemedColor(Theme.key_actionBarDefaultSubmenuItem)); } if (popupLayout != null) { - popupLayout.setBackgroundColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuBackground)); - } - if (searchContainer != null) { - searchContainer.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - } - if (searchField != null) { - searchField.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); - searchField.setCursorColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); - searchField.setHintTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteHintText)); + popupLayout.setBackgroundColor(getThemedColor(Theme.key_actionBarDefaultSubmenuBackground)); } if (searchUpButton != null) { - searchUpButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY)); - searchUpButton.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_actionBarActionModeDefaultSelector), 1)); + searchUpButton.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY)); + searchUpButton.setBackgroundDrawable(Theme.createSelectorDrawable(getThemedColor(Theme.key_actionBarActionModeDefaultSelector), 1)); } if (searchDownButton != null) { - searchDownButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY)); - searchDownButton.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_actionBarActionModeDefaultSelector), 1)); + searchDownButton.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY)); + searchDownButton.setBackgroundDrawable(Theme.createSelectorDrawable(getThemedColor(Theme.key_actionBarActionModeDefaultSelector), 1)); } if (searchCountText != null) { - searchCountText.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); - } - if (menuButton != null) { - menuButton.redrawPopup(Theme.getColor(Theme.key_actionBarDefaultSubmenuBackground)); - menuButton.setPopupItemsColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuItem), false); - menuButton.setPopupItemsColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuItemIcon), true); - } - if (clearButton != null) { - clearButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY)); + searchCountText.setTextColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); } - if (backDrawable != null) { - backDrawable.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + if (actionBar != null) { + actionBar.setMenuColors(pages[0] != null && SharedConfig.adaptableColorInBrowser ? pages[0].getBackgroundColor() : getThemedColor(Theme.key_iv_background)); + actionBar.setColors(pages[0] != null && SharedConfig.adaptableColorInBrowser ? pages[0].getActionBarColor() : getThemedColor(Theme.key_iv_background), true); } } @@ -4668,6 +5394,10 @@ public void close(boolean byBackPress, boolean force) { if (parentActivity == null || closeAnimationInProgress || !isVisible || checkAnimation()) { return; } + if (sheet != null) { + sheet.dismiss(false); + return; + } if (fullscreenVideoContainer.getVisibility() == View.VISIBLE) { if (customView != null) { fullscreenVideoContainer.setVisibility(View.INVISIBLE); @@ -4685,8 +5415,12 @@ public void close(boolean byBackPress, boolean force) { textSelectionHelper.clear(); return; } - if (searchContainer.getTag() != null) { - showSearch(false); + if (actionBar.isSearching()) { + actionBar.showSearch(false, true); + return; + } + if (actionBar.isAddressing()) { + actionBar.showAddress(false, true); return; } if (openUrlReqId != 0) { @@ -4724,7 +5458,7 @@ public void close(boolean byBackPress, boolean force) { animatorSet.playTogether( ObjectAnimator.ofFloat(windowView, View.ALPHA, 0), ObjectAnimator.ofFloat(containerView, View.ALPHA, 0.0f), - ObjectAnimator.ofFloat(windowView, View.TRANSLATION_X, 0, AndroidUtilities.dp(56)) + ObjectAnimator.ofFloat(windowView, View.TRANSLATION_X, 0, dp(56)) ); animationInProgress = 2; animationEndRunnable = () -> { @@ -4753,7 +5487,7 @@ public void onAnimationEnd(Animator animation) { containerView.setLayerType(View.LAYER_TYPE_HARDWARE, null); } animatorSet.start(); - + for (int i = 0; i < videoStates.size(); ++i) { BlockVideoCellState state = videoStates.valueAt(i); if (state.lastFrameBitmap != null) { @@ -4766,8 +5500,8 @@ public void onAnimationEnd(Animator animation) { private void onClosed() { isVisible = false; - for (int i = 0; i < listView.length; i++) { - adapter[i].cleanup(); + for (int i = 0; i < pages.length; i++) { + pages[i].cleanup(); } try { parentActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); @@ -4875,14 +5609,16 @@ public void destroyArticleViewer() { if (parentActivity == null || windowView == null) { return; } - try { - if (windowView.getParent() != null) { - WindowManager wm = (WindowManager) parentActivity.getSystemService(Context.WINDOW_SERVICE); - wm.removeViewImmediate(windowView); + if (sheet == null) { + try { + if (windowView.getParent() != null) { + WindowManager wm = (WindowManager) parentActivity.getSystemService(Context.WINDOW_SERVICE); + wm.removeViewImmediate(windowView); + } + windowView = null; + } catch (Exception e) { + FileLog.e(e); } - windowView = null; - } catch (Exception e) { - FileLog.e(e); } for (int a = 0; a < createdWebViews.size(); a++) { BlockEmbedCell cell = createdWebViews.get(a); @@ -5021,9 +5757,11 @@ private class WebpageAdapter extends RecyclerListView.SelectionAdapter { private TLRPC.WebPage currentPage; private TLRPC.TL_pageBlockChannel channelBlock; private boolean isRtl; + private final boolean padding; - public WebpageAdapter(Context ctx) { + public WebpageAdapter(Context ctx, boolean withPadding) { context = ctx; + padding = withPadding; } private TLRPC.Photo getPhotoWithId(long id) { @@ -5574,6 +6312,16 @@ private void addAllMediaFromBlock(WebpageAdapter adapter, TLRPC.PageBlock block) public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view; switch (viewType) { + case (Integer.MAX_VALUE - 1): { + view = new View(context) { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + final int height = AndroidUtilities.displaySize.y; + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec((int) (height * .4f), MeasureSpec.EXACTLY)); + } + }; + break; + } case 0: { view = new BlockParagraphCell(context, this); break; @@ -5720,7 +6468,10 @@ public boolean isEnabled(RecyclerView.ViewHolder holder) { @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - if (position < localBlocks.size()) { + if (padding) { + position--; + } + if (position >= 0 && position < localBlocks.size()) { TLRPC.PageBlock block = localBlocks.get(position); bindBlockToHolder(holder.getItemViewType(), holder, block, position, localBlocks.size()); } @@ -5964,6 +6715,11 @@ private int getTypeForBlock(TLRPC.PageBlock block) { @Override public int getItemViewType(int position) { + if (padding) { + if (position == 0) + return Integer.MAX_VALUE - 1; + position--; + } if (position == localBlocks.size()) { return 90; } @@ -5976,7 +6732,14 @@ public TLRPC.PageBlock getItem(int position) { @Override public int getItemCount() { - return currentPage != null && currentPage.cached_page != null ? localBlocks.size() + 1 : 0; + int count = 0; + if (currentPage != null && currentPage.cached_page != null) { + count += localBlocks.size() + 1; + } + if (padding) { + count++; + } + return count; } private boolean isBlockOpened(TL_pageBlockDetailsChild child) { @@ -5994,6 +6757,17 @@ private boolean isBlockOpened(TL_pageBlockDetailsChild child) { return false; } + public void resetCachedHeights() { + for (int i = 0; i < localBlocks.size(); ++i) { + TLRPC.PageBlock pageBlock = localBlocks.get(i); + if (pageBlock != null) { + pageBlock.cachedWidth = 0; + pageBlock.cachedHeight = 0; + } + } + calculateContentHeight(); + } + private void updateRows() { localBlocks.clear(); for (int a = 0, size = blocks.size(); a < size; a++) { @@ -6007,8 +6781,63 @@ private void updateRows() { } localBlocks.add(originalBlock); } + + if (localBlocks.size() < 100) + calculateContentHeight(); + else itemHeights = null; + } + + public int[] itemHeights; + public int[] sumItemHeights; + public int fullHeight; + + public void calculateContentHeight() { + Utilities.globalQueue.cancelRunnable(calculateContentHeightRunnable); + Utilities.globalQueue.postRunnable(calculateContentHeightRunnable, 100); } + private final Runnable calculateContentHeightRunnable = () -> { + final ArrayList<TLRPC.PageBlock> blocks = new ArrayList<>(localBlocks); + final int itemCount = blocks.size() + (sheet != null && sheet.halfSize() ? 1 : 0); + int fullHeight = 0; + final int[] itemHeights = new int[itemCount]; + final int[] sumItemHeights = new int[itemCount]; + if (pages[0] == null) return; + final RecyclerView listView = pages[0].listView; + if (listView == null) return; + int widthSpec = View.MeasureSpec.makeMeasureSpec(AndroidUtilities.displaySize.x, View.MeasureSpec.AT_MOST); + int heightSpec = View.MeasureSpec.makeMeasureSpec(AndroidUtilities.displaySize.y, View.MeasureSpec.AT_MOST); + for (int i = 0; i < itemCount; i++) { + if (ArticleViewer.WebpageAdapter.this.padding && i == 0) { + itemHeights[0] = 0; + } else { + final int position = ArticleViewer.WebpageAdapter.this.padding ? i - 1 : i; + TLRPC.PageBlock page = position < 0 || position >= blocks.size() ? null : blocks.get(position); + if (page != null && page.cachedHeight != 0 && page.cachedWidth == View.MeasureSpec.getSize(widthSpec)) { + itemHeights[i] = page.cachedHeight; + } else { + RecyclerView.ViewHolder viewHolder = createViewHolder(listView, getTypeForBlock(page)); + bindBlockToHolder(viewHolder.getItemViewType(), viewHolder, page, position, blocks.size()); + viewHolder.itemView.measure(widthSpec, heightSpec); + itemHeights[i] = viewHolder.itemView.getMeasuredHeight(); + if (page != null) { + page.cachedHeight = itemHeights[i]; + page.cachedWidth = View.MeasureSpec.getSize(widthSpec); + } + } + } + sumItemHeights[i] = (i - 1 < 0 ? 0 : sumItemHeights[i - 1]) + itemHeights[i]; + fullHeight += itemHeights[i]; + } + final int finalFullHeight = fullHeight; + AndroidUtilities.runOnUIThread(() -> { + this.fullHeight = finalFullHeight; + this.itemHeights = itemHeights; + this.sumItemHeights = sumItemHeights; + updatePages(); + }); + }; + private void cleanup() { currentPage = null; blocks.clear(); @@ -6244,7 +7073,7 @@ public boolean onTouchEvent(MotionEvent event) { } float x = event.getX(); float y = event.getY(); - if (channelCell.getVisibility() == VISIBLE && y > channelCell.getTranslationY() && y < channelCell.getTranslationY() + AndroidUtilities.dp(39)) { + if (channelCell.getVisibility() == VISIBLE && y > channelCell.getTranslationY() && y < channelCell.getTranslationY() + dp(39)) { if (parentAdapter.channelBlock != null && event.getAction() == MotionEvent.ACTION_UP) { MessagesController.getInstance(currentAccount).openByUserName(ChatObject.getPublicUsername(parentAdapter.channelBlock.channel), parentFragment, 2); close(false, true); @@ -6252,7 +7081,7 @@ public boolean onTouchEvent(MotionEvent event) { return true; } if (event.getAction() == MotionEvent.ACTION_DOWN && imageView.isInsideImage(x, y)) { - if (buttonState != -1 && x >= buttonX && x <= buttonX + AndroidUtilities.dp(48) && y >= buttonY && y <= buttonY + AndroidUtilities.dp(48) || buttonState == 0) { + if (buttonState != -1 && x >= buttonX && x <= buttonX + dp(48) && y >= buttonY && y <= buttonY + dp(48) || buttonState == 0) { buttonPressed = 1; invalidate(); } else { @@ -6292,16 +7121,16 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int photoX; int textWidth; if (currentType == 0 && currentBlock.level > 0) { - textX = photoX = AndroidUtilities.dp(14 * currentBlock.level) + AndroidUtilities.dp(18); - photoWidth -= photoX + AndroidUtilities.dp(18); + textX = photoX = dp(14 * currentBlock.level) + dp(18); + photoWidth -= photoX + dp(18); textWidth = photoWidth; } else { photoX = 0; - textX = AndroidUtilities.dp(18); - textWidth = width - AndroidUtilities.dp(36); + textX = dp(18); + textWidth = width - dp(36); } if (currentDocument != null) { - int size = AndroidUtilities.dp(48); + int size = dp(48); TLRPC.PhotoSize thumb = FileLoader.getClosestPhotoSizeWithSize(currentDocument.thumbs, 48); if (currentType == 0) { float scale; @@ -6324,7 +7153,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (parentBlock instanceof TLRPC.TL_pageBlockCover) { height = Math.min(height, photoWidth); } else { - int maxHeight = (int) ((Math.max(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - AndroidUtilities.dp(56)) * 0.9f); + int maxHeight = (int) ((Math.max(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - dp(56)) * 0.9f); if (height > maxHeight) { height = maxHeight; scale = height / h; @@ -6333,21 +7162,21 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } } if (height == 0) { - height = AndroidUtilities.dp(100); + height = dp(100); } else if (height < size) { height = size; } photoHeight = height; } else if (currentType == 2) { if ((groupPosition.flags & POSITION_FLAG_RIGHT) == 0) { - photoWidth -= AndroidUtilities.dp(2); + photoWidth -= dp(2); } if ((groupPosition.flags & POSITION_FLAG_BOTTOM) == 0) { - photoHeight -= AndroidUtilities.dp(2); + photoHeight -= dp(2); } } imageView.setQualityThumbDocument(currentDocument); - int photoY = (isFirst || currentType == 1 || currentType == 2 || currentBlock.level > 0) ? 0 : AndroidUtilities.dp(8); + int photoY = (isFirst || currentType == 1 || currentType == 2 || currentBlock.level > 0) ? 0 : dp(8); imageView.setImageCoords(photoX, photoY, photoWidth, photoHeight); if (isGif) { if (videoState != null && videoState.lastFrameBitmap != null) { @@ -6374,34 +7203,34 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { buttonY = (int) (imageView.getImageY() + (imageView.getImageHeight() - size) / 2.0f); radialProgress.setProgressRect(buttonX, buttonY, buttonX + size, buttonY + size); } - textY = (int) (imageView.getImageY() + imageView.getImageHeight() + AndroidUtilities.dp(8)); + textY = (int) (imageView.getImageY() + imageView.getImageHeight() + dp(8)); if (currentType == 0) { captionLayout = createLayoutForText(this, null, currentBlock.caption.text, textWidth, textY, currentBlock, parentAdapter); if (captionLayout != null) { - creditOffset = AndroidUtilities.dp(4) + captionLayout.getHeight(); - height += creditOffset + AndroidUtilities.dp(4); + creditOffset = dp(4) + captionLayout.getHeight(); + height += creditOffset + dp(4); captionLayout.x = textX; captionLayout.y = textY; } creditLayout = createLayoutForText(this, null, currentBlock.caption.credit, textWidth, textY + creditOffset, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (creditLayout != null) { - height += AndroidUtilities.dp(4) + creditLayout.getHeight(); + height += dp(4) + creditLayout.getHeight(); creditLayout.x = textX; creditLayout.y = textY + creditOffset; } } if (!isFirst && currentType == 0 && currentBlock.level <= 0) { - height += AndroidUtilities.dp(8); + height += dp(8); } boolean nextIsChannel = parentBlock instanceof TLRPC.TL_pageBlockCover && parentAdapter.blocks.size() > 1 && parentAdapter.blocks.get(1) instanceof TLRPC.TL_pageBlockChannel; if (currentType != 2 && !nextIsChannel) { - height += AndroidUtilities.dp(8); + height += dp(8); } } else { height = 1; } channelCell.measure(widthMeasureSpec, heightMeasureSpec); - channelCell.setTranslationY(imageView.getImageHeight() - AndroidUtilities.dp(39)); + channelCell.setTranslationY(imageView.getImageHeight() - dp(39)); FrameLayout.LayoutParams params = (LayoutParams) aspectRationContainer.getLayoutParams(); params.leftMargin = (int) imageView.getImageX(); params.topMargin = (int) imageView.getImageY(); @@ -6437,7 +7266,7 @@ protected void onDraw(Canvas canvas) { canvas.restore(); } if (currentBlock.level > 0) { - canvas.drawRect(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(20), getMeasuredHeight() - (currentBlock.bottom ? AndroidUtilities.dp(6) : 0), quoteLinePaint); + canvas.drawRect(dp(18), 0, dp(20), getMeasuredHeight() - (currentBlock.bottom ? dp(6) : 0), quoteLinePaint); } super.onDraw(canvas); @@ -6602,7 +7431,7 @@ public void onRenderedFirstFrame() { aspectRatioFrameLayout.setAspectRatio(videoAttr.w / (float) videoAttr.h, 0); } } - Uri uri = FileStreamLoadOperation.prepareUri(currentAccount, document, parentAdapter.currentPage); + Uri uri = parentAdapter.currentPage == null ? null : FileStreamLoadOperation.prepareUri(currentAccount, document, parentAdapter.currentPage); if (uri == null) { return; } @@ -6678,7 +7507,7 @@ private class BlockAudioCell extends View implements DownloadController.FileDown private SeekBar seekBar; private boolean isFirst; private int textX; - private int textY = AndroidUtilities.dp(58); + private int textY = dp(58); private int creditOffset; private String lastTimeString; @@ -6707,7 +7536,7 @@ public BlockAudioCell(Context context, WebpageAdapter adapter) { parentAdapter = adapter; radialProgress = new RadialProgress2(this); - radialProgress.setCircleRadius(AndroidUtilities.dp(24)); + radialProgress.setCircleRadius(dp(24)); TAG = DownloadController.getInstance(currentAccount).generateObserverTag(); seekBar = new SeekBar(this); @@ -6731,7 +7560,7 @@ public void setBlock(TLRPC.TL_pageBlockAudio block, boolean first, boolean last) isFirst = first; - seekBar.setColors(Theme.getColor(Theme.key_chat_inAudioSeekbar), Theme.getColor(Theme.key_chat_inAudioCacheSeekbar), Theme.getColor(Theme.key_chat_inAudioSeekbarFill), Theme.getColor(Theme.key_chat_inAudioSeekbarFill), Theme.getColor(Theme.key_chat_inAudioSeekbarSelected)); + seekBar.setColors(getThemedColor(Theme.key_chat_inAudioSeekbar), getThemedColor(Theme.key_chat_inAudioCacheSeekbar), getThemedColor(Theme.key_chat_inAudioSeekbarFill), getThemedColor(Theme.key_chat_inAudioSeekbarFill), getThemedColor(Theme.key_chat_inAudioSeekbarSelected)); updateButtonState(false); requestLayout(); @@ -6755,7 +7584,7 @@ public boolean onTouchEvent(MotionEvent event) { return true; } if (event.getAction() == MotionEvent.ACTION_DOWN) { - if (buttonState != -1 && x >= buttonX && x <= buttonX + AndroidUtilities.dp(48) && y >= buttonY && y <= buttonY + AndroidUtilities.dp(48) || buttonState == 0) { + if (buttonState != -1 && x >= buttonX && x <= buttonX + dp(48) && y >= buttonY && y <= buttonY + dp(48) || buttonState == 0) { buttonPressed = 1; invalidate(); } @@ -6776,39 +7605,39 @@ public boolean onTouchEvent(MotionEvent event) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); - int height = AndroidUtilities.dp(54); + int height = dp(54); if (currentBlock != null) { int textWidth; if (currentBlock.level > 0) { - textX = AndroidUtilities.dp(14 * currentBlock.level) + AndroidUtilities.dp(18); + textX = dp(14 * currentBlock.level) + dp(18); } else { - textX = AndroidUtilities.dp(18); + textX = dp(18); } - textWidth = width - textX - AndroidUtilities.dp(18); - int size = AndroidUtilities.dp(44); - buttonX = AndroidUtilities.dp(16); - buttonY = AndroidUtilities.dp(5); + textWidth = width - textX - dp(18); + int size = dp(44); + buttonX = dp(16); + buttonY = dp(5); radialProgress.setProgressRect(buttonX, buttonY, buttonX + size, buttonY + size); captionLayout = createLayoutForText(this, null, currentBlock.caption.text, textWidth, textY, currentBlock, parentAdapter); if (captionLayout != null) { - creditOffset = AndroidUtilities.dp(8) + captionLayout.getHeight(); - height += creditOffset + AndroidUtilities.dp(8); + creditOffset = dp(8) + captionLayout.getHeight(); + height += creditOffset + dp(8); } creditLayout = createLayoutForText(this, null, currentBlock.caption.credit, textWidth, textY + creditOffset, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (creditLayout != null) { - height += AndroidUtilities.dp(4) + creditLayout.getHeight(); + height += dp(4) + creditLayout.getHeight(); } if (!isFirst && currentBlock.level <= 0) { - height += AndroidUtilities.dp(8); + height += dp(8); } String author = currentMessageObject.getMusicAuthor(false); String title = currentMessageObject.getMusicTitle(false); - seekBarX = buttonX + AndroidUtilities.dp(50) + size; - int w = width - seekBarX - AndroidUtilities.dp(18); + seekBarX = buttonX + dp(50) + size; + int w = width - seekBarX - dp(18); if (!TextUtils.isEmpty(title) || !TextUtils.isEmpty(author)) { SpannableStringBuilder stringBuilder; if (!TextUtils.isEmpty(title) && !TextUtils.isEmpty(author)) { @@ -6826,12 +7655,12 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { titleLayout = new DrawingText(); titleLayout.textLayout = new StaticLayout(stringFinal, audioTimePaint, w, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); titleLayout.parentBlock = currentBlock; - seekBarY = buttonY + (size - AndroidUtilities.dp(30)) / 2 + AndroidUtilities.dp(11); + seekBarY = buttonY + (size - dp(30)) / 2 + dp(11); } else { titleLayout = null; - seekBarY = buttonY + (size - AndroidUtilities.dp(30)) / 2; + seekBarY = buttonY + (size - dp(30)) / 2; } - seekBar.setSize(w, AndroidUtilities.dp(30)); + seekBar.setSize(w, dp(30)); } else { height = 1; } @@ -6846,7 +7675,7 @@ protected void onDraw(Canvas canvas) { return; } radialProgress.setColorKeys(Theme.key_chat_inLoader, Theme.key_chat_inLoaderSelected, Theme.key_chat_inMediaIcon, Theme.key_chat_inMediaIconSelected); - radialProgress.setProgressColor(Theme.getColor(Theme.key_chat_inFileProgress)); + radialProgress.setProgressColor(getThemedColor(Theme.key_chat_inFileProgress)); radialProgress.draw(canvas); canvas.save(); canvas.translate(seekBarX, seekBarY); @@ -6855,14 +7684,14 @@ protected void onDraw(Canvas canvas) { int count = 0; if (durationLayout != null) { canvas.save(); - canvas.translate(buttonX + AndroidUtilities.dp(54), seekBarY + AndroidUtilities.dp(6)); + canvas.translate(buttonX + dp(54), seekBarY + dp(6)); durationLayout.draw(canvas); canvas.restore(); } if (titleLayout != null) { canvas.save(); - titleLayout.x = buttonX + AndroidUtilities.dp(54); - titleLayout.y = seekBarY - AndroidUtilities.dp(16); + titleLayout.x = buttonX + dp(54); + titleLayout.y = seekBarY - dp(16); canvas.translate(titleLayout.x, titleLayout.y); drawTextSelection(canvas, this, count++); titleLayout.draw(canvas, this); @@ -6887,7 +7716,7 @@ protected void onDraw(Canvas canvas) { canvas.restore(); } if (currentBlock.level > 0) { - canvas.drawRect(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(20), getMeasuredHeight() - (currentBlock.bottom ? AndroidUtilities.dp(6) : 0), quoteLinePaint); + canvas.drawRect(dp(18), 0, dp(20), getMeasuredHeight() - (currentBlock.bottom ? dp(6) : 0), quoteLinePaint); } } @@ -6927,7 +7756,7 @@ public void updatePlayingMessageProgress() { String timeString = AndroidUtilities.formatShortDuration(duration); if (lastTimeString == null || lastTimeString != null && !lastTimeString.equals(timeString)) { lastTimeString = timeString; - audioTimePaint.setTextSize(AndroidUtilities.dp(16)); + audioTimePaint.setTextSize(dp(16)); int timeWidth = (int) Math.ceil(audioTimePaint.measureText(timeString)); durationLayout = new StaticLayout(timeString, audioTimePaint, timeWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); } @@ -7082,8 +7911,8 @@ public BlockEmbedPostCell(Context context, WebpageAdapter adapter) { parentAdapter = adapter; avatarImageView = new ImageReceiver(this); - avatarImageView.setRoundRadius(AndroidUtilities.dp(20)); - avatarImageView.setImageCoords(AndroidUtilities.dp(18 + 14), AndroidUtilities.dp(8), AndroidUtilities.dp(40), AndroidUtilities.dp(40)); + avatarImageView.setRoundRadius(dp(20)); + avatarImageView.setImageCoords(dp(18 + 14), dp(8), dp(40), dp(40)); avatarDrawable = new AvatarDrawable(); } @@ -7107,53 +7936,53 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (currentBlock != null) { if (currentBlock instanceof TL_pageBlockEmbedPostCaption) { height = 0; - textX = AndroidUtilities.dp(18); - textY = AndroidUtilities.dp(4); - int textWidth = width - AndroidUtilities.dp(36 + 14); + textX = dp(18); + textY = dp(4); + int textWidth = width - dp(36 + 14); captionLayout = createLayoutForText(this, null, currentBlock.caption.text, textWidth, textY, currentBlock, parentAdapter); if (captionLayout != null) { - creditOffset = AndroidUtilities.dp(4) + captionLayout.getHeight(); - height += creditOffset + AndroidUtilities.dp(4); + creditOffset = dp(4) + captionLayout.getHeight(); + height += creditOffset + dp(4); } creditLayout = createLayoutForText(this, null, currentBlock.caption.credit, textWidth, textY + creditOffset, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (creditLayout != null) { - height += AndroidUtilities.dp(4) + creditLayout.getHeight(); + height += dp(4) + creditLayout.getHeight(); } } else { if (avatarVisible = (currentBlock.author_photo_id != 0)) { TLRPC.Photo photo = parentAdapter.getPhotoWithId(currentBlock.author_photo_id); if (avatarVisible = (photo instanceof TLRPC.TL_photo)) { avatarDrawable.setInfo(0, currentBlock.author, null); - TLRPC.PhotoSize image = FileLoader.getClosestPhotoSizeWithSize(photo.sizes, AndroidUtilities.dp(40), true); + TLRPC.PhotoSize image = FileLoader.getClosestPhotoSizeWithSize(photo.sizes, dp(40), true); avatarImageView.setImage(ImageLocation.getForPhoto(image, photo), "40_40", avatarDrawable, 0, null, parentAdapter.currentPage, 1); } } - nameLayout = createLayoutForText(this, currentBlock.author, null, width - AndroidUtilities.dp(36 + 14 + (avatarVisible ? 40 + 14 : 0)), 0, currentBlock, Layout.Alignment.ALIGN_NORMAL, 1, parentAdapter); + nameLayout = createLayoutForText(this, currentBlock.author, null, width - dp(36 + 14 + (avatarVisible ? 40 + 14 : 0)), 0, currentBlock, Layout.Alignment.ALIGN_NORMAL, 1, parentAdapter); if (nameLayout != null) { - nameLayout.x = AndroidUtilities.dp(18 + 14 + (avatarVisible ? 40 + 14 : 0)); - nameLayout.y = AndroidUtilities.dp(dateLayout != null ? 10 : 19); + nameLayout.x = dp(18 + 14 + (avatarVisible ? 40 + 14 : 0)); + nameLayout.y = dp(dateLayout != null ? 10 : 19); } if (currentBlock.date != 0) { - dateLayout = createLayoutForText(this, LocaleController.getInstance().getChatFullDate().format((long) currentBlock.date * 1000), null, width - AndroidUtilities.dp(36 + 14 + (avatarVisible ? 40 + 14 : 0)), AndroidUtilities.dp(29), currentBlock, parentAdapter); + dateLayout = createLayoutForText(this, LocaleController.getInstance().getChatFullDate().format((long) currentBlock.date * 1000), null, width - dp(36 + 14 + (avatarVisible ? 40 + 14 : 0)), dp(29), currentBlock, parentAdapter); } else { dateLayout = null; } - height = AndroidUtilities.dp(40 + 8 + 8); + height = dp(40 + 8 + 8); if (currentBlock.blocks.isEmpty()) { - textX = AndroidUtilities.dp(18 + 14); - textY = AndroidUtilities.dp(40 + 8 + 8); - int textWidth = width - AndroidUtilities.dp(36 + 14); + textX = dp(18 + 14); + textY = dp(40 + 8 + 8); + int textWidth = width - dp(36 + 14); captionLayout = createLayoutForText(this, null, currentBlock.caption.text, textWidth, textY, currentBlock, parentAdapter); if (captionLayout != null) { - creditOffset = AndroidUtilities.dp(4) + captionLayout.getHeight(); - height += creditOffset + AndroidUtilities.dp(4); + creditOffset = dp(4) + captionLayout.getHeight(); + height += creditOffset + dp(4); } creditLayout = createLayoutForText(this, null, currentBlock.caption.credit, textWidth, textY + creditOffset, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (creditLayout != null) { - height += AndroidUtilities.dp(4) + creditLayout.getHeight(); + height += dp(4) + creditLayout.getHeight(); } } else { captionLayout = null; @@ -7161,8 +7990,8 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } if (dateLayout != null) { - dateLayout.x = AndroidUtilities.dp(18 + 14 + (avatarVisible ? 40 + 14 : 0)); - dateLayout.y = AndroidUtilities.dp(29); + dateLayout.x = dp(18 + 14 + (avatarVisible ? 40 + 14 : 0)); + dateLayout.y = dp(29); } if (captionLayout != null) { @@ -7194,19 +8023,19 @@ protected void onDraw(Canvas canvas) { } if (nameLayout != null) { canvas.save(); - canvas.translate(AndroidUtilities.dp(18 + 14 + (avatarVisible ? 40 + 14 : 0)), AndroidUtilities.dp(dateLayout != null ? 10 : 19)); + canvas.translate(dp(18 + 14 + (avatarVisible ? 40 + 14 : 0)), dp(dateLayout != null ? 10 : 19)); drawTextSelection(canvas, this, count++); nameLayout.draw(canvas, this); canvas.restore(); } if (dateLayout != null) { canvas.save(); - canvas.translate(AndroidUtilities.dp(18 + 14 + (avatarVisible ? 40 + 14 : 0)), AndroidUtilities.dp(29)); + canvas.translate(dp(18 + 14 + (avatarVisible ? 40 + 14 : 0)), dp(29)); drawTextSelection(canvas, this, count++); dateLayout.draw(canvas, this); canvas.restore(); } - canvas.drawRect(AndroidUtilities.dp(18), AndroidUtilities.dp(6), AndroidUtilities.dp(20), lineHeight - (currentBlock.level != 0 ? 0 : AndroidUtilities.dp(6)), quoteLinePaint); + canvas.drawRect(dp(18), dp(6), dp(20), lineHeight - (currentBlock.level != 0 ? 0 : dp(6)), quoteLinePaint); } if (captionLayout != null) { canvas.save(); @@ -7274,19 +8103,19 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (currentBlock != null) { if (currentBlock.level == 0) { - textY = AndroidUtilities.dp(8); - textX = AndroidUtilities.dp(18); + textY = dp(8); + textX = dp(18); } else { textY = 0; - textX = AndroidUtilities.dp(18 + 14 * currentBlock.level); + textX = dp(18 + 14 * currentBlock.level); } - textLayout = createLayoutForText(this, null, currentBlock.text, width - AndroidUtilities.dp(18) - textX, textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, 0, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.text, width - dp(18) - textX, textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, 0, parentAdapter); if (textLayout != null) { height = textLayout.getHeight(); if (currentBlock.level > 0) { - height += AndroidUtilities.dp(8); + height += dp(8); } else { - height += AndroidUtilities.dp(8 + 8); + height += dp(8 + 8); } textLayout.x = textX; textLayout.y = textY; @@ -7312,7 +8141,7 @@ protected void onDraw(Canvas canvas) { canvas.restore(); } if (currentBlock.level > 0) { - canvas.drawRect(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(20), getMeasuredHeight() - (currentBlock.bottom ? AndroidUtilities.dp(6) : 0), quoteLinePaint); + canvas.drawRect(dp(18), 0, dp(20), getMeasuredHeight() - (currentBlock.bottom ? dp(6) : 0), quoteLinePaint); } } @@ -7352,8 +8181,10 @@ public void postEvent(final String eventName, final String eventData) { } } - private TouchyWebView webView; - private WebPlayerView videoView; + @Nullable + private final TouchyWebView webView; + @Nullable + private final WebPlayerView videoView; private DrawingText captionLayout; private DrawingText creditLayout; private int textX; @@ -7394,246 +8225,273 @@ public BlockEmbedCell(final Context context, WebpageAdapter adapter) { parentAdapter = adapter; setWillNotDraw(false); - videoView = new WebPlayerView(context, false, false, new WebPlayerView.WebPlayerViewDelegate() { - @Override - public void onInitFailed() { - webView.setVisibility(VISIBLE); - videoView.setVisibility(INVISIBLE); - videoView.loadVideo(null, null, null, null, false); - HashMap<String, String> args = new HashMap<>(); - args.put("Referer", ApplicationLoader.applicationContext.getPackageName()); - webView.loadUrl(currentBlock.url, args); - } - - @Override - public void onVideoSizeChanged(float aspectRatio, int rotation) { - fullscreenAspectRatioView.setAspectRatio(aspectRatio, rotation); - } + if (Looper.myLooper() == Looper.getMainLooper()) { + videoView = new WebPlayerView(context, false, false, new WebPlayerView.WebPlayerViewDelegate() { + @Override + public void onInitFailed() { + webView.setVisibility(VISIBLE); + videoView.setVisibility(INVISIBLE); + videoView.loadVideo(null, null, null, null, false); + HashMap<String, String> args = new HashMap<>(); + args.put("Referer", ApplicationLoader.applicationContext.getPackageName()); + webView.loadUrl(currentBlock.url, args); + } - @Override - public void onInlineSurfaceTextureReady() { + @Override + public void onVideoSizeChanged(float aspectRatio, int rotation) { + fullscreenAspectRatioView.setAspectRatio(aspectRatio, rotation); + } - } + @Override + public void onInlineSurfaceTextureReady() { - @Override - public TextureView onSwitchToFullscreen(View controlsView, boolean fullscreen, float aspectRatio, int rotation, boolean byButton) { - if (fullscreen) { - fullscreenAspectRatioView.addView(fullscreenTextureView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); - fullscreenAspectRatioView.setVisibility(View.VISIBLE); - fullscreenAspectRatioView.setAspectRatio(aspectRatio, rotation); - fullscreenedVideo = videoView; - fullscreenVideoContainer.addView(controlsView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); - fullscreenVideoContainer.setVisibility(VISIBLE); - } else { - fullscreenAspectRatioView.removeView(fullscreenTextureView); - fullscreenedVideo = null; - fullscreenAspectRatioView.setVisibility(View.GONE); - fullscreenVideoContainer.setVisibility(INVISIBLE); } - return fullscreenTextureView; - } - @Override - public void prepareToSwitchInlineMode(boolean inline, Runnable switchInlineModeRunnable, float aspectRatio, boolean animated) { + @Override + public TextureView onSwitchToFullscreen(View controlsView, boolean fullscreen, float aspectRatio, int rotation, boolean byButton) { + if (fullscreen) { + fullscreenAspectRatioView.addView(fullscreenTextureView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + fullscreenAspectRatioView.setVisibility(View.VISIBLE); + fullscreenAspectRatioView.setAspectRatio(aspectRatio, rotation); + fullscreenedVideo = videoView; + fullscreenVideoContainer.addView(controlsView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + fullscreenVideoContainer.setVisibility(VISIBLE); + } else { + fullscreenAspectRatioView.removeView(fullscreenTextureView); + fullscreenedVideo = null; + fullscreenAspectRatioView.setVisibility(View.GONE); + fullscreenVideoContainer.setVisibility(INVISIBLE); + } + return fullscreenTextureView; + } - } + @Override + public void prepareToSwitchInlineMode(boolean inline, Runnable switchInlineModeRunnable, float aspectRatio, boolean animated) { - @Override - public TextureView onSwitchInlineMode(View controlsView, boolean inline, int videoWidth, int videoHeight, int rotation, boolean animated) { - return null; - } + } - @Override - public void onSharePressed() { - if (parentActivity == null) { - return; + @Override + public TextureView onSwitchInlineMode(View controlsView, boolean inline, int videoWidth, int videoHeight, int rotation, boolean animated) { + return null; } - showDialog(new ShareAlert(parentActivity, null, currentBlock.url, false, currentBlock.url, false)); - } - @Override - public void onPlayStateChanged(WebPlayerView playerView, boolean playing) { - if (playing) { - if (currentPlayingVideo != null && currentPlayingVideo != playerView) { - currentPlayingVideo.pause(); - } - currentPlayingVideo = playerView; - try { - parentActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - } catch (Exception e) { - FileLog.e(e); - } - } else { - if (currentPlayingVideo == playerView) { - currentPlayingVideo = null; - } - try { - parentActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - } catch (Exception e) { - FileLog.e(e); + @Override + public void onSharePressed() { + if (parentActivity == null) { + return; } + showDialog(new ShareAlert(parentActivity, null, currentBlock.url, false, currentBlock.url, false)); } - } - - @Override - public boolean checkInlinePermissions() { - return false; - } - @Override - public ViewGroup getTextureViewContainer() { - return null; - } - }); - addView(videoView); - createdWebViews.add(this); + @Override + public void onPlayStateChanged(WebPlayerView playerView, boolean playing) { + if (playing) { + if (currentPlayingVideo != null && currentPlayingVideo != playerView) { + currentPlayingVideo.pause(); + } + currentPlayingVideo = playerView; + try { + parentActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } catch (Exception e) { + FileLog.e(e); + } + } else { + if (currentPlayingVideo == playerView) { + currentPlayingVideo = null; + } + try { + parentActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } catch (Exception e) { + FileLog.e(e); + } + } + } - webView = new TouchyWebView(context); - webView.getSettings().setJavaScriptEnabled(true); - webView.getSettings().setDomStorageEnabled(true); + @Override + public boolean checkInlinePermissions() { + return false; + } - webView.getSettings().setAllowContentAccess(true); - if (Build.VERSION.SDK_INT >= 17) { - webView.getSettings().setMediaPlaybackRequiresUserGesture(false); - webView.addJavascriptInterface(new TelegramWebviewProxy(), "TelegramWebviewProxy"); - } + @Override + public ViewGroup getTextureViewContainer() { + return null; + } + }); + addView(videoView); + createdWebViews.add(this); - if (Build.VERSION.SDK_INT >= 21) { - webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); - CookieManager cookieManager = CookieManager.getInstance(); - cookieManager.setAcceptThirdPartyCookies(webView, true); - } + webView = new TouchyWebView(context); + webView.getSettings().setJavaScriptEnabled(true); + webView.getSettings().setDomStorageEnabled(true); - webView.setWebChromeClient(new WebChromeClient() { + webView.getSettings().setAllowContentAccess(true); + if (Build.VERSION.SDK_INT >= 17) { + webView.getSettings().setMediaPlaybackRequiresUserGesture(false); + webView.addJavascriptInterface(new TelegramWebviewProxy(), "TelegramWebviewProxy"); + } - @Override - public void onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback) { - onShowCustomView(view, callback); + if (Build.VERSION.SDK_INT >= 21) { + webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + CookieManager cookieManager = CookieManager.getInstance(); + cookieManager.setAcceptThirdPartyCookies(webView, true); } - @Override - public void onShowCustomView(View view, CustomViewCallback callback) { - if (customView != null) { - callback.onCustomViewHidden(); - return; + webView.setWebChromeClient(new WebChromeClient() { + + @Override + public void onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback) { + onShowCustomView(view, callback); } - customView = view; - customViewCallback = callback; - AndroidUtilities.runOnUIThread(() -> { + + @Override + public void onShowCustomView(View view, CustomViewCallback callback) { if (customView != null) { - fullscreenVideoContainer.addView(customView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); - fullscreenVideoContainer.setVisibility(VISIBLE); + callback.onCustomViewHidden(); + return; } - }, 100); - } - - @Override - public void onHideCustomView() { - super.onHideCustomView(); - if (customView == null) { - return; + customView = view; + customViewCallback = callback; + AndroidUtilities.runOnUIThread(() -> { + if (customView != null) { + fullscreenVideoContainer.addView(customView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + fullscreenVideoContainer.setVisibility(VISIBLE); + } + }, 100); } - fullscreenVideoContainer.setVisibility(INVISIBLE); - fullscreenVideoContainer.removeView(customView); - if (customViewCallback != null && !customViewCallback.getClass().getName().contains(".chromium.")) { - customViewCallback.onCustomViewHidden(); + + @Override + public void onHideCustomView() { + super.onHideCustomView(); + if (customView == null) { + return; + } + fullscreenVideoContainer.setVisibility(INVISIBLE); + fullscreenVideoContainer.removeView(customView); + if (customViewCallback != null && !customViewCallback.getClass().getName().contains(".chromium.")) { + customViewCallback.onCustomViewHidden(); + } + customView = null; } - customView = null; - } - }); + }); - webView.setWebViewClient(new WebViewClient() { - @Override - public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) { - if (LaunchActivity.instance != null && LaunchActivity.instance.isFinishing()) { + webView.setWebViewClient(new WebViewClient() { + @Override + public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) { + if (LaunchActivity.instance != null && LaunchActivity.instance.isFinishing()) { + return true; + } + new AlertDialog.Builder(getContext(), null) + .setTitle(getString(R.string.ChromeCrashTitle)) + .setMessage(AndroidUtilities.replaceSingleTag(getString(R.string.ChromeCrashMessage), () -> Browser.openUrl(getContext(), "https://play.google.com/store/apps/details?id=com.google.android.webview"))) + .setPositiveButton(getString(R.string.OK), null) + .show(); return true; } - new AlertDialog.Builder(getContext(), null) - .setTitle(getString(R.string.ChromeCrashTitle)) - .setMessage(AndroidUtilities.replaceSingleTag(getString(R.string.ChromeCrashMessage), () -> Browser.openUrl(getContext(), "https://play.google.com/store/apps/details?id=com.google.android.webview"))) - .setPositiveButton(getString(R.string.OK), null) - .show(); - return true; - } - @Override - public void onLoadResource(WebView view, String url) { - super.onLoadResource(view, url); - } + @Override + public void onLoadResource(WebView view, String url) { + super.onLoadResource(view, url); + } - @Override - public void onPageFinished(WebView view, String url) { - super.onPageFinished(view, url); - //progressBar.setVisibility(INVISIBLE); - } + @Override + public void onPageFinished(WebView view, String url) { + super.onPageFinished(view, url); + //progressBar.setVisibility(INVISIBLE); + } - @Override - public boolean shouldOverrideUrlLoading(WebView view, String url) { - if (wasUserInteraction) { - Browser.openUrl(parentActivity, url); - return true; + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + if (wasUserInteraction) { + Browser.openUrl(parentActivity, url); + return true; + } + return false; } - return false; - } - }); - addView(webView); + }); + addView(webView); + } else { + videoView = null; + webView = null; + } } public void destroyWebView(boolean completely) { try { - webView.stopLoading(); - webView.loadUrl("about:blank"); - if (completely) { - webView.destroy(); + if (webView != null) { + webView.stopLoading(); + webView.loadUrl("about:blank"); + if (completely) { + webView.destroy(); + } } currentBlock = null; } catch (Exception e) { FileLog.e(e); } - videoView.destroy(); + if (videoView != null) { + videoView.destroy(); + } } public void setBlock(TLRPC.TL_pageBlockEmbed block) { TLRPC.TL_pageBlockEmbed previousBlock = currentBlock; currentBlock = block; - webView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + if (webView != null) { + webView.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); + } if (previousBlock != currentBlock) { wasUserInteraction = false; - if (currentBlock.allow_scrolling) { - webView.setVerticalScrollBarEnabled(true); - webView.setHorizontalScrollBarEnabled(true); - } else { - webView.setVerticalScrollBarEnabled(false); - webView.setHorizontalScrollBarEnabled(false); + if (webView != null) { + if (currentBlock.allow_scrolling) { + webView.setVerticalScrollBarEnabled(true); + webView.setHorizontalScrollBarEnabled(true); + } else { + webView.setVerticalScrollBarEnabled(false); + webView.setHorizontalScrollBarEnabled(false); + } } exactWebViewHeight = 0; - try { - webView.loadUrl("about:blank"); - } catch (Exception e) { - FileLog.e(e); + if (webView != null) { + try { + webView.loadUrl("about:blank"); + } catch (Exception e) { + FileLog.e(e); + } } try { if (currentBlock.html != null) { - webView.loadDataWithBaseURL("https://telegram.org/embed", currentBlock.html, "text/html", "UTF-8", null); - videoView.setVisibility(INVISIBLE); - videoView.loadVideo(null, null, null, null, false); - webView.setVisibility(VISIBLE); + if (webView != null) { + webView.loadDataWithBaseURL("https://telegram.org/embed", currentBlock.html, "text/html", "UTF-8", null); + webView.setVisibility(VISIBLE); + } + if (videoView != null) { + videoView.setVisibility(INVISIBLE); + videoView.loadVideo(null, null, null, null, false); + } } else { TLRPC.Photo thumb = currentBlock.poster_photo_id != 0 ? parentAdapter.getPhotoWithId(currentBlock.poster_photo_id) : null; boolean handled = videoView.loadVideo(block.url, thumb, parentAdapter.currentPage, null, false); if (handled) { - webView.setVisibility(INVISIBLE); - videoView.setVisibility(VISIBLE); - webView.stopLoading(); - webView.loadUrl("about:blank"); + if (webView != null) { + webView.setVisibility(INVISIBLE); + webView.stopLoading(); + webView.loadUrl("about:blank"); + } + if (videoView != null) { + videoView.setVisibility(VISIBLE); + } } else { - webView.setVisibility(VISIBLE); - videoView.setVisibility(INVISIBLE); - videoView.loadVideo(null, null, null, null, false); - HashMap<String, String> args = new HashMap<>(); - args.put("Referer", ApplicationLoader.applicationContext.getPackageName()); - webView.loadUrl(currentBlock.url, args); + if (webView != null) { + webView.setVisibility(VISIBLE); + HashMap<String, String> args = new HashMap<>(); + args.put("Referer", ApplicationLoader.applicationContext.getPackageName()); + webView.loadUrl(currentBlock.url, args); + } + if (videoView != null) { + videoView.setVisibility(INVISIBLE); + videoView.loadVideo(null, null, null, null, false); + } } } } catch (Exception e) { @@ -7671,16 +8529,16 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int listWidth = width; int textWidth; if (currentBlock.level > 0) { - textX = listX = AndroidUtilities.dp(14 * currentBlock.level) + AndroidUtilities.dp(18); - listWidth -= listX + AndroidUtilities.dp(18); + textX = listX = dp(14 * currentBlock.level) + dp(18); + listWidth -= listX + dp(18); textWidth = listWidth; } else { listX = 0; - textX = AndroidUtilities.dp(18); - textWidth = width - AndroidUtilities.dp(36); + textX = dp(18); + textWidth = width - dp(36); if (!currentBlock.full_width) { - listWidth -= AndroidUtilities.dp(36); - listX += AndroidUtilities.dp(18); + listWidth -= dp(36); + listX += dp(18); } } float scale; @@ -7690,39 +8548,41 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { scale = width / (float) currentBlock.w; } if (exactWebViewHeight != 0) { - height = AndroidUtilities.dp(exactWebViewHeight); + height = dp(exactWebViewHeight); } else { - height = (int) (currentBlock.w == 0 ? AndroidUtilities.dp(currentBlock.h) * scale : currentBlock.h * scale); + height = (int) (currentBlock.w == 0 ? dp(currentBlock.h) * scale : currentBlock.h * scale); } if (height == 0) { - height = AndroidUtilities.dp(10); + height = dp(10); } - webView.measure(MeasureSpec.makeMeasureSpec(listWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); - if (videoView.getParent() == this) { - videoView.measure(MeasureSpec.makeMeasureSpec(listWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height + AndroidUtilities.dp(10), MeasureSpec.EXACTLY)); + if (webView != null) { + webView.measure(MeasureSpec.makeMeasureSpec(listWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); + } + if (videoView != null && videoView.getParent() == this) { + videoView.measure(MeasureSpec.makeMeasureSpec(listWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height + dp(10), MeasureSpec.EXACTLY)); } - textY = AndroidUtilities.dp(8) + height; + textY = dp(8) + height; captionLayout = createLayoutForText(this, null, currentBlock.caption.text, textWidth, textY, currentBlock, parentAdapter); if (captionLayout != null) { - creditOffset = AndroidUtilities.dp(4) + captionLayout.getHeight(); - height += creditOffset + AndroidUtilities.dp(4); + creditOffset = dp(4) + captionLayout.getHeight(); + height += creditOffset + dp(4); } else { creditOffset = 0; } creditLayout = createLayoutForText(this, null, currentBlock.caption.credit, textWidth, textY + creditOffset, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (creditLayout != null) { - height += AndroidUtilities.dp(4) + creditLayout.getHeight(); + height += dp(4) + creditLayout.getHeight(); creditLayout.x = textX; creditLayout.y = creditOffset; } - height += AndroidUtilities.dp(5); + height += dp(5); if (currentBlock.level > 0 && !currentBlock.bottom) { - height += AndroidUtilities.dp(8); + height += dp(8); } else if (currentBlock.level == 0 && captionLayout != null) { - height += AndroidUtilities.dp(8); + height += dp(8); } if (captionLayout != null) { captionLayout.x = textX; @@ -7737,8 +8597,10 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - webView.layout(listX, 0, listX + webView.getMeasuredWidth(), webView.getMeasuredHeight()); - if (videoView.getParent() == this) { + if (webView != null) { + webView.layout(listX, 0, listX + webView.getMeasuredWidth(), webView.getMeasuredHeight()); + } + if (videoView != null && videoView.getParent() == this) { videoView.layout(listX, 0, listX + videoView.getMeasuredWidth(), videoView.getMeasuredHeight()); } } @@ -7764,7 +8626,7 @@ protected void onDraw(Canvas canvas) { canvas.restore(); } if (currentBlock.level > 0) { - canvas.drawRect(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(20), getMeasuredHeight() - (currentBlock.bottom ? AndroidUtilities.dp(6) : 0), quoteLinePaint); + canvas.drawRect(dp(18), 0, dp(20), getMeasuredHeight() - (currentBlock.bottom ? dp(6) : 0), quoteLinePaint); } } @@ -7804,7 +8666,7 @@ public BlockTableCell(Context context, WebpageAdapter adapter) { @Override public boolean onInterceptTouchEvent(MotionEvent ev) { boolean intercept = super.onInterceptTouchEvent(ev); - if (tableLayout.getMeasuredWidth() > getMeasuredWidth() - AndroidUtilities.dp(36) && intercept) { + if (tableLayout.getMeasuredWidth() > getMeasuredWidth() - dp(36) && intercept) { windowView.requestDisallowInterceptTouchEvent(true); } return intercept; @@ -7812,7 +8674,7 @@ public boolean onInterceptTouchEvent(MotionEvent ev) { @Override public boolean onTouchEvent(MotionEvent ev) { - if (tableLayout.getMeasuredWidth() <= getMeasuredWidth() - AndroidUtilities.dp(36)) { + if (tableLayout.getMeasuredWidth() <= getMeasuredWidth() - dp(36)) { return false; } return super.onTouchEvent(ev); @@ -7843,7 +8705,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), tableLayout.getMeasuredHeight()); } }; - scrollView.setPadding(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(18), 0); + scrollView.setPadding(dp(18), 0, dp(18), 0); scrollView.setClipToPadding(false); addView(scrollView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); @@ -7900,7 +8762,7 @@ public void onLayoutChild(DrawingText text, int x, int y) { while ((index = lowerString.indexOf(searchText, startIndex)) >= 0) { startIndex = index + searchText.length(); if (index == 0 || AndroidUtilities.isPunctuationCharacter(lowerString.charAt(index - 1))) { - adapter[0].searchTextOffset.put(searchText + currentBlock + text.parentText + index, y + text.textLayout.getLineTop(text.textLayout.getLineForOffset(index))); + pages[0].adapter.searchTextOffset.put(searchText + currentBlock + text.parentText + index, y + text.textLayout.getLineTop(text.textLayout.getLineForOffset(index))); } } } @@ -7908,7 +8770,7 @@ public void onLayoutChild(DrawingText text, int x, int y) { public void setBlock(TLRPC.TL_pageBlockTable block) { currentBlock = block; - AndroidUtilities.setScrollViewEdgeEffectColor(scrollView, Theme.getColor(Theme.key_windowBackgroundWhite)); + AndroidUtilities.setScrollViewEdgeEffectColor(scrollView, getThemedColor(Theme.key_windowBackgroundWhite)); tableLayout.removeAllChildrens(); tableLayout.setDrawLines(currentBlock.bordered); tableLayout.setStriped(currentBlock.striped); @@ -7969,31 +8831,31 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (currentBlock != null) { int textWidth; if (currentBlock.level > 0) { - listX = AndroidUtilities.dp(14 * currentBlock.level); - textX = listX + AndroidUtilities.dp(18); + listX = dp(14 * currentBlock.level); + textX = listX + dp(18); textWidth = width - textX; } else { listX = 0; - textX = AndroidUtilities.dp(18); - textWidth = width - AndroidUtilities.dp(36); + textX = dp(18); + textWidth = width - dp(36); } titleLayout = createLayoutForText(this, null, currentBlock.title, textWidth, 0, currentBlock, Layout.Alignment.ALIGN_CENTER, 0, parentAdapter); if (titleLayout != null) { textY = 0; - height += titleLayout.getHeight() + AndroidUtilities.dp(8); + height += titleLayout.getHeight() + dp(8); listY = height; titleLayout.x = textX; titleLayout.y = textY; } else { - listY = AndroidUtilities.dp(8); + listY = dp(8); } scrollView.measure(MeasureSpec.makeMeasureSpec(width - listX, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); - height += scrollView.getMeasuredHeight() + AndroidUtilities.dp(8); + height += scrollView.getMeasuredHeight() + dp(8); if (currentBlock.level > 0 && !currentBlock.bottom) { - height += AndroidUtilities.dp(8); + height += dp(8); } } else { height = 1; @@ -8008,7 +8870,7 @@ private void updateChildTextPositions() { for (int i = 0, N = tableLayout.getChildCount(); i < N; i++) { TableLayout.Child c = tableLayout.getChildAt(i); if (c.textLayout != null) { - c.textLayout.x = c.getTextX() + listX + AndroidUtilities.dp(18) - scrollView.getScrollX(); + c.textLayout.x = c.getTextX() + listX + dp(18) - scrollView.getScrollX(); c.textLayout.y = c.getTextY() + listY; c.textLayout.row = c.getRow(); c.setSelectionIndex(count++); @@ -8021,7 +8883,7 @@ protected void onLayout(boolean changed, int left, int top, int right, int botto scrollView.layout(listX, listY, listX + scrollView.getMeasuredWidth(), listY + scrollView.getMeasuredHeight()); if (firstLayout) { if (parentAdapter.isRtl) { - scrollView.setScrollX(tableLayout.getMeasuredWidth() - scrollView.getMeasuredWidth() + AndroidUtilities.dp(36)); + scrollView.setScrollX(tableLayout.getMeasuredWidth() - scrollView.getMeasuredWidth() + dp(36)); } else { scrollView.setScrollX(0); } @@ -8042,7 +8904,7 @@ protected void onDraw(Canvas canvas) { canvas.restore(); } if (currentBlock.level > 0) { - canvas.drawRect(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(20), getMeasuredHeight() - (currentBlock.bottom ? AndroidUtilities.dp(6) : 0), quoteLinePaint); + canvas.drawRect(dp(18), 0, dp(20), getMeasuredHeight() - (currentBlock.bottom ? dp(6) : 0), quoteLinePaint); } } @@ -8175,9 +9037,9 @@ public void calculate() { posArray.add(position); } - int minHeight = AndroidUtilities.dp(120); - int minWidth = (int) (AndroidUtilities.dp(120) / (Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) / (float) maxSizeWidth)); - int paddingsWidth = (int) (AndroidUtilities.dp(40) / (Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) / (float) maxSizeWidth)); + int minHeight = dp(120); + int minWidth = (int) (dp(120) / (Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) / (float) maxSizeWidth)); + int paddingsWidth = (int) (dp(40) / (Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) / (float) maxSizeWidth)); float maxAspectRatio = maxSizeWidth / maxSizeHeight; averageAspectRatio = averageAspectRatio / count; @@ -8448,7 +9310,7 @@ public void getItemOffsets(Rect outRect, View view, RecyclerView parent, Recycle continue; } if (pos.minY == position.minY) { - h -= (int) Math.ceil(maxHeight * pos.ph) - AndroidUtilities.dp(4); + h -= (int) Math.ceil(maxHeight * pos.ph) - dp(4); break; } } @@ -8567,7 +9429,7 @@ public void setBlock(TLRPC.TL_pageBlockCollage block) { group.calculate(); } innerAdapter.notifyDataSetChanged(); - innerListView.setGlowColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + innerListView.setGlowColor(getThemedColor(Theme.key_windowBackgroundWhite)); requestLayout(); } @@ -8587,23 +9449,23 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int listWidth = width; int textWidth; if (currentBlock.level > 0) { - textX = listX = AndroidUtilities.dp(14 * currentBlock.level) + AndroidUtilities.dp(18); - listWidth -= listX + AndroidUtilities.dp(18); + textX = listX = dp(14 * currentBlock.level) + dp(18); + listWidth -= listX + dp(18); textWidth = listWidth; } else { listX = 0; - textX = AndroidUtilities.dp(18); - textWidth = width - AndroidUtilities.dp(36); + textX = dp(18); + textWidth = width - dp(36); } innerListView.measure(MeasureSpec.makeMeasureSpec(listWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); height = innerListView.getMeasuredHeight(); - textY = height + AndroidUtilities.dp(8); + textY = height + dp(8); captionLayout = createLayoutForText(this, null, currentBlock.caption.text, textWidth, textY, currentBlock, parentAdapter); if (captionLayout != null) { - creditOffset = AndroidUtilities.dp(4) + captionLayout.getHeight(); - height += creditOffset + AndroidUtilities.dp(4); + creditOffset = dp(4) + captionLayout.getHeight(); + height += creditOffset + dp(4); captionLayout.x = textX; captionLayout.y = textY; } else { @@ -8611,14 +9473,14 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } creditLayout = createLayoutForText(this, null, currentBlock.caption.credit, textWidth, textY + creditOffset, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (creditLayout != null) { - height += AndroidUtilities.dp(4) + creditLayout.getHeight(); + height += dp(4) + creditLayout.getHeight(); creditLayout.x = textX; creditLayout.y = textY + creditOffset; } - height += AndroidUtilities.dp(16); + height += dp(16); if (currentBlock.level > 0 && !currentBlock.bottom) { - height += AndroidUtilities.dp(8); + height += dp(8); } } else { height = 1; @@ -8630,7 +9492,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - innerListView.layout(listX, AndroidUtilities.dp(8), listX + innerListView.getMeasuredWidth(), innerListView.getMeasuredHeight() + AndroidUtilities.dp(8)); + innerListView.layout(listX, dp(8), listX + innerListView.getMeasuredWidth(), innerListView.getMeasuredHeight() + dp(8)); } @Override @@ -8654,7 +9516,7 @@ protected void onDraw(Canvas canvas) { canvas.restore(); } if (currentBlock.level > 0) { - canvas.drawRect(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(20), getMeasuredHeight() - (currentBlock.bottom ? AndroidUtilities.dp(6) : 0), quoteLinePaint); + canvas.drawRect(dp(18), 0, dp(20), getMeasuredHeight() - (currentBlock.bottom ? dp(6) : 0), quoteLinePaint); } } @@ -8681,7 +9543,7 @@ private class BlockSlideshowCell extends FrameLayout implements TextSelectionHel private TLRPC.TL_pageBlockSlideshow currentBlock; private DrawingText captionLayout; private DrawingText creditLayout; - private int textX = AndroidUtilities.dp(18); + private int textX = dp(18); private int textY; private int creditOffset; @@ -8794,7 +9656,7 @@ public void unregisterDataSetObserver(DataSetObserver observer) { } } }); - AndroidUtilities.setViewPagerEdgeEffectColor(innerListView, Theme.getColor(Theme.key_windowBackgroundWhite)); + AndroidUtilities.setViewPagerEdgeEffectColor(innerListView, getThemedColor(Theme.key_windowBackgroundWhite)); addView(innerListView); dotsContainer = new View(context) { @@ -8805,14 +9667,14 @@ protected void onDraw(Canvas canvas) { } int count = innerAdapter.getCount(); - int totalWidth = count * AndroidUtilities.dp(7) + (count - 1) * AndroidUtilities.dp(6) + AndroidUtilities.dp(4); + int totalWidth = count * dp(7) + (count - 1) * dp(6) + dp(4); int xOffset; if (totalWidth < getMeasuredWidth()) { xOffset = (getMeasuredWidth() - totalWidth) / 2; } else { - xOffset = AndroidUtilities.dp(4); - int size = AndroidUtilities.dp(13); - int halfCount = (getMeasuredWidth() - AndroidUtilities.dp(8)) / 2 / size; + xOffset = dp(4); + int size = dp(13); + int halfCount = (getMeasuredWidth() - dp(8)) / 2 / size; if (currentPage == count - halfCount - 1 && pageOffset < 0) { xOffset -= (int) (pageOffset * size) + (count - halfCount * 2 - 1) * size; } else if (currentPage >= count - halfCount - 1) { @@ -8824,9 +9686,9 @@ protected void onDraw(Canvas canvas) { } } for (int a = 0; a < currentBlock.items.size(); a++) { - int cx = xOffset + AndroidUtilities.dp(4) + AndroidUtilities.dp(13) * a; + int cx = xOffset + dp(4) + dp(13) * a; Drawable drawable = currentPage == a ? slideDotBigDrawable : slideDotDrawable; - drawable.setBounds(cx - AndroidUtilities.dp(5), 0, cx + AndroidUtilities.dp(5), AndroidUtilities.dp(10)); + drawable.setBounds(cx - dp(5), 0, cx + dp(5), dp(10)); drawable.draw(canvas); } } @@ -8856,17 +9718,17 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int height; if (currentBlock != null) { - height = AndroidUtilities.dp(310); + height = dp(310); innerListView.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); int count = currentBlock.items.size(); - dotsContainer.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(10), MeasureSpec.EXACTLY)); + dotsContainer.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(dp(10), MeasureSpec.EXACTLY)); - int textWidth = width - AndroidUtilities.dp(36); - textY = height + AndroidUtilities.dp(16); + int textWidth = width - dp(36); + textY = height + dp(16); captionLayout = createLayoutForText(this, null, currentBlock.caption.text, textWidth, textY, currentBlock, parentAdapter); if (captionLayout != null) { - creditOffset = AndroidUtilities.dp(4) + captionLayout.getHeight(); - height += creditOffset + AndroidUtilities.dp(4); + creditOffset = dp(4) + captionLayout.getHeight(); + height += creditOffset + dp(4); captionLayout.x = textX; captionLayout.y = textY; } else { @@ -8874,12 +9736,12 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } creditLayout = createLayoutForText(this, null, currentBlock.caption.credit, textWidth, textY + creditOffset, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (creditLayout != null) { - height += AndroidUtilities.dp(4) + creditLayout.getHeight(); + height += dp(4) + creditLayout.getHeight(); creditLayout.x = textX; creditLayout.y = textY + creditOffset; } - height += AndroidUtilities.dp(16); + height += dp(16); } else { height = 1; } @@ -8889,8 +9751,8 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - innerListView.layout(0, AndroidUtilities.dp(8), innerListView.getMeasuredWidth(), AndroidUtilities.dp(8) + innerListView.getMeasuredHeight()); - int y = innerListView.getBottom() - AndroidUtilities.dp(7 + 16); + innerListView.layout(0, dp(8), innerListView.getMeasuredWidth(), dp(8) + innerListView.getMeasuredHeight()); + int y = innerListView.getBottom() - dp(7 + 16); dotsContainer.layout(0, y, dotsContainer.getMeasuredWidth(), y + dotsContainer.getMeasuredHeight()); } @@ -8985,7 +9847,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (currentBlock != null) { textLayout = null; - textY = currentBlock.index == 0 && currentBlock.parent.level == 0 ? AndroidUtilities.dp(10) : 0; + textY = currentBlock.index == 0 && currentBlock.parent.level == 0 ? dp(10) : 0; numOffsetY = 0; if (currentBlock.parent.lastMaxNumCalcWidth != width || currentBlock.parent.lastFontSize != SharedConfig.ivFontSize) { currentBlock.parent.lastMaxNumCalcWidth = width; @@ -8996,7 +9858,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (item.num == null) { continue; } - item.numLayout = createLayoutForText(this, item.num, null, width - AndroidUtilities.dp(36 + 18), textY, currentBlock, parentAdapter); + item.numLayout = createLayoutForText(this, item.num, null, width - dp(36 + 18), textY, currentBlock, parentAdapter); currentBlock.parent.maxNumWidth = Math.max(currentBlock.parent.maxNumWidth, (int) Math.ceil(item.numLayout.getLineWidth(0))); } currentBlock.parent.maxNumWidth = Math.max(currentBlock.parent.maxNumWidth, (int) Math.ceil(listTextNumPaint.measureText("00."))); @@ -9004,88 +9866,88 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { drawDot = !currentBlock.parent.pageBlockList.ordered; if (parentAdapter.isRtl) { - textX = AndroidUtilities.dp(18); + textX = dp(18); } else { - textX = AndroidUtilities.dp(18 + 6) + currentBlock.parent.maxNumWidth + currentBlock.parent.level * AndroidUtilities.dp(12); + textX = dp(18 + 6) + currentBlock.parent.maxNumWidth + currentBlock.parent.level * dp(12); } - int maxWidth = width - AndroidUtilities.dp(18) - textX; + int maxWidth = width - dp(18) - textX; if (parentAdapter.isRtl) { - maxWidth -= AndroidUtilities.dp(6) + currentBlock.parent.maxNumWidth + currentBlock.parent.level * AndroidUtilities.dp(12); + maxWidth -= dp(6) + currentBlock.parent.maxNumWidth + currentBlock.parent.level * dp(12); } if (currentBlock.textItem != null) { textLayout = createLayoutForText(this, null, currentBlock.textItem, maxWidth, textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (textLayout != null && textLayout.getLineCount() > 0) { if (currentBlock.numLayout != null && currentBlock.numLayout.getLineCount() > 0) { int ascent = textLayout.getLineAscent(0); - numOffsetY = (currentBlock.numLayout.getLineAscent(0) + AndroidUtilities.dp(2.5f)) - ascent; + numOffsetY = (currentBlock.numLayout.getLineAscent(0) + dp(2.5f)) - ascent; } - height += textLayout.getHeight() + AndroidUtilities.dp(8); + height += textLayout.getHeight() + dp(8); } } else if (currentBlock.blockItem != null) { blockX = textX; blockY = textY; if (blockLayout != null) { if (blockLayout.itemView instanceof BlockParagraphCell) { - blockY -= AndroidUtilities.dp(8); + blockY -= dp(8); if (!parentAdapter.isRtl) { - blockX -= AndroidUtilities.dp(18); + blockX -= dp(18); } - maxWidth += AndroidUtilities.dp(18); - height -= AndroidUtilities.dp(8); + maxWidth += dp(18); + height -= dp(8); } else if (blockLayout.itemView instanceof BlockHeaderCell || blockLayout.itemView instanceof BlockSubheaderCell || blockLayout.itemView instanceof BlockTitleCell || blockLayout.itemView instanceof BlockSubtitleCell) { if (!parentAdapter.isRtl) { - blockX -= AndroidUtilities.dp(18); + blockX -= dp(18); } - maxWidth += AndroidUtilities.dp(18); + maxWidth += dp(18); } else if (isListItemBlock(currentBlock.blockItem)) { blockX = 0; blockY = 0; textY = 0; if (currentBlock.index == 0 && currentBlock.parent.level == 0) { - height -= AndroidUtilities.dp(10); + height -= dp(10); } maxWidth = width; - height -= AndroidUtilities.dp(8); + height -= dp(8); } else if (blockLayout.itemView instanceof BlockTableCell) { - blockX -= AndroidUtilities.dp(18); - maxWidth += AndroidUtilities.dp(36); + blockX -= dp(18); + maxWidth += dp(36); } blockLayout.itemView.measure(MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); if (blockLayout.itemView instanceof BlockParagraphCell && currentBlock.numLayout != null && currentBlock.numLayout.getLineCount() > 0) { BlockParagraphCell paragraphCell = (BlockParagraphCell) blockLayout.itemView; if (paragraphCell.textLayout != null && paragraphCell.textLayout.getLineCount() > 0) { int ascent = paragraphCell.textLayout.getLineAscent(0); - numOffsetY = (currentBlock.numLayout.getLineAscent(0) + AndroidUtilities.dp(2.5f)) - ascent; + numOffsetY = (currentBlock.numLayout.getLineAscent(0) + dp(2.5f)) - ascent; } } if (currentBlock.blockItem instanceof TLRPC.TL_pageBlockDetails) { verticalAlign = true; blockY = 0; if (currentBlock.index == 0 && currentBlock.parent.level == 0) { - height -= AndroidUtilities.dp(10); + height -= dp(10); } - height -= AndroidUtilities.dp(8); + height -= dp(8); } else if (blockLayout.itemView instanceof BlockOrderedListItemCell) { verticalAlign = ((BlockOrderedListItemCell) blockLayout.itemView).verticalAlign; } else if (blockLayout.itemView instanceof BlockListItemCell) { verticalAlign = ((BlockListItemCell) blockLayout.itemView).verticalAlign; } if (verticalAlign && currentBlock.numLayout != null) { - textY = (blockLayout.itemView.getMeasuredHeight() - currentBlock.numLayout.getHeight()) / 2 - AndroidUtilities.dp(4); + textY = (blockLayout.itemView.getMeasuredHeight() - currentBlock.numLayout.getHeight()) / 2 - dp(4); drawDot = false; } height += blockLayout.itemView.getMeasuredHeight(); } - height += AndroidUtilities.dp(8); + height += dp(8); } if (currentBlock.parent.items.get(currentBlock.parent.items.size() - 1) == currentBlock) { - height += AndroidUtilities.dp(8); + height += dp(8); } if (currentBlock.index == 0 && currentBlock.parent.level == 0) { - height += AndroidUtilities.dp(10); + height += dp(10); } if (textLayout != null) { textLayout.x = textX; @@ -9124,9 +9986,9 @@ protected void onDraw(Canvas canvas) { if (currentBlock.numLayout != null) { canvas.save(); if (parentAdapter.isRtl) { - canvas.translate(width - AndroidUtilities.dp(15) - currentBlock.parent.maxNumWidth - currentBlock.parent.level * AndroidUtilities.dp(12), textY + numOffsetY - (drawDot ? AndroidUtilities.dp(1) : 0)); + canvas.translate(width - dp(15) - currentBlock.parent.maxNumWidth - currentBlock.parent.level * dp(12), textY + numOffsetY - (drawDot ? dp(1) : 0)); } else { - canvas.translate(AndroidUtilities.dp(15) + currentBlock.parent.maxNumWidth - (int) Math.ceil(currentBlock.numLayout.getLineWidth(0)) + currentBlock.parent.level * AndroidUtilities.dp(12), textY + numOffsetY - (drawDot ? AndroidUtilities.dp(1) : 0)); + canvas.translate(dp(15) + currentBlock.parent.maxNumWidth - (int) Math.ceil(currentBlock.numLayout.getLineWidth(0)) + currentBlock.parent.level * dp(12), textY + numOffsetY - (drawDot ? dp(1) : 0)); } currentBlock.numLayout.draw(canvas, this); canvas.restore(); @@ -9226,7 +10088,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (currentBlock != null) { textLayout = null; - textY = currentBlock.index == 0 && currentBlock.parent.level == 0 ? AndroidUtilities.dp(10) : 0; + textY = currentBlock.index == 0 && currentBlock.parent.level == 0 ? dp(10) : 0; numOffsetY = 0; if (currentBlock.parent.lastMaxNumCalcWidth != width || currentBlock.parent.lastFontSize != SharedConfig.ivFontSize) { currentBlock.parent.lastMaxNumCalcWidth = width; @@ -9237,20 +10099,20 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (item.num == null) { continue; } - item.numLayout = createLayoutForText(this, item.num, null, width - AndroidUtilities.dp(36 + 18), textY, currentBlock, parentAdapter); + item.numLayout = createLayoutForText(this, item.num, null, width - dp(36 + 18), textY, currentBlock, parentAdapter); currentBlock.parent.maxNumWidth = Math.max(currentBlock.parent.maxNumWidth, (int) Math.ceil(item.numLayout.getLineWidth(0))); } currentBlock.parent.maxNumWidth = Math.max(currentBlock.parent.maxNumWidth, (int) Math.ceil(listTextNumPaint.measureText("00."))); } if (parentAdapter.isRtl) { - textX = AndroidUtilities.dp(18); + textX = dp(18); } else { - textX = AndroidUtilities.dp(18 + 6) + currentBlock.parent.maxNumWidth + currentBlock.parent.level * AndroidUtilities.dp(20); + textX = dp(18 + 6) + currentBlock.parent.maxNumWidth + currentBlock.parent.level * dp(20); } verticalAlign = false; - int maxWidth = width - AndroidUtilities.dp(18) - textX; + int maxWidth = width - dp(18) - textX; if (parentAdapter.isRtl) { - maxWidth -= AndroidUtilities.dp(6) + currentBlock.parent.maxNumWidth + currentBlock.parent.level * AndroidUtilities.dp(20); + maxWidth -= dp(6) + currentBlock.parent.maxNumWidth + currentBlock.parent.level * dp(20); } if (currentBlock.textItem != null) { textLayout = createLayoutForText(this, null, currentBlock.textItem, maxWidth, textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); @@ -9259,36 +10121,36 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int ascent = textLayout.getLineAscent(0); numOffsetY = currentBlock.numLayout.getLineAscent(0) - ascent; } - height += textLayout.getHeight() + AndroidUtilities.dp(8); + height += textLayout.getHeight() + dp(8); } } else if (currentBlock.blockItem != null) { blockX = textX; blockY = textY; if (blockLayout != null) { if (blockLayout.itemView instanceof BlockParagraphCell) { - blockY -= AndroidUtilities.dp(8); + blockY -= dp(8); if (!parentAdapter.isRtl) { - blockX -= AndroidUtilities.dp(18); + blockX -= dp(18); } - maxWidth += AndroidUtilities.dp(18); - height -= AndroidUtilities.dp(8); + maxWidth += dp(18); + height -= dp(8); } else if (blockLayout.itemView instanceof BlockHeaderCell || blockLayout.itemView instanceof BlockSubheaderCell || blockLayout.itemView instanceof BlockTitleCell || blockLayout.itemView instanceof BlockSubtitleCell) { if (!parentAdapter.isRtl) { - blockX -= AndroidUtilities.dp(18); + blockX -= dp(18); } - maxWidth += AndroidUtilities.dp(18); + maxWidth += dp(18); } else if (isListItemBlock(currentBlock.blockItem)) { blockX = 0; blockY = 0; textY = 0; maxWidth = width; - height -= AndroidUtilities.dp(8); + height -= dp(8); } else if (blockLayout.itemView instanceof BlockTableCell) { - blockX -= AndroidUtilities.dp(18); - maxWidth += AndroidUtilities.dp(36); + blockX -= dp(18); + maxWidth += dp(36); } blockLayout.itemView.measure(MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); if (blockLayout.itemView instanceof BlockParagraphCell && currentBlock.numLayout != null && currentBlock.numLayout.getLineCount() > 0) { @@ -9301,7 +10163,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (currentBlock.blockItem instanceof TLRPC.TL_pageBlockDetails) { verticalAlign = true; blockY = 0; - height -= AndroidUtilities.dp(8); + height -= dp(8); } else if (blockLayout.itemView instanceof BlockOrderedListItemCell) { verticalAlign = ((BlockOrderedListItemCell) blockLayout.itemView).verticalAlign; } else if (blockLayout.itemView instanceof BlockListItemCell) { @@ -9312,13 +10174,13 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } height += blockLayout.itemView.getMeasuredHeight(); } - height += AndroidUtilities.dp(8); + height += dp(8); } if (currentBlock.parent.items.get(currentBlock.parent.items.size() - 1) == currentBlock) { - height += AndroidUtilities.dp(8); + height += dp(8); } if (currentBlock.index == 0 && currentBlock.parent.level == 0) { - height += AndroidUtilities.dp(10); + height += dp(10); } if (textLayout != null) { textLayout.x = textX; @@ -9360,9 +10222,9 @@ protected void onDraw(Canvas canvas) { if (currentBlock.numLayout != null) { canvas.save(); if (parentAdapter.isRtl) { - canvas.translate(width - AndroidUtilities.dp(18) - currentBlock.parent.maxNumWidth - currentBlock.parent.level * AndroidUtilities.dp(20), textY + numOffsetY); + canvas.translate(width - dp(18) - currentBlock.parent.maxNumWidth - currentBlock.parent.level * dp(20), textY + numOffsetY); } else { - canvas.translate(AndroidUtilities.dp(18) + currentBlock.parent.maxNumWidth - (int) Math.ceil(currentBlock.numLayout.getLineWidth(0)) + currentBlock.parent.level * AndroidUtilities.dp(20), textY + numOffsetY); + canvas.translate(dp(18) + currentBlock.parent.maxNumWidth - (int) Math.ceil(currentBlock.numLayout.getLineWidth(0)) + currentBlock.parent.level * dp(20), textY + numOffsetY); } currentBlock.numLayout.draw(canvas, this); canvas.restore(); @@ -9407,8 +10269,8 @@ public void fillTextLayoutBlocks(ArrayList<TextSelectionHelper.TextLayoutBlock> private class BlockDetailsCell extends View implements Drawable.Callback, TextSelectionHelper.ArticleSelectableView { private DrawingText textLayout; - private int textX = AndroidUtilities.dp(44 + 6); - private int textY = AndroidUtilities.dp(11) + 1; + private int textX = dp(44 + 6); + private int textY = dp(11) + 1; private AnimatedArrowDrawable arrow; private TLRPC.TL_pageBlockDetails currentBlock; @@ -9453,12 +10315,12 @@ public boolean onTouchEvent(MotionEvent event) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); - int h = AndroidUtilities.dp(39); + int h = dp(39); if (currentBlock != null) { - textLayout = createLayoutForText(this, null, currentBlock.title, width - AndroidUtilities.dp(36 + 16), 0, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.title, width - dp(36 + 16), 0, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (textLayout != null) { - h = Math.max(h, AndroidUtilities.dp(21) + textLayout.getHeight()); - textY = (textLayout.getHeight() + AndroidUtilities.dp(21) - textLayout.getHeight()) / 2; + h = Math.max(h, dp(21) + textLayout.getHeight()); + textY = (textLayout.getHeight() + dp(21) - textLayout.getHeight()) / 2; textLayout.x = textX; textLayout.y = textY; } @@ -9472,7 +10334,7 @@ protected void onDraw(Canvas canvas) { return; } canvas.save(); - canvas.translate(AndroidUtilities.dp(18), (getMeasuredHeight() - AndroidUtilities.dp(13) - 1) / 2); + canvas.translate(dp(18), (getMeasuredHeight() - dp(13) - 1) / 2); arrow.draw(canvas); canvas.restore(); @@ -9506,7 +10368,7 @@ public BlockDetailsBottomCell(Context context) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), 1 + AndroidUtilities.dp(4)); + setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), 1 + dp(4)); } @Override @@ -9515,7 +10377,7 @@ protected void onDraw(Canvas canvas) { } } - private static class BlockRelatedArticlesShadowCell extends View { + private class BlockRelatedArticlesShadowCell extends View { private CombinedDrawable shadowDrawable; @@ -9523,22 +10385,22 @@ public BlockRelatedArticlesShadowCell(Context context) { super(context); Drawable drawable = Theme.getThemedDrawable(context, R.drawable.greydivider_bottom, 0xff000000); - shadowDrawable = new CombinedDrawable(new ColorDrawable(Theme.getColor(Theme.key_windowBackgroundGray)), drawable); + shadowDrawable = new CombinedDrawable(new ColorDrawable(getThemedColor(Theme.key_iv_backgroundGray)), drawable); shadowDrawable.setFullsize(true); setBackgroundDrawable(shadowDrawable); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), AndroidUtilities.dp(12)); - Theme.setCombinedDrawableColor(shadowDrawable, Theme.getColor(Theme.key_windowBackgroundGray), false); + setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), dp(12)); + Theme.setCombinedDrawableColor(shadowDrawable, getThemedColor(Theme.key_iv_backgroundGray), false); } } private class BlockRelatedArticlesHeaderCell extends View implements TextSelectionHelper.ArticleSelectableView { private DrawingText textLayout; - private int textX = AndroidUtilities.dp(18); + private int textX = dp(18); private int textY; private TLRPC.TL_pageBlockRelatedArticles currentBlock; @@ -9564,13 +10426,13 @@ public boolean onTouchEvent(MotionEvent event) { protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); if (currentBlock != null) { - textLayout = createLayoutForText(this, null, currentBlock.title, width - AndroidUtilities.dp(36 + 16), 0, currentBlock, Layout.Alignment.ALIGN_NORMAL, 1, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.title, width - dp(36 + 16), 0, currentBlock, Layout.Alignment.ALIGN_NORMAL, 1, parentAdapter); if (textLayout != null) { - textY = AndroidUtilities.dp(6) + (AndroidUtilities.dp(32) - textLayout.getHeight()) / 2; + textY = dp(6) + (dp(32) - textLayout.getHeight()) / 2; } } if (textLayout != null) { - setMeasuredDimension(width, AndroidUtilities.dp(38)); + setMeasuredDimension(width, dp(38)); textLayout.x = textX; textLayout.y = textY; } else { @@ -9611,8 +10473,8 @@ private class BlockRelatedArticlesCell extends View implements TextSelectionHelp private TL_pageBlockRelatedArticlesChild currentBlock; - private int textX = AndroidUtilities.dp(18); - private int textY = AndroidUtilities.dp(10); + private int textX = dp(18); + private int textY = dp(10); private int textOffset; private WebpageAdapter parentAdapter; @@ -9622,7 +10484,7 @@ public BlockRelatedArticlesCell(Context context, WebpageAdapter adapter) { parentAdapter = adapter; imageView = new ImageReceiver(this); - imageView.setRoundRadius(AndroidUtilities.dp(6)); + imageView.setRoundRadius(dp(6)); } public void setBlock(TL_pageBlockRelatedArticlesChild block) { @@ -9638,7 +10500,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { divider = currentBlock.num != currentBlock.parent.articles.size() - 1; TLRPC.TL_pageRelatedArticle item = currentBlock.parent.articles.get(currentBlock.num); - int additionalHeight = AndroidUtilities.dp(SharedConfig.ivFontSize - 16); + int additionalHeight = dp(SharedConfig.ivFontSize - 16); TLRPC.Photo photo = item.photo_id != 0 ? parentAdapter.getPhotoWithId(item.photo_id) : null; if (photo != null) { @@ -9653,15 +10515,15 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { drawImage = false; } - int layoutHeight = AndroidUtilities.dp(16 + 44); - int availableWidth = width - AndroidUtilities.dp(18 + 18); + int layoutHeight = dp(16 + 44); + int availableWidth = width - dp(18 + 18); if (drawImage) { - int imageWidth = AndroidUtilities.dp(44); - imageView.setImageCoords(width - imageWidth - AndroidUtilities.dp(8), AndroidUtilities.dp(8), imageWidth, imageWidth); - availableWidth -= imageView.getImageWidth() + AndroidUtilities.dp(6); + int imageWidth = dp(44); + imageView.setImageCoords(width - imageWidth - dp(8), dp(8), imageWidth, imageWidth); + availableWidth -= imageView.getImageWidth() + dp(6); } - int height = AndroidUtilities.dp(18); + int height = dp(18); boolean isTitleRtl = false; if (item.title != null) { @@ -9671,7 +10533,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (textLayout != null) { int count = textLayout.getLineCount(); lineCount -= count; - textOffset = textLayout.getHeight() + AndroidUtilities.dp(6) + additionalHeight; + textOffset = textLayout.getHeight() + dp(6) + additionalHeight; height += textLayout.getHeight(); for (int a = 0; a < count; a++) { if (textLayout.getLineLeft(a) != 0) { @@ -9700,7 +10562,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (textLayout2 != null) { height += textLayout2.getHeight(); if (textLayout != null) { - height += AndroidUtilities.dp(6) + additionalHeight; + height += dp(6) + additionalHeight; } textLayout2.x = textX; textLayout2.y = textY + textOffset; @@ -9720,7 +10582,7 @@ protected void onDraw(Canvas canvas) { } int count = 0; canvas.save(); - canvas.translate(textX, AndroidUtilities.dp(10)); + canvas.translate(textX, dp(10)); if (textLayout != null) { drawTextSelection(canvas, this, count++); textLayout.draw(canvas, this); @@ -9732,7 +10594,7 @@ protected void onDraw(Canvas canvas) { } canvas.restore(); if (divider) { - canvas.drawLine(parentAdapter.isRtl ? 0 : AndroidUtilities.dp(17), getMeasuredHeight() - 1, getMeasuredWidth() - (parentAdapter.isRtl ? AndroidUtilities.dp(17) : 0), getMeasuredHeight() - 1, dividerPaint); + canvas.drawLine(parentAdapter.isRtl ? 0 : dp(17), getMeasuredHeight() - 1, getMeasuredWidth() - (parentAdapter.isRtl ? dp(17) : 0), getMeasuredHeight() - 1, dividerPaint); } } @@ -9750,8 +10612,8 @@ public void fillTextLayoutBlocks(ArrayList<TextSelectionHelper.TextLayoutBlock> private class BlockHeaderCell extends View implements TextSelectionHelper.ArticleSelectableView { private DrawingText textLayout; - private int textX = AndroidUtilities.dp(18); - private int textY = AndroidUtilities.dp(8); + private int textX = dp(18); + private int textY = dp(8); private TLRPC.TL_pageBlockHeader currentBlock; @@ -9779,9 +10641,9 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int height = 0; if (currentBlock != null) { - textLayout = createLayoutForText(this, null, currentBlock.text, width - AndroidUtilities.dp(36), textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.text, width - dp(36), textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (textLayout != null) { - height += AndroidUtilities.dp(8 + 8) + textLayout.getHeight(); + height += dp(8 + 8) + textLayout.getHeight(); textLayout.x = textX; textLayout.y = textY; } @@ -9833,22 +10695,22 @@ public BlockDividerCell(Context context) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), AndroidUtilities.dp(2 + 16)); + setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), dp(2 + 16)); } @Override protected void onDraw(Canvas canvas) { int width = getMeasuredWidth() / 3; - rect.set(width, AndroidUtilities.dp(8), width * 2, AndroidUtilities.dp(10)); - canvas.drawRoundRect(rect, AndroidUtilities.dp(1), AndroidUtilities.dp(1), dividerPaint); + rect.set(width, dp(8), width * 2, dp(10)); + canvas.drawRoundRect(rect, dp(1), dp(1), dividerPaint); } } private class BlockSubtitleCell extends View implements TextSelectionHelper.ArticleSelectableView { private DrawingText textLayout; - private int textX = AndroidUtilities.dp(18); - private int textY = AndroidUtilities.dp(8); + private int textX = dp(18); + private int textY = dp(8); private TLRPC.TL_pageBlockSubtitle currentBlock; @@ -9876,9 +10738,9 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int height = 0; if (currentBlock != null) { - textLayout = createLayoutForText(this, null, currentBlock.text, width - AndroidUtilities.dp(36), textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.text, width - dp(36), textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (textLayout != null) { - height += AndroidUtilities.dp(8 + 8) + textLayout.getHeight(); + height += dp(8 + 8) + textLayout.getHeight(); textLayout.x = textX; textLayout.y = textY; } @@ -9926,8 +10788,8 @@ private class BlockPullquoteCell extends View implements TextSelectionHelper.Art private DrawingText textLayout; private DrawingText textLayout2; private int textY2; - private int textX = AndroidUtilities.dp(18); - private int textY = AndroidUtilities.dp(8); + private int textX = dp(18); + private int textY = dp(8); private TLRPC.TL_pageBlockPullquote currentBlock; @@ -9954,21 +10816,21 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int height = 0; if (currentBlock != null) { - textLayout = createLayoutForText(this, null, currentBlock.text, width - AndroidUtilities.dp(36), textY, currentBlock, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.text, width - dp(36), textY, currentBlock, parentAdapter); if (textLayout != null) { - height += AndroidUtilities.dp(8) + textLayout.getHeight(); + height += dp(8) + textLayout.getHeight(); textLayout.x = textX; textLayout.y = textY; } - textY2 = height + AndroidUtilities.dp(2); - textLayout2 = createLayoutForText(this, null, currentBlock.caption, width - AndroidUtilities.dp(36), textY2, currentBlock, parentAdapter); + textY2 = height + dp(2); + textLayout2 = createLayoutForText(this, null, currentBlock.caption, width - dp(36), textY2, currentBlock, parentAdapter); if (textLayout2 != null) { - height += AndroidUtilities.dp(8) + textLayout2.getHeight(); + height += dp(8) + textLayout2.getHeight(); textLayout2.x = textX; textLayout2.y = textY2; } if (height != 0) { - height += AndroidUtilities.dp(8); + height += dp(8); } } else { height = 1; @@ -10016,7 +10878,7 @@ private class BlockBlockquoteCell extends View implements TextSelectionHelper.Ar private DrawingText textLayout2; private int textY2; private int textX; - private int textY = AndroidUtilities.dp(8); + private int textY = dp(8); private TLRPC.TL_pageBlockBlockquote currentBlock; @@ -10043,34 +10905,34 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int height = 0; if (currentBlock != null) { - int textWidth = width - AndroidUtilities.dp(36 + 14); + int textWidth = width - dp(36 + 14); if (currentBlock.level > 0) { - textWidth -= AndroidUtilities.dp(14 * currentBlock.level); + textWidth -= dp(14 * currentBlock.level); } textLayout = createLayoutForText(this, null, currentBlock.text, textWidth, textY, currentBlock, parentAdapter); if (textLayout != null) { - height += AndroidUtilities.dp(8) + textLayout.getHeight(); + height += dp(8) + textLayout.getHeight(); } if (currentBlock.level > 0) { if (parentAdapter.isRtl) { - textX = AndroidUtilities.dp(14 + currentBlock.level * 14); + textX = dp(14 + currentBlock.level * 14); } else { - textX = AndroidUtilities.dp(14 * currentBlock.level) + AndroidUtilities.dp(18 + 14); + textX = dp(14 * currentBlock.level) + dp(18 + 14); } } else { if (parentAdapter.isRtl) { - textX = AndroidUtilities.dp(14); + textX = dp(14); } else { - textX = AndroidUtilities.dp(18 + 14); + textX = dp(18 + 14); } } - textY2 = height + AndroidUtilities.dp(8); + textY2 = height + dp(8); textLayout2 = createLayoutForText(this, null, currentBlock.caption, textWidth, textY2, currentBlock, parentAdapter); if (textLayout2 != null) { - height += AndroidUtilities.dp(8) + textLayout2.getHeight(); + height += dp(8) + textLayout2.getHeight(); } if (height != 0) { - height += AndroidUtilities.dp(8); + height += dp(8); } if (textLayout != null) { textLayout.x = textX; @@ -10109,13 +10971,13 @@ protected void onDraw(Canvas canvas) { canvas.restore(); } if (parentAdapter.isRtl) { - int x = getMeasuredWidth() - AndroidUtilities.dp(20); - canvas.drawRect(x, AndroidUtilities.dp(6), x + AndroidUtilities.dp(2), getMeasuredHeight() - AndroidUtilities.dp(6), quoteLinePaint); + int x = getMeasuredWidth() - dp(20); + canvas.drawRect(x, dp(6), x + dp(2), getMeasuredHeight() - dp(6), quoteLinePaint); } else { - canvas.drawRect(AndroidUtilities.dp(18 + currentBlock.level * 14), AndroidUtilities.dp(6), AndroidUtilities.dp(20 + currentBlock.level * 14), getMeasuredHeight() - AndroidUtilities.dp(6), quoteLinePaint); + canvas.drawRect(dp(18 + currentBlock.level * 14), dp(6), dp(20 + currentBlock.level * 14), getMeasuredHeight() - dp(6), quoteLinePaint); } if (currentBlock.level > 0) { - canvas.drawRect(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(20), getMeasuredHeight() - (currentBlock.bottom ? AndroidUtilities.dp(6) : 0), quoteLinePaint); + canvas.drawRect(dp(18), 0, dp(20), getMeasuredHeight() - (currentBlock.bottom ? dp(6) : 0), quoteLinePaint); } } @@ -10223,7 +11085,7 @@ public boolean onTouchEvent(MotionEvent event) { } float x = event.getX(); float y = event.getY(); - if (channelCell.getVisibility() == VISIBLE && y > channelCell.getTranslationY() && y < channelCell.getTranslationY() + AndroidUtilities.dp(39)) { + if (channelCell.getVisibility() == VISIBLE && y > channelCell.getTranslationY() && y < channelCell.getTranslationY() + dp(39)) { if (parentAdapter.channelBlock != null && event.getAction() == MotionEvent.ACTION_UP) { MessagesController.getInstance(currentAccount).openByUserName(ChatObject.getPublicUsername(parentAdapter.channelBlock.channel), parentFragment, 2); close(false, true); @@ -10231,7 +11093,7 @@ public boolean onTouchEvent(MotionEvent event) { return true; } if (event.getAction() == MotionEvent.ACTION_DOWN && imageView.isInsideImage(x, y)) { - if (buttonState != -1 && x >= buttonX && x <= buttonX + AndroidUtilities.dp(48) && y >= buttonY && y <= buttonY + AndroidUtilities.dp(48) || buttonState == 0) { + if (buttonState != -1 && x >= buttonX && x <= buttonX + dp(48) && y >= buttonY && y <= buttonY + dp(48) || buttonState == 0) { buttonPressed = 1; invalidate(); } else { @@ -10267,19 +11129,19 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } if (currentBlock != null) { currentPhoto = parentAdapter.getPhotoWithId(currentBlock.photo_id); - int size = AndroidUtilities.dp(48); + int size = dp(48); int photoWidth = width; int photoHeight = height; int photoX; int textWidth; if (currentType == 0 && currentBlock.level > 0) { - textX = photoX = AndroidUtilities.dp(14 * currentBlock.level) + AndroidUtilities.dp(18); - photoWidth -= photoX + AndroidUtilities.dp(18); + textX = photoX = dp(14 * currentBlock.level) + dp(18); + photoWidth -= photoX + dp(18); textWidth = photoWidth; } else { photoX = 0; - textX = AndroidUtilities.dp(18); - textWidth = width - AndroidUtilities.dp(36); + textX = dp(18); + textWidth = width - dp(36); } if (currentPhoto != null && currentPhotoObject != null) { currentPhotoObjectThumb = FileLoader.getClosestPhotoSizeWithSize(currentPhoto.sizes, 40, true); @@ -10293,7 +11155,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (parentBlock instanceof TLRPC.TL_pageBlockCover) { height = Math.min(height, photoWidth); } else { - int maxHeight = (int) ((Math.max(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - AndroidUtilities.dp(56)) * 0.9f); + int maxHeight = (int) ((Math.max(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - dp(56)) * 0.9f); if (height > maxHeight) { height = maxHeight; scale = height / (float) currentPhotoObject.h; @@ -10304,10 +11166,10 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { photoHeight = height; } else if (currentType == 2) { if ((groupPosition.flags & POSITION_FLAG_RIGHT) == 0) { - photoWidth -= AndroidUtilities.dp(2); + photoWidth -= dp(2); } if ((groupPosition.flags & POSITION_FLAG_BOTTOM) == 0) { - photoHeight -= AndroidUtilities.dp(2); + photoHeight -= dp(2); } if (groupPosition.leftSpanOffset != 0) { int offset = (int) Math.ceil(width * groupPosition.leftSpanOffset / 1000.0f); @@ -10315,7 +11177,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { photoX += offset; } } - imageView.setImageCoords(photoX, (isFirst || currentType == 1 || currentType == 2 || currentBlock.level > 0) ? 0 : AndroidUtilities.dp(8), photoWidth, photoHeight); + imageView.setImageCoords(photoX, (isFirst || currentType == 1 || currentType == 2 || currentBlock.level > 0) ? 0 : dp(8), photoWidth, photoHeight); if (currentType == 0) { currentFilter = null; } else { @@ -10336,25 +11198,25 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { buttonY = (int) (imageView.getImageY() + (imageView.getImageHeight() - size) / 2.0f); radialProgress.setProgressRect(buttonX, buttonY, buttonX + size, buttonY + size); } - textY = (int) (imageView.getImageY() + imageView.getImageHeight() + AndroidUtilities.dp(8)); + textY = (int) (imageView.getImageY() + imageView.getImageHeight() + dp(8)); if (currentType == 0) { captionLayout = createLayoutForText(this, null, currentBlock.caption.text, textWidth, textY, currentBlock, parentAdapter); if (captionLayout != null) { - creditOffset = AndroidUtilities.dp(4) + captionLayout.getHeight(); - height += creditOffset + AndroidUtilities.dp(4); + creditOffset = dp(4) + captionLayout.getHeight(); + height += creditOffset + dp(4); } creditLayout = createLayoutForText(this, null, currentBlock.caption.credit, textWidth, textY + creditOffset, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, 0, parentAdapter); if (creditLayout != null) { - height += AndroidUtilities.dp(4) + creditLayout.getHeight(); + height += dp(4) + creditLayout.getHeight(); } } if (!isFirst && currentType == 0 && currentBlock.level <= 0) { - height += AndroidUtilities.dp(8); + height += dp(8); } boolean nextIsChannel = parentBlock instanceof TLRPC.TL_pageBlockCover && parentAdapter.blocks != null && parentAdapter.blocks.size() > 1 && parentAdapter.blocks.get(1) instanceof TLRPC.TL_pageBlockChannel; if (currentType != 2 && !nextIsChannel) { - height += AndroidUtilities.dp(8); + height += dp(8); } if (captionLayout != null) { captionLayout.x = textX; @@ -10369,7 +11231,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { height = 1; } channelCell.measure(widthMeasureSpec, heightMeasureSpec); - channelCell.setTranslationY(imageView.getImageHeight() - AndroidUtilities.dp(39)); + channelCell.setTranslationY(imageView.getImageHeight() - dp(39)); setMeasuredDimension(width, height); } @@ -10389,9 +11251,9 @@ protected void onDraw(Canvas canvas) { } } if (!TextUtils.isEmpty(currentBlock.url)) { - int x = getMeasuredWidth() - AndroidUtilities.dp(11 + 24); - int y = (int) (imageView.getImageY() + AndroidUtilities.dp(11)); - linkDrawable.setBounds(x, y, x + AndroidUtilities.dp(24), y + AndroidUtilities.dp(24)); + int x = getMeasuredWidth() - dp(11 + 24); + int y = (int) (imageView.getImageY() + dp(11)); + linkDrawable.setBounds(x, y, x + dp(24), y + dp(24)); linkDrawable.draw(canvas); } int count = 0; @@ -10410,7 +11272,7 @@ protected void onDraw(Canvas canvas) { canvas.restore(); } if (currentBlock.level > 0) { - canvas.drawRect(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(20), getMeasuredHeight() - (currentBlock.bottom ? AndroidUtilities.dp(6) : 0), quoteLinePaint); + canvas.drawRect(dp(18), 0, dp(20), getMeasuredHeight() - (currentBlock.bottom ? dp(6) : 0), quoteLinePaint); } } @@ -10602,13 +11464,13 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int photoX; int textWidth; if (currentType == 0 && currentBlock.level > 0) { - textX = photoX = AndroidUtilities.dp(14 * currentBlock.level) + AndroidUtilities.dp(18); - photoWidth -= photoX + AndroidUtilities.dp(18); + textX = photoX = dp(14 * currentBlock.level) + dp(18); + photoWidth -= photoX + dp(18); textWidth = photoWidth; } else { photoX = 0; - textX = AndroidUtilities.dp(18); - textWidth = width - AndroidUtilities.dp(36); + textX = dp(18); + textWidth = width - dp(36); } if (currentType == 0) { @@ -10616,7 +11478,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { scale = photoWidth / (float) currentBlock.w; height = (int) (scale * currentBlock.h); - int maxHeight = (int) ((Math.max(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - AndroidUtilities.dp(56)) * 0.9f); + int maxHeight = (int) ((Math.max(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - dp(56)) * 0.9f); if (height > maxHeight) { height = maxHeight; scale = height / (float) currentBlock.h; @@ -10624,7 +11486,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { photoX += (width - photoX - photoWidth) / 2; } } - imageView.setImageCoords(photoX, (isFirst || currentType == 1 || currentType == 2 || currentBlock.level > 0) ? 0 : AndroidUtilities.dp(8), photoWidth, height); + imageView.setImageCoords(photoX, (isFirst || currentType == 1 || currentType == 2 || currentBlock.level > 0) ? 0 : dp(8), photoWidth, height); String currentUrl = AndroidUtilities.formapMapUrl(currentAccount, currentBlock.geo.lat, currentBlock.geo._long, (int) (photoWidth / AndroidUtilities.density), (int) (height / AndroidUtilities.density), true, 15, -1); WebFile currentWebFile = WebFile.createWithGeoPoint(currentBlock.geo, (int) (photoWidth / AndroidUtilities.density), (int) (height / AndroidUtilities.density), 15, Math.min(2, (int) Math.ceil(AndroidUtilities.density))); @@ -10637,27 +11499,27 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } else if (currentUrl != null) { imageView.setImage(currentUrl, null, null, null, 0); } - textY = (int) (imageView.getImageY() + imageView.getImageHeight() + AndroidUtilities.dp(8)); + textY = (int) (imageView.getImageY() + imageView.getImageHeight() + dp(8)); if (currentType == 0) { captionLayout = createLayoutForText(this, null, currentBlock.caption.text, textWidth, textY, currentBlock, parentAdapter); if (captionLayout != null) { - creditOffset = AndroidUtilities.dp(4) + captionLayout.getHeight(); - height += creditOffset + AndroidUtilities.dp(4); + creditOffset = dp(4) + captionLayout.getHeight(); + height += creditOffset + dp(4); captionLayout.x = textX; captionLayout.y = textY; } creditLayout = createLayoutForText(this, null, currentBlock.caption.credit, textWidth, textY + creditOffset, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (creditLayout != null) { - height += AndroidUtilities.dp(4) + creditLayout.getHeight(); + height += dp(4) + creditLayout.getHeight(); creditLayout.x = textX; creditLayout.y = textY + creditOffset; } } if (!isFirst && currentType == 0 && currentBlock.level <= 0) { - height += AndroidUtilities.dp(8); + height += dp(8); } if (currentType != 2) { - height += AndroidUtilities.dp(8); + height += dp(8); } } else { height = 1; @@ -10672,7 +11534,7 @@ protected void onDraw(Canvas canvas) { return; } - Theme.chat_docBackPaint.setColor(Theme.getColor(Theme.key_chat_inLocationBackground)); + Theme.chat_docBackPaint.setColor(getThemedColor(Theme.key_chat_inLocationBackground)); canvas.drawRect(imageView.getImageX(), imageView.getImageY(), imageView.getImageX2(), imageView.getImageY2(), Theme.chat_docBackPaint); int left = (int) (imageView.getCenterX() - Theme.chat_locationDrawable[0].getIntrinsicWidth() / 2); int top = (int) (imageView.getCenterY() - Theme.chat_locationDrawable[0].getIntrinsicHeight() / 2); @@ -10708,7 +11570,7 @@ protected void onDraw(Canvas canvas) { canvas.restore(); } if (currentBlock.level > 0) { - canvas.drawRect(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(20), getMeasuredHeight() - (currentBlock.bottom ? AndroidUtilities.dp(6) : 0), quoteLinePaint); + canvas.drawRect(dp(18), 0, dp(20), getMeasuredHeight() - (currentBlock.bottom ? dp(6) : 0), quoteLinePaint); } } @@ -10744,8 +11606,8 @@ private class BlockChannelCell extends FrameLayout implements TextSelectionHelpe private DrawingText textLayout; private int buttonWidth; - private int textX = AndroidUtilities.dp(18); - private int textY = AndroidUtilities.dp(11); + private int textX = dp(18); + private int textY = dp(11); private int textX2; private Paint backgroundPaint; private AnimatorSet currentAnimation; @@ -10789,7 +11651,7 @@ public void setBlock(TLRPC.TL_pageBlockChannel block) { currentBlock = block; if (currentType == 0) { - int color = Theme.getColor(Theme.key_switchTrack); + int color = getThemedColor(Theme.key_switchTrack); int r = Color.red(color); int g = Color.green(color); int b = Color.blue(color); @@ -10865,14 +11727,14 @@ public boolean onTouchEvent(MotionEvent event) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); - setMeasuredDimension(width, AndroidUtilities.dp(39 + 9)); + setMeasuredDimension(width, dp(39 + 9)); - textView.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(39), MeasureSpec.EXACTLY)); + textView.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(dp(39), MeasureSpec.EXACTLY)); buttonWidth = textView.getMeasuredWidth(); - progressView.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(39), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(39), MeasureSpec.EXACTLY)); - imageView.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(39), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(39), MeasureSpec.EXACTLY)); + progressView.measure(MeasureSpec.makeMeasureSpec(dp(39), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(dp(39), MeasureSpec.EXACTLY)); + imageView.measure(MeasureSpec.makeMeasureSpec(dp(39), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(dp(39), MeasureSpec.EXACTLY)); if (currentBlock != null) { - textLayout = createLayoutForText(this, currentBlock.channel.title, null, width - AndroidUtilities.dp(36 + 16) - buttonWidth, textY, currentBlock, StaticLayoutEx.ALIGN_LEFT(), 1, parentAdapter); + textLayout = createLayoutForText(this, currentBlock.channel.title, null, width - dp(36 + 16) - buttonWidth, textY, currentBlock, StaticLayoutEx.ALIGN_LEFT(), 1, parentAdapter); if (parentAdapter.isRtl) { textX2 = textX; } else { @@ -10887,8 +11749,8 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - imageView.layout(textX2 + buttonWidth / 2 - AndroidUtilities.dp(19), 0, textX2 + buttonWidth / 2 + AndroidUtilities.dp(20), AndroidUtilities.dp(39)); - progressView.layout(textX2 + buttonWidth / 2 - AndroidUtilities.dp(19), 0, textX2 + buttonWidth / 2 + AndroidUtilities.dp(20), AndroidUtilities.dp(39)); + imageView.layout(textX2 + buttonWidth / 2 - dp(19), 0, textX2 + buttonWidth / 2 + dp(20), dp(39)); + progressView.layout(textX2 + buttonWidth / 2 - dp(19), 0, textX2 + buttonWidth / 2 + dp(20), dp(39)); textView.layout(textX2, 0, textX2 + textView.getMeasuredWidth(), textView.getMeasuredHeight()); } @@ -10897,7 +11759,7 @@ protected void onDraw(Canvas canvas) { if (currentBlock == null) { return; } - canvas.drawRect(0, 0, getMeasuredWidth(), AndroidUtilities.dp(39), backgroundPaint); + canvas.drawRect(0, 0, getMeasuredWidth(), dp(39), backgroundPaint); if (textLayout != null && textLayout.getLineCount() > 0) { canvas.save(); if (parentAdapter.isRtl) { @@ -10925,7 +11787,7 @@ private class BlockAuthorDateCell extends View implements TextSelectionHelper.Ar private DrawingText textLayout; private int textX; - private int textY = AndroidUtilities.dp(8); + private int textY = dp(8); private TLRPC.TL_pageBlockAuthorDate currentBlock; @@ -10984,13 +11846,13 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } catch (Exception e) { FileLog.e(e); } - textLayout = createLayoutForText(this, text, null, width - AndroidUtilities.dp(36), textY, currentBlock, parentAdapter); + textLayout = createLayoutForText(this, text, null, width - dp(36), textY, currentBlock, parentAdapter); if (textLayout != null) { - height += AndroidUtilities.dp(8 + 8) + textLayout.getHeight(); + height += dp(8 + 8) + textLayout.getHeight(); if (parentAdapter.isRtl) { - textX = (int) Math.floor(width - textLayout.getLineLeft(0) - textLayout.getLineWidth(0) - AndroidUtilities.dp(16)); + textX = (int) Math.floor(width - textLayout.getLineLeft(0) - textLayout.getLineWidth(0) - dp(16)); } else { - textX = AndroidUtilities.dp(18); + textX = dp(18); } textLayout.x = textX; textLayout.y = textY; @@ -11038,7 +11900,7 @@ private class BlockTitleCell extends View implements TextSelectionHelper.Article private DrawingText textLayout; private TLRPC.TL_pageBlockTitle currentBlock; - private int textX = AndroidUtilities.dp(18); + private int textX = dp(18); private int textY; private WebpageAdapter parentAdapter; @@ -11066,14 +11928,14 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (currentBlock != null) { if (currentBlock.first) { - height += AndroidUtilities.dp(8); - textY = AndroidUtilities.dp(16); + height += dp(8); + textY = dp(16); } else { - textY = AndroidUtilities.dp(8); + textY = dp(8); } - textLayout = createLayoutForText(this, null, currentBlock.text, width - AndroidUtilities.dp(36), textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.text, width - dp(36), textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (textLayout != null) { - height += AndroidUtilities.dp(8 + 8) + textLayout.getHeight(); + height += dp(8 + 8) + textLayout.getHeight(); textLayout.x = textX; textLayout.y = textY; } @@ -11120,7 +11982,7 @@ private class BlockKickerCell extends View implements TextSelectionHelper.Articl private DrawingText textLayout; private TLRPC.TL_pageBlockKicker currentBlock; - private int textX = AndroidUtilities.dp(18); + private int textX = dp(18); private int textY; private WebpageAdapter parentAdapter; @@ -11148,14 +12010,14 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (currentBlock != null) { if (currentBlock.first) { - textY = AndroidUtilities.dp(16); - height += AndroidUtilities.dp(8); + textY = dp(16); + height += dp(8); } else { - textY = AndroidUtilities.dp(8); + textY = dp(8); } - textLayout = createLayoutForText(this, null, currentBlock.text, width - AndroidUtilities.dp(36), textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.text, width - dp(36), textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (textLayout != null) { - height += AndroidUtilities.dp(8 + 8) + textLayout.getHeight(); + height += dp(8 + 8) + textLayout.getHeight(); textLayout.x = textX; textLayout.y = textY; } @@ -11191,8 +12053,8 @@ public void fillTextLayoutBlocks(ArrayList<TextSelectionHelper.TextLayoutBlock> private class BlockFooterCell extends View implements TextSelectionHelper.ArticleSelectableView { private DrawingText textLayout; - private int textX = AndroidUtilities.dp(18); - private int textY = AndroidUtilities.dp(8); + private int textX = dp(18); + private int textY = dp(8); private TLRPC.TL_pageBlockFooter currentBlock; @@ -11221,19 +12083,19 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (currentBlock != null) { if (currentBlock.level == 0) { - textY = AndroidUtilities.dp(8); - textX = AndroidUtilities.dp(18); + textY = dp(8); + textX = dp(18); } else { textY = 0; - textX = AndroidUtilities.dp(18 + 14 * currentBlock.level); + textX = dp(18 + 14 * currentBlock.level); } - textLayout = createLayoutForText(this, null, currentBlock.text, width - AndroidUtilities.dp(18) - textX, textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.text, width - dp(18) - textX, textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (textLayout != null) { height = textLayout.getHeight(); if (currentBlock.level > 0) { - height += AndroidUtilities.dp(8); + height += dp(8); } else { - height += AndroidUtilities.dp(8 + 8); + height += dp(8 + 8); } textLayout.x = textX; textLayout.y = textY; @@ -11258,7 +12120,7 @@ protected void onDraw(Canvas canvas) { canvas.restore(); } if (currentBlock.level > 0) { - canvas.drawRect(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(20), getMeasuredHeight() - (currentBlock.bottom ? AndroidUtilities.dp(6) : 0), quoteLinePaint); + canvas.drawRect(dp(18), 0, dp(20), getMeasuredHeight() - (currentBlock.bottom ? dp(6) : 0), quoteLinePaint); } } @@ -11302,7 +12164,7 @@ protected void onScrollChanged(int l, int t, int oldl, int oldt) { } } }; - scrollView.setPadding(0, AndroidUtilities.dp(8), 0, AndroidUtilities.dp(8)); + scrollView.setPadding(0, dp(8), 0, dp(8)); addView(scrollView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); textContainer = new View(context) { @@ -11312,7 +12174,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int height = 0; int width = 1; if (currentBlock != null) { - textLayout = createLayoutForText(this, null, currentBlock.text, AndroidUtilities.dp(5000), 0, currentBlock, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.text, dp(5000), 0, currentBlock, parentAdapter); if (textLayout != null) { height += textLayout.getHeight(); for (int a = 0, count = textLayout.getLineCount(); a < count; a++) { @@ -11322,7 +12184,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } else { height = 1; } - setMeasuredDimension(width + AndroidUtilities.dp(32), height); + setMeasuredDimension(width + dp(32), height); } @Override @@ -11343,8 +12205,8 @@ protected void onDraw(Canvas canvas) { } }; HorizontalScrollView.LayoutParams layoutParams = new HorizontalScrollView.LayoutParams(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT); - layoutParams.leftMargin = layoutParams.rightMargin = AndroidUtilities.dp(16); - layoutParams.topMargin = layoutParams.bottomMargin = AndroidUtilities.dp(12); + layoutParams.leftMargin = layoutParams.rightMargin = dp(16); + layoutParams.topMargin = layoutParams.bottomMargin = dp(12); scrollView.addView(textContainer, layoutParams); if (Build.VERSION.SDK_INT >= 23) { @@ -11376,7 +12238,7 @@ protected void onDraw(Canvas canvas) { if (currentBlock == null) { return; } - canvas.drawRect(0, AndroidUtilities.dp(8), getMeasuredWidth(), getMeasuredHeight() - AndroidUtilities.dp(8), preformattedBackgroundPaint); + canvas.drawRect(0, dp(8), getMeasuredWidth(), getMeasuredHeight() - dp(8), preformattedBackgroundPaint); } @Override @@ -11396,8 +12258,8 @@ public void invalidate() { private class BlockSubheaderCell extends View implements TextSelectionHelper.ArticleSelectableView { private DrawingText textLayout; - private int textX = AndroidUtilities.dp(18); - private int textY = AndroidUtilities.dp(8); + private int textX = dp(18); + private int textY = dp(8); private TLRPC.TL_pageBlockSubheader currentBlock; @@ -11425,9 +12287,9 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int height = 0; if (currentBlock != null) { - textLayout = createLayoutForText(this, null, currentBlock.text, width - AndroidUtilities.dp(36), textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); + textLayout = createLayoutForText(this, null, currentBlock.text, width - dp(36), textY, currentBlock, parentAdapter.isRtl ? StaticLayoutEx.ALIGN_RIGHT() : Layout.Alignment.ALIGN_NORMAL, parentAdapter); if (textLayout != null) { - height += AndroidUtilities.dp(8 + 8) + textLayout.getHeight(); + height += dp(8 + 8) + textLayout.getHeight(); textLayout.x = textX; textLayout.y = textY; } @@ -11470,7 +12332,7 @@ public void fillTextLayoutBlocks(ArrayList<TextSelectionHelper.TextLayoutBlock> } } - private static class ReportCell extends FrameLayout { + private class ReportCell extends FrameLayout { private TextView textView; private TextView viewsTextView; @@ -11484,19 +12346,19 @@ public ReportCell(Context context) { textView.setText(LocaleController.getString("PreviewFeedback2", R.string.PreviewFeedback2)); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12); textView.setGravity(Gravity.CENTER); - textView.setPadding(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(18), 0); + textView.setPadding(dp(18), 0, dp(18), 0); addView(textView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 34, Gravity.LEFT | Gravity.TOP, 0, 10, 0, 0)); viewsTextView = new TextView(context); viewsTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12); viewsTextView.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL); - viewsTextView.setPadding(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(18), 0); + viewsTextView.setPadding(dp(18), 0, dp(18), 0); addView(viewsTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 34, Gravity.LEFT | Gravity.TOP, 0, 10, 0, 0)); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(44), MeasureSpec.EXACTLY)); + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(dp(44), MeasureSpec.EXACTLY)); } public void setViews(int count) { @@ -11510,7 +12372,7 @@ public void setViews(int count) { textView.setGravity(Gravity.RIGHT | Gravity.CENTER_VERTICAL); viewsTextView.setText(LocaleController.formatPluralStringComma("Views", count)); } - int color = Theme.getColor(Theme.key_switchTrack); + int color = getThemedColor(Theme.key_switchTrack); textView.setTextColor(getGrayTextColor()); viewsTextView.setTextColor(getGrayTextColor()); textView.setBackgroundColor(Color.argb(34, Color.red(color), Color.green(color), Color.blue(color))); @@ -11585,7 +12447,7 @@ public boolean isVideo(int index) { @Override public boolean isHardwarePlayer(int index) { - return !(index >= pageBlocks.size() || index < 0) && !WebPageUtils.isVideo(page, get(index)) && adapter[0].getTypeForBlock(get(index)) == 5; + return !(index >= pageBlocks.size() || index < 0) && !WebPageUtils.isVideo(page, get(index)) && pages[0].adapter.getTypeForBlock(get(index)) == 5; } @Override @@ -11624,7 +12486,7 @@ public CharSequence getCaption(int index) { stringBuilder.setSpan(new URLSpan(url) { @Override public void onClick(View widget) { - openWebpageUrl(getURL(), null); + openWebpageUrl(getURL(), null, makeProgress(pressedLink, pressedLinkOwnerLayout)); } }, 0, url.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE); caption = stringBuilder; @@ -11632,7 +12494,7 @@ public void onClick(View widget) { } if (caption == null) { TLRPC.RichText captionRichText = getBlockCaption(pageBlock, 2); - caption = getText(page, null, captionRichText, captionRichText, pageBlock, -AndroidUtilities.dp(100)); + caption = getText(page, null, captionRichText, captionRichText, pageBlock, -dp(100)); if (caption instanceof Spannable) { Spannable spannable = (Spannable) caption; TextPaintUrlSpan[] spans = spannable.getSpans(0, caption.length(), TextPaintUrlSpan.class); @@ -11643,7 +12505,7 @@ public void onClick(View widget) { builder.setSpan(new URLSpan(spans[a].getUrl()) { @Override public void onClick(View widget) { - openWebpageUrl(getURL(), null); + openWebpageUrl(getURL(), null, null); } }, spannable.getSpanStart(spans[a]), spannable.getSpanEnd(spans[a]), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } @@ -11683,9 +12545,9 @@ public TLRPC.PhotoSize getFileLocation(TLObject media, int[] size) { @Override public void updateSlideshowCell(TLRPC.PageBlock currentPageBlock) { - int count = listView[0].getChildCount(); + int count = pages[0].listView.getChildCount(); for (int a = 0; a < count; a++) { - View child = listView[0].getChildAt(a); + View child = pages[0].listView.getChildAt(a); if (child instanceof ArticleViewer.BlockSlideshowCell) { ArticleViewer.BlockSlideshowCell cell = (ArticleViewer.BlockSlideshowCell) child; int idx = cell.currentBlock.items.indexOf(currentPageBlock); @@ -11717,14 +12579,14 @@ public PhotoViewer.PlaceProviderObject getPlaceForPhoto(MessageObject messageObj if (index < 0 || index >= pageBlocks.size()) { return null; } - ImageReceiver imageReceiver = getImageReceiverFromListView(listView[0], pageBlocks.get(index), tempArr); + ImageReceiver imageReceiver = getImageReceiverFromListView(pages[0].listView, pageBlocks.get(index), tempArr); if (imageReceiver == null) { return null; } PhotoViewer.PlaceProviderObject object = new PhotoViewer.PlaceProviderObject(); object.viewX = tempArr[0]; object.viewY = tempArr[1]; - object.parentView = listView[0]; + object.parentView = pages[0].listView; object.imageReceiver = imageReceiver; object.thumb = imageReceiver.getBitmapSafe(); object.radius = imageReceiver.getRoundRadius(true); @@ -11814,7 +12676,7 @@ public void onReleasePlayerBeforeClose(int photoIndex) { VideoPlayer player = PhotoViewer.getInstance().getVideoPlayer(); TextureView textureView = PhotoViewer.getInstance().getVideoTextureView(); SurfaceView surfaceView = PhotoViewer.getInstance().getVideoSurfaceView(); - BlockVideoCell videoCell = getViewFromListView(listView[0], pageBlock); + BlockVideoCell videoCell = getViewFromListView(pages[0].listView, pageBlock); if (videoCell != null && player != null && textureView != null) { videoStates.put(videoCell.currentBlock.video_id, videoCell.setState(BlockVideoCellState.fromPlayer(player, videoCell, textureView))); videoCell.firstFrameRendered = false; @@ -11849,78 +12711,1685 @@ private BlockVideoCell getViewFromListView(ViewGroup listView, TLRPC.PageBlock p } } - public class Sheet implements BaseFragment.AttachedSheet { + public int getThemedColor(int key) { + return Theme.getColor(key, getResourcesProvider()); + } - public WindowView windowView; + public Theme.ResourcesProvider getResourcesProvider() { + return null; // sheet != null ? sheet.resourcesProvider : null; + } - public Sheet(Context context) { + public boolean isFirstArticle() { + return pagesStack.size() > 0 && pagesStack.get(0) instanceof TLRPC.WebPage; + } - windowView = new WindowView(context); + private final AnimatedColor page0Background = new AnimatedColor(() -> AndroidUtilities.runOnUIThread(this::updatePages), 320, CubicBezierInterpolator.EASE_OUT_QUINT); + private final AnimatedColor page1Background = new AnimatedColor(() -> AndroidUtilities.runOnUIThread(this::updatePages), 320, CubicBezierInterpolator.EASE_OUT_QUINT); + public void updatePages() { + if (actionBar == null || pages[0] == null || pages[1] == null) { + return; } - public WindowView getWindowView() { - return windowView; - } + final float page0Alpha = pages[0].getVisibility() != View.VISIBLE ? 0 : 1f - pages[0].getTranslationX() / pages[0].getWidth(); + final float page1Alpha = 1f - page0Alpha; - @Override - public boolean isShown() { - return false; + actionBar.setProgress(0, pages[0].getProgress()); + actionBar.setProgress(1, pages[1].getProgress()); + actionBar.setTransitionProgress(page1Alpha); + if (!actionBar.isAddressing() && !actionBar.isSearching() && (windowView.movingPage || windowView.openingPage)) { + if (isFirstArticle() || pagesStack.size() > 1) { + final float backButton = lerp(pages[0].hasBackButton() || pagesStack.size() > 1 ? 1f : 0, pages[1].hasBackButton() || pagesStack.size() > 2 ? 1f : 0, page1Alpha); + actionBar.backButtonDrawable.setRotation(1f - backButton, false); + actionBar.forwardButtonDrawable.setState(false); // pages[0].hasForwardButton()); + actionBar.setBackButtonCached(backButton > .5f); + } else { +// actionBar.backButtonDrawable.setRotation(1f - backButton, false); + actionBar.forwardButtonDrawable.setState(false); // pages[0].hasForwardButton()); + actionBar.setBackButtonCached(false); // backButton > .5f); + } + actionBar.setHasForward(pages[0].hasForwardButton()); } - @Override - public void dismiss() { + actionBar.setBackgroundColor(0, page0Background.set(pages[0].getActionBarColor(), windowView.movingPage || windowView.openingPage)); + actionBar.setBackgroundColor(1, page1Background.set(pages[1].getActionBarColor(), windowView.movingPage || windowView.openingPage)); - } + actionBar.setColors(ColorUtils.blendARGB(pages[0].getActionBarColor(), pages[1].getActionBarColor(), page1Alpha), false); - @Override - public void release() { + actionBar.setMenuType((page0Alpha > .5f ? pages[0] : pages[1]).type); + if (sheet != null) { + sheet.windowView.invalidate(); + } else if (windowView != null) { + windowView.invalidate(); } + } - @Override - public boolean isFullyVisible() { - return false; - } + public void updateTitle(boolean animated) { + actionBar.setTitle(0, pages[0].getTitle(), animated); + actionBar.setSubtitle(0, pages[0].getSubtitle(), false); + actionBar.setIsDangerous(0, pages[0].isWeb() && pages[0].getWebView() != null && pages[0].getWebView().isUrlDangerous(), false); - @Override - public boolean attachedToParent() { - return false; - } + actionBar.setTitle(1, pages[1].getTitle(), animated); + actionBar.setSubtitle(1, pages[1].getSubtitle(), false); + actionBar.setIsDangerous(1, pages[1].isWeb() && pages[1].getWebView() != null && pages[1].getWebView().isUrlDangerous(), false); + } - @Override - public boolean onBackPressed() { - return false; + public void setOpener(BotWebViewContainer.MyWebView webView) { + if (pages == null) return; + for (int i = 0; i < pages.length; ++i) { + if (pages[i] == null) continue; + pages[i].webViewContainer.setOpener(webView); } + } - @Override - public boolean showDialog(Dialog dialog) { - return false; - } + public class PageLayout extends FrameLayout { - @Override - public void setKeyboardHeightFromParent(int keyboardHeight) { + public static final int TYPE_ARTICLE = 0; + public static final int TYPE_WEB = 1; - } + public int type; - @Override - public int getNavigationBarColor(int color) { - return 0; - } + public final RecyclerListView listView; + public final WebpageAdapter adapter; + public final LinearLayoutManager layoutManager; - @Override - public void setOnDismissListener(Runnable onDismiss) { + public final ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer swipeContainer; + public final BotWebViewContainer webViewContainer; + private boolean swipeBack; + + private int errorShownCode; + private String errorShownDescription; + private boolean errorShown; + private boolean dangerousShown; + public ErrorContainer errorContainer; + public boolean backButton, forwardButton; + public int webActionBarColor = getThemedColor(Theme.key_iv_background); + public int webBackgroundColor = getThemedColor(Theme.key_iv_background); + + public boolean paused = false; + public void pause() { + if (paused) return; + if (getWebView() != null) { + getWebView().onPause(); + } + paused = true; + } + public void resume() { + if (!paused) return; + if (getWebView() != null) { + getWebView().onResume(); + } + paused = false; } - public class WindowView extends SizeNotifierFrameLayout { + public PageLayout(Context context, Theme.ResourcesProvider resourcesProvider) { + super(context); - public WindowView(Context context) { - super(context); + listView = new WebpageListView(context, resourcesProvider) { + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + overrideProgress = -1; + } + }; + listView.setClipToPadding(false); + if (BOTTOM_ACTION_BAR) { + listView.setPadding(0, (int) (AndroidUtilities.statusBarHeight * 1.25f), 0, dp(24)); + } else { + listView.setPadding(0, dp(56), 0, 0); + listView.setTopGlowOffset(dp(56)); } + ((DefaultItemAnimator) listView.getItemAnimator()).setDelayAnimations(false); + listView.setAdapter(adapter = new WebpageAdapter(context, sheet != null && sheet.halfSize())); + listView.setLayoutManager(layoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)); + listView.setOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { + if (newState == RecyclerView.SCROLL_STATE_IDLE) { + textSelectionHelper.stopScrolling(); + } + } + @Override + public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + if (recyclerView.getChildCount() == 0) { + return; + } + recyclerView.invalidate(); + textSelectionHelper.onParentScrolled(); + if (sheet != null) { + sheet.windowView.invalidate(); + } else if (windowView != null) { + windowView.invalidate(); + } + updatePages(); + checkScroll(dy); + } + }); + addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); - } + swipeContainer = new ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer(getContext()) { + private boolean ignoreLayout; + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + ignoreLayout = true; + setOffsetY(MeasureSpec.getSize(heightMeasureSpec) * .4f); + ignoreLayout = false; + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(heightMeasureSpec) - dp(sheet != null && !sheet.halfSize() ? 0 : 56) - AndroidUtilities.statusBarHeight, MeasureSpec.EXACTLY)); + } + @Override + public void requestLayout() { + if (!ignoreLayout) { + super.requestLayout(); + } + } + }; + swipeContainer.setShouldWaitWebViewScroll(true); + swipeContainer.setFullSize(true); + swipeContainer.setAllowFullSizeSwipe(true); +// swipeContainer.stickToEdges = false; + webViewContainer = new BotWebViewContainer(getContext(), resourcesProvider, getThemedColor(Theme.key_windowBackgroundWhite), false) { + @Override + public void onWebViewCreated() { + super.onWebViewCreated(); + swipeContainer.setWebView(webViewContainer.getWebView()); + } + + @Override + protected void onURLChanged(String url, boolean first, boolean last) { + backButton = !first; + forwardButton = !last; + updateTitle(true); + if (PageLayout.this == pages[0] && !actionBar.isAddressing() && !actionBar.isSearching() && !(windowView.movingPage || windowView.openingPage)) { + if (isFirstArticle() || pagesStack.size() > 1) { + actionBar.backButtonDrawable.setRotation(backButton || pagesStack.size() > 1 ? 0 : 1, true); + actionBar.setBackButtonCached(backButton || pagesStack.size() > 1); + actionBar.forwardButtonDrawable.setState(false); // hasForwardButton()); + } else { + actionBar.setBackButtonCached(false); + actionBar.forwardButtonDrawable.setState(false); + } + actionBar.setHasForward(forwardButton); + actionBar.setIsTonsite(pages[0] != null && pages[0].isTonsite()); + } + } + + @Override + protected void onTitleChanged(String title) { + updateTitle(true); + } + + @Override + protected void onFaviconChanged(Bitmap favicon) { + super.onFaviconChanged(favicon); + } + + @Override + protected void onErrorShown(boolean shown, int errorCode, String description) { + if (shown) { + createErrorContainer(); + errorContainer.set(getWebView() != null ? getWebView().getUrl() : null, errorShownCode = errorCode, errorShownDescription = description); + errorContainer.setDark(AndroidUtilities.computePerceivedBrightness(getThemedColor(Theme.key_iv_background)) <= .721f, false); + errorContainer.setBackgroundColor(getThemedColor(Theme.key_iv_background)); + } + AndroidUtilities.updateViewVisibilityAnimated(errorContainer, errorShown = shown, 1f, false); + invalidate(); + } + }; + webViewContainer.setOnCloseRequestedListener(() -> { + if (LaunchActivity.instance == null) return; + final BottomSheetTabs tabs = LaunchActivity.instance.getBottomSheetTabs(); + if (tabs == null || !tabs.tryRemoveTabWith(ArticleViewer.this)) { + close(true, true); + } + }); + webViewContainer.setWebViewProgressListener(progress -> { + if (PageLayout.this == pages[0]) { + if (actionBar.lineProgressView.getCurrentProgress() > progress) { + actionBar.lineProgressView.setProgress(0, false); + } + actionBar.lineProgressView.setProgress(progress, true); + } + }); + webViewContainer.setDelegate(new BotWebViewContainer.Delegate() { + + @Override + public void onCloseRequested(@Nullable Runnable callback) { + if (pages[0] == PageLayout.this) { + goBack(); + } + } + + @Override + public void onCloseToTabs() { + if (sheet != null) { + sheet.dismiss(true); + } + } + + @Override + public void onInstantClose() { + if (sheet != null) { + sheet.dismissInstant(); + } else if (pages[0] == PageLayout.this) { + goBack(); + } + } + + @Override + public void onWebAppSetupClosingBehavior(boolean needConfirmation) { + + } + + @Override + public void onWebAppSwipingBehavior(boolean allowSwipes) { + + } + + @Override + public void onWebAppSetActionBarColor(int colorKey, int color, boolean isOverrideColor) { + + } + + @Override + public void onWebAppSetBackgroundColor(int color) { + + } + + @Override + public void onWebAppBackgroundChanged(boolean actionBarColor, int color) { + setWebBgColor(actionBarColor, color); + } + + @Override + public void onWebAppExpand() { + } + + @Override + public void onWebAppSwitchInlineQuery(TLRPC.User botUser, String query, List<String> chatTypes) { + + } + + @Override + public void onWebAppOpenInvoice(TLRPC.InputInvoice inputInvoice, String slug, TLObject response) { + + } + + @Override + public void onSetupMainButton(boolean isVisible, boolean isActive, String text, int color, int textColor, boolean isProgressVisible) { + + } + + @Override + public void onSetBackButtonVisible(boolean visible) { + + } + + @Override + public void onSetSettingsButtonVisible(boolean visible) { + + } + }); + webViewContainer.setWebViewScrollListener(new BotWebViewContainer.WebViewScrollListener() { + @Override + public void onWebViewScrolled(WebView webView, int dx, int dy) { + updatePages(); + } + }); + swipeContainer.addView(webViewContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + swipeContainer.setScrollEndListener(() -> webViewContainer.invalidateViewPortHeight(true)); + swipeContainer.setDelegate(() -> { + if (sheet != null) { + swipeBack = true; + sheet.dismiss(true); + } + }); + swipeContainer.setScrollListener(() -> { + webViewContainer.invalidateViewPortHeight(); + if (errorContainer != null) { + errorContainer.layout.setTranslationY(((-swipeContainer.getOffsetY() + swipeContainer.getTopActionBarOffsetY()) - swipeContainer.getSwipeOffsetY()) / 2f); + } + updatePages(); + }); + swipeContainer.setTopActionBarOffsetY(dp(sheet != null && !sheet.halfSize() ? 0 : 56) + AndroidUtilities.statusBarHeight); +// swipeContainer.setIsKeyboardVisible(obj -> windowView.getKeyboardHeight() >= dp(20)); + addView(swipeContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + + cleanup(); + setType(TYPE_ARTICLE); + } + + private void setWebBgColor(boolean actionBarColor, int color) { + if (actionBarColor) { + webActionBarColor = Theme.blendOver(getThemedColor(Theme.key_iv_background), color); + if (PageLayout.this == pages[0]) { + if (SharedConfig.adaptableColorInBrowser) { + actionBar.setColors(webActionBarColor, true); + } + if (sheet != null) { + sheet.checkNavColor(); + } + } + } else { + webBackgroundColor = Theme.blendOver(0xFFFFFFFF, color); + if (PageLayout.this == pages[0]) { + if (SharedConfig.adaptableColorInBrowser) { + actionBar.setMenuColors(webBackgroundColor); + } + if (sheet != null) { + sheet.checkNavColor(); + } + } + } + updatePages(); + } + + public ErrorContainer createErrorContainer() { + if (errorContainer == null) { + swipeContainer.addView(errorContainer = new ErrorContainer(getContext()), LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + errorContainer.buttonView.setOnClickListener(v -> { + BotWebViewContainer.MyWebView webView = webViewContainer.getWebView(); + if (webView != null) { + webView.reload(); + } + }); + AndroidUtilities.updateViewVisibilityAnimated(errorContainer, errorShown, 1f, false); + } + return errorContainer; + } + + public boolean isWeb() { + return type == TYPE_WEB; + } + + public boolean isArticle() { + return type == TYPE_ARTICLE; + } + + public void setType(int type) { + if (this.type != type) { + cleanup(); + } + this.type = type; + listView.setVisibility(isArticle() ? View.VISIBLE : View.GONE); + swipeContainer.setVisibility(isWeb() ? View.VISIBLE : View.GONE); + } + + public String getTitle() { + if (isArticle()) { + if (adapter.currentPage != null && adapter.currentPage.site_name != null) { + return adapter.currentPage.site_name; + } + } + if (isWeb()) { + BotWebViewContainer.MyWebView webView = webViewContainer.getWebView(); + if (webView != null) { + return webView.getTitle(); + } + } + return ""; + } + + public int getBackgroundColor() { + if (isWeb() && dangerousShown) { + return 0xFFB3261E; + } + if (isWeb() && SharedConfig.adaptableColorInBrowser) { + if (errorShown) { + return getThemedColor(Theme.key_iv_background); + } + return webBackgroundColor; + } + return getThemedColor(Theme.key_iv_background); + } + + public int getActionBarColor() { + if (isWeb() && SharedConfig.adaptableColorInBrowser) { + return webActionBarColor; + } + return getThemedColor(Theme.key_iv_background); + } + + private String lastUrl, lastFormattedUrl; + public String getSubtitle() { + if (isWeb()) { + BotWebViewContainer.MyWebView webView = webViewContainer.getWebView(); + if (webView != null) { + if (TextUtils.equals(lastUrl, webView.getUrl())) { + return lastFormattedUrl; + } + try { + Uri uri = Uri.parse(BotWebViewContainer.magic2tonsite(lastUrl = webView.getUrl())); + String url = (uri.getScheme() != null && (uri.getScheme().equalsIgnoreCase("http") || uri.getScheme().equalsIgnoreCase("https"))) ? uri.getSchemeSpecificPart() : uri.toString(); + if (!isTonsite()) { + try { + try { + Uri uri2 = Uri.parse(url); + url = Browser.replaceHostname(uri2, Browser.IDN_toUnicode(uri2.getHost()), null); + } catch (Exception e) { + FileLog.e(e, false); + } + url = URLDecoder.decode(url.replaceAll("\\+", "%2b"), "UTF-8"); + } catch (Exception e) { + FileLog.e(e); + } + } + if (url.startsWith("//")) + url = url.substring(2); + if (url.startsWith("www.")) + url = url.substring(4); + if (url.endsWith("/")) + url = url.substring(0, url.length() - 1); + int index = 0; + if ((index = url.indexOf("#")) >= 0) { + url = url.substring(0, index); + } + return lastFormattedUrl = url; + } catch (Exception e) { + return webView.getUrl(); + } + } + } + return ""; + } + + private boolean lastVisible; + public void setLastVisible(boolean lastVisible) { + if (this.lastVisible != lastVisible) { + this.lastVisible = lastVisible; + webViewContainer.setKeyboardFocusable(lastVisible); + } + } + + public boolean hasBackButton() { + return backButton; + } + + public void back() { + if (isWeb() && getWebView() != null) { + getWebView().goBack(); + } + } + + public boolean hasForwardButton() { + return forwardButton; + } + + public void forward() {} + + public float getListTop() { + if (isArticle()) { + float listViewTop = listView.getHeight(); + for (int i = 0; i < listView.getChildCount(); ++i) { + View child = listView.getChildAt(i); + int viewType = listView == null || listView.getLayoutManager() == null ? 0 : listView.getLayoutManager().getItemViewType(child); + if (viewType == Integer.MAX_VALUE - 1) { + listViewTop = Math.min(listViewTop, child.getBottom()); + } else { + listViewTop = Math.min(listViewTop, child.getTop()); + } + } + return listViewTop; + } else if (isWeb()) { + return swipeContainer.getTranslationY(); + } + return 0; + } + + public float overrideProgress = -1f; + public float getProgress() { + if (isArticle()) { + if (overrideProgress >= 0) return overrideProgress; + int first = layoutManager.findFirstVisibleItemPosition(); + View view = layoutManager.findViewByPosition(first); + if (view == null) + return 0; + + if (adapter.sumItemHeights == null) { + int last = layoutManager.findLastVisibleItemPosition(); + if (sheet != null && sheet.halfSize()) { + if (first < 1) first = 1; + if (last < 1) last = 1; + } + int count = layoutManager.getItemCount(); + if (last >= count - 2) { + view = layoutManager.findViewByPosition(count - 2); + } else { + view = layoutManager.findViewByPosition(first); + } + if (view == null) { + return 0; + } + + float itemProgress = getWidth() / (float) (count - 1); + + float viewHeight = view.getMeasuredHeight(); + float viewProgress; + if (last >= count - 2) { + viewProgress = (count - 2 - first) * itemProgress * (listView.getMeasuredHeight() - view.getTop()) / viewHeight; + } else { + viewProgress = itemProgress * (1.0f - (Math.min(0, view.getTop() - listView.getPaddingTop()) + viewHeight) / viewHeight); + } + float progress = first * itemProgress + viewProgress; + return progress / getWidth(); + } + + int offset = 0; + if (adapter.sumItemHeights != null) { + int beforeIndex = first - 1; + offset = (beforeIndex >= 0 && beforeIndex < adapter.sumItemHeights.length ? adapter.sumItemHeights[beforeIndex] : 0) + (first != 0 || sheet == null || !sheet.halfSize() ? -view.getTop() : 0); + } + return Utilities.clamp01((float) offset / Math.max(1, adapter.fullHeight - listView.getHeight())); + } else if (isWeb()) { + BotWebViewContainer.MyWebView webView = webViewContainer.getWebView(); + if (webView == null) return 0; + return webView.getScrollProgress(); + } + + return 0; + } + + public void addProgress(float delta) { + float progress = getProgress(); + progress = Utilities.clamp01(progress + delta); + if (isArticle()) { + return; +// if (adapter.itemHeights == null) return; +// int row = 0; +// int offset = (int) (progress * Math.max(1, adapter.fullHeight - listView.getHeight())); +// while (offset >= 0 && row < adapter.getItemCount()) { +// offset -= adapter.itemHeights[row]; +// row++; +// } +// overrideProgress = progress; +// layoutManager.scrollToPositionWithOffset(row + 1, offset); +// listView.invalidate(); +// textSelectionHelper.onParentScrolled(); +// if (sheet != null) { +// sheet.windowView.invalidate(); +// } else if (windowView != null) { +// windowView.invalidate(); +// } +// updatePages(); + } else if (isWeb()) { + BotWebViewContainer.MyWebView webView = webViewContainer.getWebView(); + if (webView == null) return; + webView.setScrollProgress(progress); + updatePages(); + } + } + + public boolean isAtTop() { + if (isArticle()) { + return !listView.canScrollVertically(-1); + } else if (isWeb()) { + + } + return false; + } + + public void scrollToTop(boolean smooth) { + if (isArticle()) { + if (smooth) { + SmoothScroller s = new SmoothScroller(getContext()); + if (sheet != null && sheet.halfSize()) { + s.setTargetPosition(1); + s.setOffset(-dp(56 - 24)); + } else { + s.setTargetPosition(0); + } + layoutManager.startSmoothScroll(s); + } else { + layoutManager.scrollToPositionWithOffset(sheet != null && sheet.halfSize() ? 1 : 0, sheet != null ? dp(56 - 24) : 0); + } + } else if (isWeb()) { + if (smooth) { + swipeContainer.stickTo(-swipeContainer.getOffsetY() + swipeContainer.getTopActionBarOffsetY()); + } else { + swipeContainer.setSwipeOffsetY(-swipeContainer.getOffsetY() + swipeContainer.getTopActionBarOffsetY()); + } + } + } + + public RecyclerListView getListView() { + return listView; + } + + public WebpageAdapter getAdapter() { + return adapter; + } + + public BotWebViewContainer getWebContainer() { + return webViewContainer; + } + + public BotWebViewContainer.MyWebView getWebView() { + return webViewContainer != null ? webViewContainer.getWebView() : null; + } + + public boolean isTonsite() { + if (!isWeb()) return false; + BotWebViewContainer.MyWebView webView = getWebView(); + if (webView == null) return false; + return BotWebViewContainer.isTonsite(BotWebViewContainer.magic2tonsite(webView.getUrl())); + } + + public void cleanup() { + backButton = false; + forwardButton = false; + setWeb(null); + webViewContainer.destroyWebView(); + webViewContainer.resetWebView(); + webActionBarColor = getThemedColor(Theme.key_iv_background); + webBackgroundColor = getThemedColor(Theme.key_iv_background); + if (errorContainer != null) { + errorContainer.setDark(AndroidUtilities.computePerceivedBrightness(webBackgroundColor) <= .721f, true); + errorContainer.setBackgroundColor(webBackgroundColor); + AndroidUtilities.updateViewVisibilityAnimated(errorContainer, errorShown = false, 1f, false); + } + adapter.cleanup(); + invalidate(); + } + + private CachedWeb web; + public void setWeb(CachedWeb web) { + if (this.web != web) { + if (this.web != null) { + this.web.detach(this); + } + this.web = web; + if (this.web != null) { + this.web.attach(this); + } + } + } + + public void updateWeb() { + if (this.web != null) { + this.web.enrich(this); + } + } + + @Override + public void setTranslationX(float translationX) { + super.setTranslationX(translationX); + updatePages(); + if (windowView.openingPage) { + containerView.invalidate(); + } + if (windowView.movingPage) { + containerView.invalidate(); + float progress = translationX / getMeasuredWidth(); + setCurrentHeaderHeight((int) (windowView.startMovingHeaderHeight + (dp(56) - windowView.startMovingHeaderHeight) * progress)); + } + if (sheet != null) { + sheet.updateTranslation(); + } + } + + private final GradientClip clip = new GradientClip(); + + @Override + protected void dispatchDraw(Canvas canvas) { + if (BOTTOM_ACTION_BAR) { + final float t1 = AndroidUtilities.statusBarHeight * 0.5f; + final float t2 = AndroidUtilities.statusBarHeight * 1.25f; + canvas.saveLayerAlpha(0, (int) t1 + 1, getWidth(), getHeight(), 0xFF, Canvas.ALL_SAVE_FLAG); + super.dispatchDraw(canvas); + AndroidUtilities.rectTmp.set(0, (int) t1, getWidth(), t2); + clip.draw(canvas, AndroidUtilities.rectTmp, GradientClip.TOP, 1f); + canvas.restore(); + } else { + super.dispatchDraw(canvas); + } + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + if (errorShown && errorContainer != null) { + errorContainer.setDark(AndroidUtilities.computePerceivedBrightness(getThemedColor(Theme.key_iv_background)) <= .721f, false); + errorContainer.setBackgroundColor(getThemedColor(Theme.key_iv_background)); + } + } + } + + public class CachedWeb extends BottomSheetTabs.WebTabData { + + public CachedWeb(String url) { + lastUrl = url; + currentUrl = url; + } + + public void attach(PageLayout pageLayout) { + if (pageLayout == null) return; + + if (webView != null) { + webView.onResume(); + pageLayout.webViewContainer.replaceWebView(webView, proxy); + pageLayout.setWebBgColor(true, actionBarColor); + pageLayout.setWebBgColor(false, backgroundColor); + } else if (lastUrl != null) { + pageLayout.webViewContainer.loadUrl(UserConfig.selectedAccount, lastUrl); + } + } + + public void enrich(PageLayout pageLayout) { + BotWebViewContainer.MyWebView webView = pageLayout.webViewContainer.getWebView(); + if (webView != null) { + title = webView.getTitle(); + favicon = webView.getFavicon(); + lastUrl = webView.getUrl(); + + actionBarColor = pageLayout.webActionBarColor; + backgroundColor = pageLayout.webBackgroundColor; + } + } + + public void detach(PageLayout pageLayout) { + if (pageLayout == null) return; + + pageLayout.webViewContainer.preserveWebView(); + webView = pageLayout.webViewContainer.getWebView(); + proxy = pageLayout.webViewContainer.getProxy(); + if (webView != null) { + webView.onPause(); + title = webView.getTitle(); + favicon = webView.getFavicon(); + lastUrl = webView.getUrl(); + actionBarColor = pageLayout.webActionBarColor; + backgroundColor = pageLayout.webBackgroundColor; + } + } + + @Override + public String getTitle() { + if (webView != null && !TextUtils.isEmpty(webView.getTitle())) { + return webView.getTitle(); + } + return super.getTitle(); + } + } + + public class WebpageListView extends RecyclerListView { + + public WebpageListView(Context context) { + super(context); + } + + public WebpageListView(Context context, Theme.ResourcesProvider resourcesProvider) { + super(context, resourcesProvider); + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + int count = getChildCount(); + for (int a = 0; a < count; a++) { + View child = getChildAt(a); + if (child.getTag() instanceof Integer) { + Integer tag = (Integer) child.getTag(); + if (tag == 90) { + int bottom = child.getBottom(); + if (bottom < getMeasuredHeight()) { + int height = getMeasuredHeight(); + child.layout(0, height - child.getMeasuredHeight(), child.getMeasuredWidth(), height); + break; + } + } + } + } + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent e) { + if (pressedLinkOwnerLayout != null && pressedLink == null && (popupWindow == null || !popupWindow.isShowing()) && (e.getAction() == MotionEvent.ACTION_UP || e.getAction() == MotionEvent.ACTION_CANCEL)) { + pressedLink = null; + pressedLinkOwnerLayout = null; + pressedLinkOwnerView = null; + } else if (pressedLinkOwnerLayout != null && pressedLink != null && e.getAction() == MotionEvent.ACTION_UP && getAdapter() instanceof WebpageAdapter) { + checkLayoutForLinks((WebpageAdapter) getAdapter(), e, pressedLinkOwnerView, pressedLinkOwnerLayout, 0, 0); + } + return super.onInterceptTouchEvent(e); + } + + @Override + public boolean onTouchEvent(MotionEvent e) { + if (pressedLinkOwnerLayout != null && pressedLink == null && (popupWindow == null || !popupWindow.isShowing()) && (e.getAction() == MotionEvent.ACTION_UP || e.getAction() == MotionEvent.ACTION_CANCEL)) { + pressedLink = null; + pressedLinkOwnerLayout = null; + pressedLinkOwnerView = null; + } + return super.onTouchEvent(e); + } + + @Override + protected void dispatchDraw(Canvas canvas) { + checkVideoPlayer(); + super.dispatchDraw(canvas); + } + + @Override + public void onScrolled(int dx, int dy) { + super.onScrolled(dx, dy); + if (sheet != null && sheet.windowView != null) { + sheet.windowView.invalidate(); + } + } + } + + public class Sheet implements BaseFragment.AttachedSheet, BottomSheetTabsOverlay.Sheet { + public final boolean halfSize() { + return true; + } + + public final AnimationNotificationsLocker animationsLock = new AnimationNotificationsLocker(); + + public BaseFragment fragment; + public final Context context; + public final WindowView windowView; + public View containerView; + public Theme.ResourcesProvider resourcesProvider; + + public ArticleViewer getArticleViewer() { + return ArticleViewer.this; + } + + public Sheet(BaseFragment fragment) { + this.fragment = fragment; + this.resourcesProvider = fragment.getResourceProvider(); + this.context = fragment.getContext(); + this.windowView = new WindowView(context); + new KeyboardNotifier(windowView, true, keyboardHeight -> { + keyboardVisible = keyboardHeight - AndroidUtilities.navigationBarHeight > dp(20); + }); + } + + public void setContainerView(View containerView) { + this.containerView = containerView; + updateTranslation(); + } + + public WindowView getWindowView() { + return windowView; + } + + public boolean preserve; + + private BottomSheetTabDialog dialog; + + @Override + public boolean setDialog(BottomSheetTabDialog dialog) { + this.dialog = dialog; + return true; + } + + @Override + public BottomSheetTabs.WebTabData saveState() { + BottomSheetTabs.WebTabData tab = new BottomSheetTabs.WebTabData(); + tab.title = actionBar.getTitle(); + tab.articleViewer = ArticleViewer.this; + tab.actionBarColor = pages[0] != null && SharedConfig.adaptableColorInBrowser ? pages[0].getActionBarColor() : getThemedColor(Theme.key_iv_background); + tab.backgroundColor = pages[0] != null && SharedConfig.adaptableColorInBrowser ? pages[0].getBackgroundColor() : getThemedColor(Theme.key_iv_background); + tab.overrideActionBarColor = true; + + tab.articleProgress = !attachedToActionBar ? 0 : pages[0].getProgress(); + + tab.view2 = pages[0]; + tab.favicon = pages[0] != null && pages[0].getWebView() != null ? pages[0].getWebView().getFavicon() : null; + if (tab.view2 != null) { + tab.viewWidth = tab.view2.getWidth(); + tab.viewHeight = tab.view2.getHeight(); + } + tab.viewScroll = getListTop(); + tab.themeIsDark = Theme.isCurrentThemeDark(); + + return tab; + } + + @Override + public boolean restoreState(BaseFragment fragment, BottomSheetTabs.WebTabData tab) { + return false; + } + + @Override + public boolean isShown() { + return !dismissing; + } + + public void attachInternal(BaseFragment fragment) { + this.fragment = fragment; + this.resourcesProvider = fragment.getResourceProvider(); + if (fragment instanceof ChatActivity) { + if (((ChatActivity) fragment).getChatActivityEnterView() != null) { + ((ChatActivity) fragment).getChatActivityEnterView().closeKeyboard(); + ((ChatActivity) fragment).getChatActivityEnterView().hidePopup(true, false); + } + } + if (fragment.getParentActivity() instanceof LaunchActivity) { + LaunchActivity activity = (LaunchActivity) fragment.getParentActivity(); + activity.requestCustomNavigationBar(); + } + if (dialog != null) { + dialog.attach(); + } else { + AndroidUtilities.removeFromParent(windowView); + if (fragment.getLayoutContainer() != null) { + fragment.getLayoutContainer().addView(windowView); + } + } + if (pages[0] != null) { + pages[0].resume(); + } + if (pages[1] != null) { + pages[1].resume(); + } + } + + public void show() { + if (dismissing) return; + attachInternal(fragment); + animateOpen(true, true, null); + } + + @Override + public void dismiss() { + dismiss(true); + } + + private boolean dismissing; + private boolean dismissingIntoTabs; + + @Override + public void dismiss(boolean tabs) { + if (dismissing) return; + dismissing = true; + dismissingIntoTabs = tabs; + if (tabs) { + LaunchActivity.instance.getBottomSheetTabsOverlay().dismissSheet(this); + } else { + animateDismiss(true, true, () -> { + release(); + destroy(); + }); + } + checkNavColor(); + checkFullyVisible(); + } + + @Override + public void release() { + if (pages[0] != null && pages[0].swipeBack) { + pages[0].swipeContainer.setSwipeOffsetY(-pages[0].swipeContainer.offsetY + pages[0].swipeContainer.topActionBarOffsetY); + pages[0].swipeBack = false; + } + if (pages[0] != null) { + pages[0].pause(); + } + if (pages[1] != null) { + pages[1].pause(); + } + if (dialog != null) { + dialog.detach(); + } + if (fragment != null) { + fragment.removeSheet(this); + if (dialog == null) { + AndroidUtilities.removeFromParent(windowView); + } + } + if (onDismissListener != null) { + onDismissListener.run(); + onDismissListener = null; + } + } + + public void dismissInstant() { + if (dismissing) return; + dismissing = true; + release(); + destroy(); + } + + @Override + public boolean isFullSize() { + return true; + } + + private boolean wasFullyVisible; + @Override + public boolean isFullyVisible() { + return fullyAttachedToActionBar && dismissProgress <= 0 && openProgress >= 1 && backProgress <= 0 && !dismissingIntoTabs && !dismissing; + } + public void checkFullyVisible() { + if (wasFullyVisible != isFullyVisible()) { + wasFullyVisible = isFullyVisible(); + + if (fragment != null && fragment.getParentLayout() instanceof ActionBarLayout) { + ActionBarLayout layout = (ActionBarLayout) fragment.getParentLayout(); + if (layout.containerView != null) { + layout.containerView.invalidate(); + } + if (layout.sheetContainer != null) { + layout.sheetContainer.invalidate(); + } + } else if (windowView.getParent() instanceof View) { + ((View) windowView.getParent()).invalidate(); + } + } + } + @Override + public boolean attachedToParent() { + return windowView.isAttachedToWindow(); + } + + @Override + public boolean onAttachedBackPressed() { + if (keyboardVisible) { + AndroidUtilities.hideKeyboard(windowView); + return true; + } + if (actionBar.isSearching()) { + actionBar.showSearch(false, true); + return true; + } + if (actionBar.isAddressing()) { + actionBar.showAddress(false, true); + return true; + } + if (isFirstArticle() && pages[0].hasBackButton()) { + pages[0].back(); + return true; + } + if (pagesStack.size() > 1) { + goBack(); + return true; + } + dismiss(false); + return true; + } + + @Override + public boolean showDialog(Dialog dialog) { + return false; + } + + @Override + public void setKeyboardHeightFromParent(int keyboardHeight) { + + } + + @Override + public int getNavigationBarColor(int color) { + final float open = dismissingIntoTabs ? 0f : Math.min(openProgress, 1f - dismissProgress) * (1f - backProgress); + int bgColor = getBackgroundColor(); + if (actionBar != null) { + bgColor = ColorUtils.blendARGB(bgColor, actionBar.addressBackgroundColor, actionBar.addressingProgress); + } + return ColorUtils.blendARGB(color, bgColor, open); + } + + @Override + public boolean isAttachedLightStatusBar() { + final float open = dismissingIntoTabs ? 0f : Math.min(openProgress, 1f - dismissProgress) * (1f - backProgress); + return attachedToActionBar && open > .25f ? AndroidUtilities.computePerceivedBrightness(getActionBarColor()) >= .721f : false; + } + + private Runnable onDismissListener; + @Override + public void setOnDismissListener(Runnable onDismiss) { + onDismissListener = onDismiss; + } + + public void reset() { + dismissing = false; + dismissingIntoTabs = false; + if (openAnimator != null) { + openAnimator.cancel(); + } + if (dismissAnimator != null) { + dismissAnimator.cancel(); + } + dismissProgress = 0f; + openProgress = 0f; + checkFullyVisible(); + updateTranslation(); + windowView.invalidate(); + } + + private float openProgress; + private float dismissProgress; + private ValueAnimator openAnimator; + private ValueAnimator dismissAnimator; + + public void animateOpen(boolean open, boolean animated, Runnable callback) { + if (openAnimator != null) { + openAnimator.cancel(); + } + if (animated) { + openAnimator = ValueAnimator.ofFloat(openProgress, open ? 1f : 0f); + openAnimator.addUpdateListener(anm -> { + openProgress = (float) anm.getAnimatedValue(); + updateTranslation(); + checkNavColor(); + checkFullyVisible(); + }); + openAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + openProgress = open ? 1f : 0f; + updateTranslation(); + checkNavColor(); + if (callback != null) { + callback.run(); + } + checkFullyVisible(); + if (open) animationsLock.unlock(); + } + }); + if (open) { + openAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + openAnimator.setDuration(320); + } else { + openAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT); + openAnimator.setDuration(180); + } + openAnimator.start(); + } else { + openProgress = open ? 1f : 0f; + updateTranslation(); + if (callback != null) { + callback.run(); + } + checkFullyVisible(); + if (open) animationsLock.unlock(); + } + } + + public void animateDismiss(boolean dismiss, boolean animated, Runnable callback) { + if (dismissAnimator != null) { + dismissAnimator.cancel(); + } + if (animated) { + dismissAnimator = ValueAnimator.ofFloat(dismissProgress, dismiss ? 1f : 0f); + dismissAnimator.addUpdateListener(anm -> { + dismissProgress = (float) anm.getAnimatedValue(); + if (!dismissingIntoTabs) { + updateTranslation(); + } + checkNavColor(); + checkFullyVisible(); + }); + dismissAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + dismissProgress = dismiss ? 1f : 0f; + if (!dismissingIntoTabs) { + updateTranslation(); + } + checkNavColor(); + if (callback != null) { + callback.run(); + } + checkFullyVisible(); + } + }); + dismissAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + dismissAnimator.setDuration(250); + dismissAnimator.start(); + } else { + dismissProgress = dismiss ? 1f : 0f; + if (!dismissingIntoTabs) { + updateTranslation(); + } + if (callback != null) { + callback.run(); + } + checkFullyVisible(); + } + } + + private int getListTop() { + int top = 0; + final float listView0Alpha = pages[0] == null || pages[0].getVisibility() != View.VISIBLE ? 0 : 1f - pages[0].getTranslationX() / pages[0].getWidth(); + final float listView1Alpha = 1f - listView0Alpha; + if (pages[0] != null && pages[0].getVisibility() == View.VISIBLE) { + top += (int) (pages[0].getListTop() * listView0Alpha * pages[0].getAlpha()); + } + if (pages[1] != null && pages[1].getVisibility() == View.VISIBLE) { + top += (int) (pages[1].getListTop() * listView1Alpha * pages[1].getAlpha()); + } + return top; + } + + public void checkNavColor() { + AndroidUtilities.setLightStatusBar(dialog != null ? dialog.windowView : windowView, isAttachedLightStatusBar()); + if (dialog != null) { + dialog.updateNavigationBarColor(); + } else { + LaunchActivity.instance.checkSystemBarColors(true, true, true, false); + AndroidUtilities.setLightNavigationBar(getWindowView(), AndroidUtilities.computePerceivedBrightness(getNavigationBarColor(getThemedColor(Theme.key_windowBackgroundGray))) >= .721f); + } + } + + public int getBackgroundColor() { + if (!SharedConfig.adaptableColorInBrowser) { + return Theme.getColor(Theme.key_iv_navigationBackground); + } + final float page0Alpha = pages[0].getVisibility() != View.VISIBLE ? 0 : 1f - pages[0].getTranslationX() / pages[0].getWidth(); + return ColorUtils.blendARGB(pages[0].getBackgroundColor(), pages[1].getBackgroundColor(), 1f - page0Alpha); + } + + public int getActionBarColor() { + if (!SharedConfig.adaptableColorInBrowser) { + return Theme.getColor(Theme.key_iv_background); + } + final float page0Alpha = pages[0].getVisibility() != View.VISIBLE ? 0 : 1f - pages[0].getTranslationX() / pages[0].getWidth(); + return ColorUtils.blendARGB(pages[0].getActionBarColor(), pages[1].getActionBarColor(), 1f - page0Alpha); + } + + private boolean imageAtTop() { + return false; + } + + private int getListPaddingTop() { + return dp(imageAtTop() ? 0 : 20); + } + + public int getEmptyPadding() { + return dp(16) + (containerView == null ? AndroidUtilities.displaySize.y : containerView.getHeight()) - (getListTop() - getListPaddingTop()); + } + + public void updateTranslation() { + if (containerView == null) return; + containerView.setTranslationY(getEmptyPadding() * Math.max(1f - openProgress, dismissingIntoTabs ? 0 : dismissProgress)); + windowView.invalidate(); + } + + public boolean attachedToActionBar; + public boolean fullyAttachedToActionBar; + public boolean nestedVerticalScroll; + + public class WindowView extends SizeNotifierFrameLayout implements BaseFragment.AttachedSheetWindow, BottomSheetTabsOverlay.SheetView { + + public WindowView(Context context) { + super(context); + } + + private final Paint scrimPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint shadowPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint backgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint handlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint headerBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final AnimatedFloat attachedActionBar = new AnimatedFloat(this, 0, 420, CubicBezierInterpolator.EASE_OUT_QUINT); + private boolean drawingFromOverlay; + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + updateTranslation(); + } + + private final Path clipPath = new Path(); + private final RectF rect = new RectF(); + private final RectF rect2 = new RectF(); + + @Override + protected void dispatchDraw(Canvas canvas) { + if (drawingFromOverlay) { + return; + } + + final float open = Math.min(openProgress, 1f - dismissProgress); + + scrimPaint.setColor(Color.BLACK); + scrimPaint.setAlpha((int) (0x60 * open * (1f - backProgress))); + canvas.drawRect(0, 0, getWidth(), getHeight(), scrimPaint); + + final int top = getListTop() - getListPaddingTop(); + final boolean attachedToActionBar = top < (AndroidUtilities.statusBarHeight + ActionBar.getCurrentActionBarHeight()) && open > .95f; + if (Sheet.this.attachedToActionBar != attachedToActionBar) { + Sheet.this.attachedToActionBar = attachedToActionBar; + checkNavColor(); + } + final float attachedActionBar = this.attachedActionBar.set(attachedToActionBar); + if (Sheet.this.fullyAttachedToActionBar != (attachedActionBar >= .999f)) { + Sheet.this.fullyAttachedToActionBar = (attachedActionBar >= .999f); + checkFullyVisible(); + } + final int drawnTop = lerp(top, 0, Utilities.clamp(attachedActionBar, 1, 0)); + + final float y = getEmptyPadding() * Math.max(1f - openProgress, dismissProgress); + canvas.save(); + canvas.translate(getWidth() * backProgress, y); + rect.set(0, drawnTop, getWidth(), getHeight() + dp(16)); + final float r = dp(16) * (1f - attachedActionBar); + if (attachedActionBar < 1f) { + shadowPaint.setColor(0); + shadowPaint.setShadowLayer(dp(18), 0, -dp(3), Theme.multAlpha(Color.BLACK, .26f * open)); + canvas.drawRoundRect(rect, r, r, shadowPaint); + } + + if (r <= 0) { + canvas.clipRect(rect); + } else { + clipPath.rewind(); + clipPath.addRoundRect(rect, r, r, Path.Direction.CW); + canvas.clipPath(clipPath); + } + + backgroundPaint.setColor(pages[1].getBackgroundColor()); + canvas.drawRect(rect, backgroundPaint); + backgroundPaint.setColor(pages[0].getBackgroundColor()); + AndroidUtilities.rectTmp.set(rect); + AndroidUtilities.rectTmp.left = pages[0].getX(); + canvas.drawRect(AndroidUtilities.rectTmp, backgroundPaint); + + actionBar.drawShadow = attachedToActionBar && top + getListPaddingTop() <= AndroidUtilities.statusBarHeight + currentHeaderHeight; + if (attachedActionBar > 0) { + canvas.save(); + float t = lerp(top + getListPaddingTop() + 1, 0, attachedActionBar); + canvas.translate(0, t); + actionBar.drawBackground(canvas, (top + getListPaddingTop() + 1) - t, 1f, attachedActionBar, true); + canvas.restore(); + } + + canvas.translate(0, -y); + if (!AndroidUtilities.makingGlobalBlurBitmap && (!pages[0].isWeb() || canvas.isHardwareAccelerated())) { + super.dispatchDraw(canvas); + } + canvas.translate(0, y); + + if (attachedActionBar < 1f) { + final float handleAlpha = 1f - attachedActionBar; + + final boolean dark = AndroidUtilities.computePerceivedBrightness(getBackgroundColor()) < .721f; + handlePaint.setColor(ColorUtils.blendARGB(Theme.multAlpha(dark ? Color.WHITE : Color.BLACK, .15f), Color.BLACK, attachedActionBar)); + handlePaint.setAlpha((int) (handlePaint.getAlpha() * handleAlpha)); + final float cx = getWidth() / 2f, cy = drawnTop + getListPaddingTop() / 2f - attachedActionBar * dp(8); + final float w = lerp(dp(32), dp(48), attachedActionBar); + rect.set(cx - w / 2f, cy - dp(2), cx + w / 2f, cy + dp(2)); + canvas.drawRoundRect(rect, rect.height() / 2f, rect.height() / 2f, handlePaint); + } + + canvas.restore(); + } + + @Override + public void setDrawingFromOverlay(boolean value) { + if (drawingFromOverlay != value) { + drawingFromOverlay = value; + invalidate(); + } + } + + private RectF clipRect = new RectF(); + private Path clipPath2 = new Path(); + + @Override + public RectF getRect() { + clipRect.set(0, (attachedToActionBar ? 0 : getListTop() - getListPaddingTop()) + getEmptyPadding() * Math.max(1f - openProgress, dismissProgress), getWidth(), getHeight()); + return clipRect; + } + + @Override + public float drawInto(Canvas canvas, RectF finalRect, float progress, RectF clipRect, float alpha, boolean opening) { + clipRect.set(getRect()); + AndroidUtilities.lerp(clipRect, finalRect, progress, clipRect); + + final float open = Math.min(openProgress, 1f - dismissProgress) * (1f - progress); + scrimPaint.setColor(Color.BLACK); + scrimPaint.setAlpha((int) (0x60 * open * (1f - backProgress))); + canvas.drawRect(0, 0, getWidth(), getHeight(), scrimPaint); + + final float r = lerp(dp(16), dp(10), progress); + + backgroundPaint.setColor(getThemedColor(Theme.key_windowBackgroundWhite)); + clipPath2.rewind(); + clipPath2.addRoundRect(clipRect, r, r, Path.Direction.CW); + canvas.drawPath(clipPath2, backgroundPaint); + + if (getChildCount() == 1) { + if (attachedToActionBar) { + canvas.save(); + canvas.clipPath(clipPath2); + canvas.translate(0, clipRect.top); + actionBar.draw(canvas); + canvas.restore(); + } + + View child = getChildAt(0); + canvas.save(); + final float s = opening ? 1f : lerp(1f, .99f, progress); + if (Math.abs(s - 1f) > .01f) { + canvas.scale(s, s, clipRect.centerX(), clipRect.centerY()); + } + canvas.clipPath(clipPath2); + if (Math.abs(s - 1f) > .01f) { + canvas.scale(1f / s, 1f / s, clipRect.centerX(), clipRect.centerY()); + } + canvas.translate(0, -getListTop() + clipRect.top + (attachedToActionBar ? actionBar.getMeasuredHeight() : 0) * (1f - progress)); + child.draw(canvas); + canvas.restore(); + } + + return r; + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if (ev.getAction() == MotionEvent.ACTION_DOWN && ev.getY() < (attachedToActionBar ? 0 : getListTop())) { + dismiss(true); + return true; + } + return super.dispatchTouchEvent(ev); + } + + @Override + public boolean onNestedFling(View target, float velocityX, float velocityY, boolean consumed) { + return super.onNestedFling(target, velocityX, velocityY, consumed); + } + + private boolean stoppedAtFling; + + @Override + public boolean onNestedPreFling(View target, float velocityX, float velocityY) { + boolean r = super.onNestedPreFling(target, velocityX, velocityY); + if (halfSize()) { + if (pages[0].isAtTop() && velocityY < -1000) { + dismiss(true); + } else { + animateDismiss(false, true, null); + } + } + stoppedAtFling = true; + return r; + } + + @Override + public void onNestedScroll(View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) { + super.onNestedScroll(target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed); + } + + @Override + public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) { + if (!nestedVerticalScroll) { + nestedVerticalScroll = dy != 0; + } + if (pages[0].isAtTop() && halfSize()) { + consumed[1] = Math.min((int) (getEmptyPadding() * dismissProgress), dy); + dismissProgress = Utilities.clamp(dismissProgress - (float) dy / getEmptyPadding(), 1, 0); + updateTranslation(); + checkFullyVisible(); + } + } + + @Override + public void onNestedScrollAccepted(View child, View target, int axes) { + super.onNestedScrollAccepted(child, target, axes); + } + + @Override + public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) { + stoppedAtFling = false; + return halfSize() && nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL; + } + + @Override + public void onStopNestedScroll(View child) { + nestedVerticalScroll = false; + if (halfSize() && !stoppedAtFling) { + if (dismissProgress > .25f) { + dismiss(true); + } else { + animateDismiss(false, true, null); + } + } + super.onStopNestedScroll(child); + } + } + + private float backProgress; + + public void setBackProgress(float progress) { + backProgress = progress; + windowView.invalidate(); + checkNavColor(); + checkFullyVisible(); + } + + public float getBackProgress() { + return backProgress; + } + + public ValueAnimator animateBackProgressTo(float to) { + ValueAnimator anm = ValueAnimator.ofFloat(backProgress, to); + anm.addUpdateListener(a -> setBackProgress((float) a.getAnimatedValue())); + return anm; + } + + private boolean lastVisible; + @Override + public void setLastVisible(boolean lastVisible) { + this.lastVisible = lastVisible; + pages[0].setLastVisible(lastVisible); + pages[1].setLastVisible(false); + } + + public void updateLastVisible() { + pages[0].setLastVisible(lastVisible); + pages[1].setLastVisible(false); + } + } + + public static class ErrorContainer extends FrameLayout { + + public final LinearLayout layout; + private boolean imageViewSet; + private final BackupImageView imageView; + private final TextView titleView; + private final TextView descriptionView; + private final TextView codeView; + private final ButtonWithCounterView buttonView; + + public ErrorContainer(Context context) { + super(context); + setVisibility(GONE); + + layout = new LinearLayout(context); + layout.setPadding(dp(32), dp(24), dp(32), dp(24)); + layout.setOrientation(LinearLayout.VERTICAL); + layout.setGravity(Gravity.LEFT); + addView(layout, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER)); + + imageView = new BackupImageView(context); + layout.addView(imageView, LayoutHelper.createLinear(100, 100)); + + titleView = new TextView(context); + titleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 19); + titleView.setTypeface(AndroidUtilities.bold()); + titleView.setTextColor(0xFFFFFFFF); + layout.addView(titleView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT, 0, 4, 0, 2)); + + descriptionView = new TextView(context); + descriptionView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15); + descriptionView.setTextColor(0xFFFFFFFF); + descriptionView.setSingleLine(false); + descriptionView.setMaxLines(3); + layout.addView(descriptionView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT, 0, 0, 0, 1)); + + codeView = new TextView(context); + codeView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12); + codeView.setTextColor(0xFFFFFFFF); + codeView.setAlpha(.4f); + layout.addView(codeView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT)); + + buttonView = new ButtonWithCounterView(context, null); + buttonView.setMinWidth(dp(140)); + buttonView.setText(LocaleController.getString(R.string.Refresh), false); + layout.addView(buttonView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, 40, Gravity.LEFT, 0, 12, 0, 0)); + } + + private ValueAnimator darkAnimator; + private boolean dark = true; + public void setDark(boolean dark, boolean animated) { + if (this.dark == dark) return; + this.dark = dark; + if (darkAnimator != null) { + darkAnimator.cancel(); + } + if (animated) { + darkAnimator = ValueAnimator.ofFloat(dark ? 0 : 1, dark ? 1 : 0); + darkAnimator.addUpdateListener(anm -> { + float t = (float) anm.getAnimatedValue(); + titleView.setTextColor(ColorUtils.blendARGB(0xFF000000, 0xFFFFFFFF, t)); + descriptionView.setTextColor(ColorUtils.blendARGB(0xFF000000, 0xFFFFFFFF, t)); + codeView.setTextColor(ColorUtils.blendARGB(0xFF000000, 0xFFFFFFFF, t)); + }); + darkAnimator.start(); + } else { + titleView.setTextColor(!dark ? 0xFF000000 : 0xFFFFFFFF); + descriptionView.setTextColor(!dark ? 0xFF000000 : 0xFFFFFFFF); + codeView.setTextColor(!dark ? 0xFF000000 : 0xFFFFFFFF); + } + } + + public void set(String url, int code, String descrpiption) { + titleView.setText(getString(R.string.WebErrorTitle)); + url = BotWebViewContainer.magic2tonsite(url); + CharSequence cs = AndroidUtilities.replaceTags(url == null || Uri.parse(url) == null || Uri.parse(url).getAuthority() == null ? getString(R.string.WebErrorInfo) : formatString(R.string.WebErrorInfoDomain, Uri.parse(url).getAuthority())); + cs = Emoji.replaceEmoji(cs, descriptionView.getPaint().getFontMetricsInt(), false); + descriptionView.setText(cs); + codeView.setText(descrpiption); + } + + @Override + public void setVisibility(int visibility) { + super.setVisibility(visibility); + if (visibility == VISIBLE && !imageViewSet) { + imageViewSet = true; + MediaDataController.getInstance(UserConfig.selectedAccount).setPlaceholderImage(imageView, AndroidUtilities.STICKERS_PLACEHOLDER_PACK_NAME, "🧐", "100_100"); + } + } + } + + public void destroy() { + for (int i = 0; i < pagesStack.size(); ++i) { + Object obj = pagesStack.get(i); + if (obj instanceof CachedWeb) { + if (pages[0] != null && pages[0].web == obj) { + ((CachedWeb) obj).detach(pages[0]); + } + if (pages[1] != null && pages[1].web == obj) { + ((CachedWeb) obj).detach(pages[1]); + } + ((CachedWeb) obj).destroy(); + } + } + pagesStack.clear(); + destroyArticleViewer(); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/AvatarSpan.java b/TMessagesProj/src/main/java/org/telegram/ui/AvatarSpan.java index bf7b795b320..3e36da1e9c3 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/AvatarSpan.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/AvatarSpan.java @@ -5,6 +5,7 @@ import android.graphics.Canvas; import android.graphics.Paint; +import android.graphics.drawable.Drawable; import android.text.Spannable; import android.text.style.ReplacementSpan; import android.util.Log; @@ -36,6 +37,7 @@ public AvatarSpan(View parent, int currentAccount) { public AvatarSpan(View parent, int currentAccount, float sz) { this.currentAccount = currentAccount; this.imageReceiver = new ImageReceiver(parent); + imageReceiver.setInvalidateAll(true); this.avatarDrawable = new AvatarDrawable(); setSize(sz); @@ -112,6 +114,10 @@ public void setName(String name) { imageReceiver.setForUserOrChat(null, avatarDrawable); } + public void setImageDrawable(Drawable drawable) { + imageReceiver.setImageBitmap(drawable); + } + @Override public int getSize(@NonNull Paint paint, CharSequence text, int start, int end, @Nullable Paint.FontMetricsInt fm) { return dp(sz); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/BotHelpCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/BotHelpCell.java index 314853cf3ac..cc636f15e70 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/BotHelpCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/BotHelpCell.java @@ -41,6 +41,7 @@ import org.telegram.messenger.SharedConfig; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Components.LinkPath; import org.telegram.ui.Components.LinkSpanDrawable; @@ -109,7 +110,7 @@ public void setText(boolean bot, String text) { setText(bot, text, null, null); } - public void setText(boolean bot, String text, TLObject imageOrAnimation, TLRPC.BotInfo botInfo) { + public void setText(boolean bot, String text, TLObject imageOrAnimation, TL_bots.BotInfo botInfo) { boolean photoVisible = imageOrAnimation != null; boolean textVisible = !TextUtils.isEmpty(text); if ((text == null || text.length() == 0) && !photoVisible) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatActionCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatActionCell.java index b4d2aaa84f3..443dc170dba 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatActionCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatActionCell.java @@ -9,6 +9,9 @@ package org.telegram.ui.Cells; import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.LocaleController.formatPluralStringComma; +import static org.telegram.messenger.LocaleController.formatString; +import static org.telegram.messenger.LocaleController.getString; import android.annotation.SuppressLint; import android.content.Context; @@ -68,6 +71,7 @@ import org.telegram.messenger.SharedConfig; import org.telegram.messenger.SvgHelper; import org.telegram.messenger.UserConfig; +import org.telegram.messenger.UserObject; import org.telegram.messenger.Utilities; import org.telegram.messenger.browser.Browser; import org.telegram.tgnet.TLObject; @@ -97,6 +101,7 @@ import org.telegram.ui.LaunchActivity; import org.telegram.ui.PhotoViewer; import org.telegram.ui.ProfileActivity; +import org.telegram.ui.Stars.StarsIntroActivity; import org.telegram.ui.Stories.StoriesUtilities; import org.telegram.ui.Stories.UploadingDotsSpannable; import org.telegram.ui.Stories.recorder.HintView2; @@ -395,9 +400,9 @@ public void setCustomDate(int date, boolean scheduled, boolean inLayout) { CharSequence newText; if (scheduled) { if (date == 0x7ffffffe) { - newText = LocaleController.getString("MessageScheduledUntilOnline", R.string.MessageScheduledUntilOnline); + newText = getString("MessageScheduledUntilOnline", R.string.MessageScheduledUntilOnline); } else { - newText = LocaleController.formatString("MessageScheduledOn", R.string.MessageScheduledOn, LocaleController.formatDateChat(date)); + newText = formatString("MessageScheduledOn", R.string.MessageScheduledOn, LocaleController.formatDateChat(date)); } } else { newText = LocaleController.formatDateChat(date); @@ -573,7 +578,7 @@ public void setMessageObject(MessageObject messageObject, boolean force) { } else { radialProgress.setIcon(MediaActionDrawable.ICON_CANCEL, !messageIdChanged, !messageIdChanged); } - } else if (messageObject.type == MessageObject.TYPE_GIFT_PREMIUM || messageObject.type == MessageObject.TYPE_GIFT_PREMIUM_CHANNEL) { + } else if (messageObject.type == MessageObject.TYPE_GIFT_STARS || messageObject.type == MessageObject.TYPE_GIFT_PREMIUM || messageObject.type == MessageObject.TYPE_GIFT_PREMIUM_CHANNEL) { imageReceiver.setRoundRadius(0); if (USE_PREMIUM_GIFT_LOCAL_STICKER) { @@ -595,37 +600,62 @@ public void setMessageObject(MessageObject messageObject, boolean force) { set = MediaDataController.getInstance(currentAccount).getStickerSetByEmojiOrName(packName); } if (set != null) { - int months = messageObject.messageOwner.action.months; + int months = messageObject.messageOwner.action.months; String monthsEmoticon; - if (USE_PREMIUM_GIFT_MONTHS_AS_EMOJI_NUMBERS) { - StringBuilder monthsEmoticonBuilder = new StringBuilder(); - while (months > 0) { - monthsEmoticonBuilder.insert(0, (months % 10) + "\u20E3"); - months /= 10; + if (messageObject.type == MessageObject.TYPE_GIFT_STARS) { + final long stars = ((TLRPC.TL_messageActionGiftStars) messageObject.messageOwner.action).stars; + String emoji; + if (stars <= 1000) { + emoji = "2⃣"; + } else if (stars < 2500) { + emoji = "3⃣"; + } else { + emoji = "4⃣"; } - monthsEmoticon = monthsEmoticonBuilder.toString(); - } else { - monthsEmoticon = monthsToEmoticon.get(months); - } - for (TLRPC.TL_stickerPack pack : set.packs) { - if (Objects.equals(pack.emoticon, monthsEmoticon)) { - for (long id : pack.documents) { - for (TLRPC.Document doc : set.documents) { - if (doc.id == id) { - document = doc; + for (int i = 0; i < set.packs.size(); ++i) { + TLRPC.TL_stickerPack pack = set.packs.get(i); + if (TextUtils.equals(pack.emoticon, emoji) && !pack.documents.isEmpty()) { + long documentId = pack.documents.get(0); + for (int j = 0; j < set.documents.size(); ++j) { + TLRPC.Document d = set.documents.get(j); + if (d != null && d.id == documentId) { + document = d; break; } } - if (document != null) { - break; - } + break; } } - if (document != null) { - break; + } else { + if (USE_PREMIUM_GIFT_MONTHS_AS_EMOJI_NUMBERS) { + StringBuilder monthsEmoticonBuilder = new StringBuilder(); + while (months > 0) { + monthsEmoticonBuilder.insert(0, (months % 10) + "\u20E3"); + months /= 10; + } + monthsEmoticon = monthsEmoticonBuilder.toString(); + } else { + monthsEmoticon = monthsToEmoticon.get(months); + } + for (TLRPC.TL_stickerPack pack : set.packs) { + if (Objects.equals(pack.emoticon, monthsEmoticon)) { + for (long id : pack.documents) { + for (TLRPC.Document doc : set.documents) { + if (doc.id == id) { + document = doc; + break; + } + } + if (document != null) { + break; + } + } + } + if (document != null) { + break; + } } } - if (document == null && !set.documents.isEmpty()) { document = set.documents.get(0); } @@ -841,10 +871,14 @@ public boolean onTouchEvent(MotionEvent event) { bounce.setPressed(false); if (delegate != null) { if (messageObject.type == MessageObject.TYPE_GIFT_PREMIUM_CHANNEL) { + playSoundEffect(SoundEffectConstants.CLICK); openPremiumGiftChannel(); } else if (messageObject.type == MessageObject.TYPE_GIFT_PREMIUM) { playSoundEffect(SoundEffectConstants.CLICK); openPremiumGiftPreview(); + } else if (messageObject.type == MessageObject.TYPE_GIFT_STARS) { + playSoundEffect(SoundEffectConstants.CLICK); + openStarsGiftTransaction(); } else { ImageUpdater imageUpdater = MessagesController.getInstance(currentAccount).photoSuggestion.get(messageObject.messageOwner.local_id); if (imageUpdater == null) { @@ -877,6 +911,8 @@ public boolean onTouchEvent(MotionEvent event) { openPremiumGiftChannel(); } else if (messageObject.type == MessageObject.TYPE_GIFT_PREMIUM) { openPremiumGiftPreview(); + } else if (messageObject.type == MessageObject.TYPE_GIFT_STARS) { + openStarsGiftTransaction(); } else if (delegate != null) { boolean consumed = false; if (messageObject.type == MessageObject.TYPE_SUGGEST_PHOTO) { @@ -959,9 +995,9 @@ private void openPremiumGiftChannel() { } private boolean isSelfGiftCode() { - if (currentMessageObject != null && currentMessageObject.messageOwner.action instanceof TLRPC.TL_messageActionGiftCode) { + if (currentMessageObject != null && (currentMessageObject.messageOwner.action instanceof TLRPC.TL_messageActionGiftCode || currentMessageObject.messageOwner.action instanceof TLRPC.TL_messageActionGiftStars)) { if (currentMessageObject.messageOwner.from_id instanceof TLRPC.TL_peerUser) { - return MessagesController.getInstance(currentAccount).getUser(currentMessageObject.messageOwner.from_id.user_id).self; + return UserObject.isUserSelf(MessagesController.getInstance(currentAccount).getUser(currentMessageObject.messageOwner.from_id.user_id)); } } return false; @@ -988,6 +1024,12 @@ private void openPremiumGiftPreview() { } } + private void openStarsGiftTransaction() { + if (currentMessageObject == null || currentMessageObject.messageOwner == null) return; + if (!(currentMessageObject.messageOwner.action instanceof TLRPC.TL_messageActionGiftStars)) return; + StarsIntroActivity.showTransactionSheet(getContext(), currentAccount, currentMessageObject.messageOwner.date, currentMessageObject.messageOwner.from_id, currentMessageObject.messageOwner.peer_id, (TLRPC.TL_messageActionGiftStars) currentMessageObject.messageOwner.action, avatarStoryParams.resourcesProvider); + } + private void openLink(CharacterStyle link) { if (delegate != null && link instanceof URLSpan) { String url = ((URLSpan) link).getURL(); @@ -1102,7 +1144,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } if (isButtonLayout(messageObject)) { giftRectSize = Math.min((int) (AndroidUtilities.isTablet() ? AndroidUtilities.getMinTabletSide() * 0.6f : AndroidUtilities.displaySize.x * 0.62f - dp(34)), AndroidUtilities.displaySize.y - ActionBar.getCurrentActionBarHeight() - AndroidUtilities.statusBarHeight - dp(64)); - if (!AndroidUtilities.isTablet() && messageObject.type == MessageObject.TYPE_GIFT_PREMIUM) { + if (!AndroidUtilities.isTablet() && (messageObject.type == MessageObject.TYPE_GIFT_PREMIUM || messageObject.type == MessageObject.TYPE_GIFT_STARS)) { giftRectSize = (int) (giftRectSize * 1.2f); } stickerSize = giftRectSize - dp(106); @@ -1146,7 +1188,9 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { giftPremiumAdditionalHeight -= dp(30); } - if (giftPremiumSubtitleLayout.getLineCount() > 2) { + if (currentMessageObject.type == MessageObject.TYPE_GIFT_STARS) { + giftPremiumAdditionalHeight += giftPremiumSubtitleLayout.getHeight() - dp(20); + } else if (giftPremiumSubtitleLayout.getLineCount() > 2) { giftPremiumAdditionalHeight += (giftPremiumSubtitleLayout.getLineBottom(0) - giftPremiumSubtitleLayout.getLineTop(0)) * giftPremiumSubtitleLayout.getLineCount() - 2; } @@ -1225,14 +1269,14 @@ private void buildLayout() { if (text == null) { if (messageObject.messageOwner != null && messageObject.messageOwner.media != null && messageObject.messageOwner.media.ttl_seconds != 0) { if (messageObject.messageOwner.media.photo != null) { - text = LocaleController.getString(R.string.AttachPhotoExpired); + text = getString(R.string.AttachPhotoExpired); } else if (messageObject.messageOwner.media.document instanceof TLRPC.TL_documentEmpty || messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaDocument && messageObject.messageOwner.media.document == null) { if (messageObject.messageOwner.media.voice) { - text = LocaleController.getString(R.string.AttachVoiceExpired); + text = getString(R.string.AttachVoiceExpired); } else if (messageObject.messageOwner.media.round) { - text = LocaleController.getString(R.string.AttachRoundExpired); + text = getString(R.string.AttachRoundExpired); } else { - text = LocaleController.getString(R.string.AttachVideoExpired); + text = getString(R.string.AttachVideoExpired); } } else { text = AnimatedEmojiSpan.cloneSpans(messageObject.messageText); @@ -1250,10 +1294,19 @@ private void buildLayout() { imageReceiver.setImageCoords((previousWidth - AndroidUtilities.roundMessageSize) / 2f, textHeight + dp(19), AndroidUtilities.roundMessageSize, AndroidUtilities.roundMessageSize); } else if (messageObject.type == MessageObject.TYPE_GIFT_PREMIUM_CHANNEL) { createGiftPremiumChannelLayouts(); + } else if (messageObject.type == MessageObject.TYPE_GIFT_STARS) { + final TLRPC.TL_messageActionGiftStars action = (TLRPC.TL_messageActionGiftStars) messageObject.messageOwner.action; + final TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(currentMessageObject.getDialogId()); + createGiftPremiumLayouts( + formatPluralStringComma("ActionGiftStarsTitle", (int) action.stars), + AndroidUtilities.replaceTags(currentMessageObject.isOutOwner() ? formatString(R.string.ActionGiftStarsSubtitle, UserObject.getForcedFirstName(user)) : getString(R.string.ActionGiftStarsSubtitleYou)), + getString(R.string.ActionGiftStarsView), + giftRectSize, + true + ); } else if (messageObject.type == MessageObject.TYPE_GIFT_PREMIUM) { - String actionName = isGiftCode() && !isSelfGiftCode() ? LocaleController.getString("GiftPremiumUseGiftBtn", R.string.GiftPremiumUseGiftBtn) : - LocaleController.getString("ActionGiftPremiumView", R.string.ActionGiftPremiumView); - createGiftPremiumLayouts(LocaleController.getString(R.string.ActionGiftPremiumTitle), LocaleController.formatString(R.string.ActionGiftPremiumSubtitle, LocaleController.formatPluralString("Months", messageObject.messageOwner.action.months)), actionName, giftRectSize, true); + String actionName = getString(isGiftCode() && !isSelfGiftCode() ? R.string.GiftPremiumUseGiftBtn : R.string.ActionGiftPremiumView); + createGiftPremiumLayouts(getString(R.string.ActionGiftPremiumTitle), formatString(R.string.ActionGiftPremiumSubtitle, LocaleController.formatPluralString("Months", messageObject.messageOwner.action.months)), actionName, giftRectSize, true); } else if (messageObject.type == MessageObject.TYPE_SUGGEST_PHOTO) { TLRPC.TL_messageActionSuggestProfilePhoto actionSuggestProfilePhoto = (TLRPC.TL_messageActionSuggestProfilePhoto) messageObject.messageOwner.action; String description; @@ -1262,22 +1315,22 @@ private void buildLayout() { if (user.id == UserConfig.getInstance(currentAccount).clientUserId) { TLRPC.User user2 = MessagesController.getInstance(currentAccount).getUser(messageObject.getDialogId()); if (isVideo) { - description = LocaleController.formatString(R.string.ActionSuggestVideoFromYouDescription, user2.first_name); + description = formatString(R.string.ActionSuggestVideoFromYouDescription, user2.first_name); } else { - description = LocaleController.formatString(R.string.ActionSuggestPhotoFromYouDescription, user2.first_name); + description = formatString(R.string.ActionSuggestPhotoFromYouDescription, user2.first_name); } } else { if (isVideo) { - description = LocaleController.formatString(R.string.ActionSuggestVideoToYouDescription, user.first_name); + description = formatString(R.string.ActionSuggestVideoToYouDescription, user.first_name); } else { - description = LocaleController.formatString(R.string.ActionSuggestPhotoToYouDescription, user.first_name); + description = formatString(R.string.ActionSuggestPhotoToYouDescription, user.first_name); } } String action; if (actionSuggestProfilePhoto.video || (actionSuggestProfilePhoto.photo.video_sizes != null && !actionSuggestProfilePhoto.photo.video_sizes.isEmpty())) { - action = LocaleController.getString(R.string.ViewVideoAction); + action = getString(R.string.ViewVideoAction); } else { - action = LocaleController.getString(R.string.ViewPhotoAction); + action = getString(R.string.ViewPhotoAction); } createGiftPremiumLayouts(null, description, action, giftRectSize, true); textLayout = null; @@ -1292,13 +1345,13 @@ private void buildLayout() { description = messageObject.messageText; } else if (!messageObject.isOutOwner() && messageObject.isWallpaperForBoth() && messageObject.isCurrentWallpaper()) { description = messageObject.messageText; - action = LocaleController.getString(R.string.RemoveWallpaperAction); + action = getString(R.string.RemoveWallpaperAction); actionClickableAsImage = false; } else if (user != null && user.id == UserConfig.getInstance(currentAccount).clientUserId) { description = messageObject.messageText; } else { description = messageObject.messageText; - action = LocaleController.getString(R.string.ViewWallpaperAction); + action = getString(R.string.ViewWallpaperAction); } createGiftPremiumLayouts(null, description, action, giftRectSize, actionClickableAsImage); textLayout = null; @@ -1311,11 +1364,11 @@ private void buildLayout() { if (user.self) { TLRPC.User user2 = MessagesController.getInstance(currentAccount).getUser(messageObject.getDialogId()); - description = AndroidUtilities.replaceTags(LocaleController.formatString("StoryYouMentionedTitle", R.string.StoryYouMentionedTitle, user2.first_name)); + description = AndroidUtilities.replaceTags(formatString("StoryYouMentionedTitle", R.string.StoryYouMentionedTitle, user2.first_name)); } else { - description = AndroidUtilities.replaceTags(LocaleController.formatString("StoryMentionedTitle", R.string.StoryMentionedTitle, user.first_name)); + description = AndroidUtilities.replaceTags(formatString("StoryMentionedTitle", R.string.StoryMentionedTitle, user.first_name)); } - action = LocaleController.getString(R.string.StoryMentionedAction); + action = getString(R.string.StoryMentionedAction); createGiftPremiumLayouts(null, description, action, giftRectSize, true); textLayout = null; @@ -1336,27 +1389,27 @@ private void createGiftPremiumChannelLayouts() { String from = chat == null ? null : chat.title; boolean isPrize = gifCodeAction.via_giveaway; CharSequence title = gifCodeAction.unclaimed ? - LocaleController.getString("BoostingUnclaimedPrize", R.string.BoostingUnclaimedPrize) - : LocaleController.getString("BoostingCongratulations", R.string.BoostingCongratulations); + getString("BoostingUnclaimedPrize", R.string.BoostingUnclaimedPrize) + : getString("BoostingCongratulations", R.string.BoostingCongratulations); SpannableStringBuilder subtitle; CharSequence monthsStr = months == 12 ? LocaleController.formatPluralString("BoldYears", 1) : LocaleController.formatPluralString("BoldMonths", months); if (isPrize) { if (gifCodeAction.unclaimed) { - subtitle = new SpannableStringBuilder(AndroidUtilities.replaceTags(LocaleController.formatString("BoostingYouHaveUnclaimedPrize", R.string.BoostingYouHaveUnclaimedPrize, from))); + subtitle = new SpannableStringBuilder(AndroidUtilities.replaceTags(formatString("BoostingYouHaveUnclaimedPrize", R.string.BoostingYouHaveUnclaimedPrize, from))); subtitle.append("\n\n"); - subtitle.append(AndroidUtilities.replaceTags(LocaleController.formatString("BoostingUnclaimedPrizeDuration", R.string.BoostingUnclaimedPrizeDuration, monthsStr))); + subtitle.append(AndroidUtilities.replaceTags(formatString("BoostingUnclaimedPrizeDuration", R.string.BoostingUnclaimedPrizeDuration, monthsStr))); } else { - subtitle = new SpannableStringBuilder(AndroidUtilities.replaceTags(LocaleController.formatString("BoostingReceivedPrizeFrom", R.string.BoostingReceivedPrizeFrom, from))); + subtitle = new SpannableStringBuilder(AndroidUtilities.replaceTags(formatString("BoostingReceivedPrizeFrom", R.string.BoostingReceivedPrizeFrom, from))); subtitle.append("\n\n"); - subtitle.append(AndroidUtilities.replaceTags(LocaleController.formatString("BoostingReceivedPrizeDuration", R.string.BoostingReceivedPrizeDuration, monthsStr))); + subtitle.append(AndroidUtilities.replaceTags(formatString("BoostingReceivedPrizeDuration", R.string.BoostingReceivedPrizeDuration, monthsStr))); } } else { - subtitle = new SpannableStringBuilder(AndroidUtilities.replaceTags(from == null ? LocaleController.getString("BoostingReceivedGiftNoName", R.string.BoostingReceivedGiftNoName) : LocaleController.formatString("BoostingReceivedGiftFrom", R.string.BoostingReceivedGiftFrom, from))); + subtitle = new SpannableStringBuilder(AndroidUtilities.replaceTags(from == null ? getString("BoostingReceivedGiftNoName", R.string.BoostingReceivedGiftNoName) : formatString("BoostingReceivedGiftFrom", R.string.BoostingReceivedGiftFrom, from))); subtitle.append("\n\n"); - subtitle.append(AndroidUtilities.replaceTags(LocaleController.formatString("BoostingReceivedGiftDuration", R.string.BoostingReceivedGiftDuration, monthsStr))); + subtitle.append(AndroidUtilities.replaceTags(formatString("BoostingReceivedGiftDuration", R.string.BoostingReceivedGiftDuration, monthsStr))); } - String btnText = LocaleController.getString("BoostingReceivedGiftOpenBtn", R.string.BoostingReceivedGiftOpenBtn); + String btnText = getString("BoostingReceivedGiftOpenBtn", R.string.BoostingReceivedGiftOpenBtn); SpannableStringBuilder titleBuilder = SpannableStringBuilder.valueOf(title); titleBuilder.setSpan(new TypefaceSpan(AndroidUtilities.bold()), 0, titleBuilder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); @@ -1374,15 +1427,22 @@ private void createGiftPremiumChannelLayouts() { private void createGiftPremiumLayouts(CharSequence title, CharSequence subtitle, CharSequence button, int width, boolean buttonClickableAsImage) { width -= dp(16); + if (currentMessageObject != null && currentMessageObject.type == MessageObject.TYPE_GIFT_STARS) { + width -= dp(16); + } if (title != null) { - giftTitlePaint.setTextSize(dp(16)); + if (currentMessageObject != null && currentMessageObject.type == MessageObject.TYPE_GIFT_STARS) { + giftTitlePaint.setTextSize(dp(14)); + } else { + giftTitlePaint.setTextSize(dp(16)); + } SpannableStringBuilder titleBuilder = SpannableStringBuilder.valueOf(title); titleBuilder.setSpan(new TypefaceSpan(AndroidUtilities.bold()), 0, titleBuilder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); giftPremiumTitleLayout = new StaticLayout(titleBuilder, giftTitlePaint, width, Layout.Alignment.ALIGN_CENTER, 1.0f, 0.0f, false); } else { giftPremiumTitleLayout = null; } - if (currentMessageObject != null && isNewStyleButtonLayout()) { + if (currentMessageObject != null && (isNewStyleButtonLayout() || currentMessageObject.type == MessageObject.TYPE_GIFT_STARS)) { giftSubtitlePaint.setTextSize(dp(13)); } else { giftSubtitlePaint.setTextSize(dp(15)); @@ -1451,6 +1511,9 @@ protected void onDraw(Canvas canvas) { } else if (messageObject.type == MessageObject.TYPE_GIFT_PREMIUM_CHANNEL) { imageSize = (int) (stickerSize * (AndroidUtilities.isTablet() ? 1.0f : 1.2f)); imageReceiver.setImageCoords((previousWidth - imageSize) / 2f, textY + textHeight + giftRectSize * 0.075f - dp(22), imageSize, imageSize); + } else if (messageObject.type == MessageObject.TYPE_GIFT_STARS) { + imageSize = (int) (stickerSize * 1.1f); + imageReceiver.setImageCoords((previousWidth - imageSize) / 2f, textY + textHeight + giftRectSize * 0.075f - dp(22), imageSize, imageSize); } else { imageSize = (int) (stickerSize * 1f); imageReceiver.setImageCoords((previousWidth - imageSize) / 2f, textY + textHeight + giftRectSize * 0.075f - dp(4), imageSize, imageSize); @@ -1560,6 +1623,9 @@ protected void onDraw(Canvas canvas) { if (messageObject.type == MessageObject.TYPE_SUGGEST_PHOTO) { y += dp(16); } + if (messageObject.type == MessageObject.TYPE_GIFT_STARS) { + y -= dp(3.66f); + } if (giftPremiumButtonLayout == null) { y -= dp(24); } @@ -1567,7 +1633,10 @@ protected void onDraw(Canvas canvas) { canvas.translate(x, y); if (giftPremiumTitleLayout != null) { + canvas.save(); + canvas.translate((giftRectSize - dp(16) - giftPremiumTitleLayout.getWidth()) / 2f, 0); giftPremiumTitleLayout.draw(canvas); + canvas.restore(); y += giftPremiumTitleLayout.getHeight(); y += dp(messageObject.type == MessageObject.TYPE_GIFT_PREMIUM_CHANNEL ? 6 : 0); } else { @@ -1583,7 +1652,7 @@ protected void onDraw(Canvas canvas) { if (settingWallpaperLayout == null) { settingWallpaperPaint = new TextPaint(); settingWallpaperPaint.setTextSize(dp(13)); - SpannableStringBuilder cs = new SpannableStringBuilder(LocaleController.getString(R.string.ActionSettingWallpaper)); + SpannableStringBuilder cs = new SpannableStringBuilder(getString(R.string.ActionSettingWallpaper)); int index = cs.toString().indexOf("..."), len = 3; if (index < 0) { index = cs.toString().indexOf("…"); @@ -1616,7 +1685,7 @@ protected void onDraw(Canvas canvas) { float s = 0.8f + 0.2f * p; canvas.save(); canvas.scale(s, s, giftPremiumSubtitleWidth / 2f, giftPremiumSubtitleLayout.getHeight() / 2f); - canvas.translate((giftPremiumSubtitleWidth -giftPremiumSubtitleLayout.getWidth()) / 2f, 0); + canvas.translate((giftPremiumSubtitleWidth - giftPremiumSubtitleLayout.getWidth()) / 2f, 0); SpoilerEffect.layoutDrawMaybe(giftPremiumSubtitleLayout, canvas); canvas.restore(); @@ -1652,7 +1721,7 @@ protected void onDraw(Canvas canvas) { } } else if (giftPremiumSubtitleLayout != null) { canvas.save(); - canvas.translate((giftPremiumSubtitleWidth - giftPremiumSubtitleLayout.getWidth()) / 2f, 0); + canvas.translate((giftRectSize - dp(16) - giftPremiumSubtitleLayout.getWidth()) / 2f, 0); SpoilerEffect.layoutDrawMaybe(giftPremiumSubtitleLayout, canvas); canvas.restore(); } @@ -1726,6 +1795,7 @@ protected void onDraw(Canvas canvas) { float s = 1f - progressToProgress; canvas.scale(s, s, giftButtonRect.centerX(), giftButtonRect.centerY()); canvas.translate(x, giftButtonRect.top + dp(8)); + canvas.translate((giftRectSize - dp(16) - giftPremiumButtonLayout.getWidth()) / 2f, 0); giftPremiumButtonLayout.draw(canvas); canvas.restore(); } @@ -2134,7 +2204,7 @@ public void drawOutboundsContent(Canvas canvas) { } private boolean isButtonLayout(MessageObject messageObject) { - return messageObject != null && (messageObject.type == MessageObject.TYPE_GIFT_PREMIUM || messageObject.type == MessageObject.TYPE_GIFT_PREMIUM_CHANNEL || isNewStyleButtonLayout()); + return messageObject != null && (messageObject.type == MessageObject.TYPE_GIFT_STARS || messageObject.type == MessageObject.TYPE_GIFT_PREMIUM || messageObject.type == MessageObject.TYPE_GIFT_PREMIUM_CHANNEL || isNewStyleButtonLayout()); } private boolean isGiftChannel(MessageObject messageObject) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java index 207974c1c55..fb1fed5187a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java @@ -142,6 +142,7 @@ import org.telegram.ui.Components.ButtonBounce; import org.telegram.ui.Components.CheckBoxBase; import org.telegram.ui.Components.ClipRoundedDrawable; +import org.telegram.ui.Components.ColoredImageSpan; import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.EmptyStubSpan; import org.telegram.ui.Components.FloatSeekBarAccessibilityDelegate; @@ -298,8 +299,21 @@ public void setAvatar(MessageObject messageObject) { } else { currentPhoto = null; } - avatarDrawable.setInfo(currentAccount, currentChat); - avatarImage.setForUserOrChat(currentChat, avatarDrawable); + if (currentChat.signature_profiles) { + long did = DialogObject.getPeerDialogId(messageObject.messageOwner.from_id); + if (did >= 0) { + TLRPC.User user = MessagesController.getInstance(messageObject.currentAccount).getUser(did); + avatarDrawable.setInfo(currentAccount, user); + avatarImage.setForUserOrChat(user, avatarDrawable); + } else { + TLRPC.Chat chat = MessagesController.getInstance(messageObject.currentAccount).getChat(-did); + avatarDrawable.setInfo(currentAccount, chat); + avatarImage.setForUserOrChat(chat, avatarDrawable); + } + } else { + avatarDrawable.setInfo(currentAccount, currentChat); + avatarImage.setForUserOrChat(currentChat, avatarDrawable); + } } else if (messageObject.isSponsored()) { if (messageObject.sponsoredPhoto != null) { avatarImage.setImage(ImageLocation.getForPhoto(FileLoader.getClosestPhotoSizeWithSize(messageObject.sponsoredPhoto.sizes, AndroidUtilities.dp(50), false, null, true), messageObject.sponsoredPhoto), "50_50", avatarDrawable, null, null, 0); @@ -561,7 +575,7 @@ default void didPressBotButton(ChatMessageCell cell, TLRPC.KeyboardButton button default void didLongPressBotButton(ChatMessageCell cell, TLRPC.KeyboardButton button) { } - default void didPressReaction(ChatMessageCell cell, TLRPC.ReactionCount reaction, boolean longpress) { + default void didPressReaction(ChatMessageCell cell, TLRPC.ReactionCount reaction, boolean longpress, float x, float y) { } default void didPressVoteButtons(ChatMessageCell cell, ArrayList<TLRPC.PollAnswer> buttons, int showCount, int x, int y) { @@ -685,6 +699,10 @@ default void didPressAboutRevenueSharingAds() { } + default void didPressRevealSensitiveContent(ChatMessageCell cell) { + + } + default void didPressEffect(ChatMessageCell cell) { } @@ -799,6 +817,7 @@ public static class PollButton { public static final int INSTANT_BUTTON_TYPE_CONTACT_VIEW = 5; public static final int INSTANT_BUTTON_TYPE_CONTACT_SEND_MESSAGE = 30; public static final int INSTANT_BUTTON_TYPE_CONTACT_ADD = 31; + public static final int INSTANT_BUTTON_TYPE_PROFILE = 32; public static final int INSTANT_BUTTON_TYPE_STICKER_SET = 23; public static final int INSTANT_BUTTON_TYPE_EMOJI_SET = 24; @@ -1052,6 +1071,8 @@ public boolean isCellAttachedToWindow() { private int infoX; private int infoWidth; + private Text sensitiveText, sensitiveTextShort; + private String currentUrl; private WebFile currentWebFile; private WebFile lastWebFile; @@ -1349,6 +1370,7 @@ class LoadingDrawableLocation { private MessageTopicButton topicButton; private int drawSideButton; + private boolean sideButtonVisible; private int drawSideButton2; private boolean sideButtonPressed; private int pressedSideButton; @@ -2511,7 +2533,7 @@ private boolean checkLinkPreviewMotionEvent(MotionEvent event) { videoButtonPressed = 1; invalidate(); return true; - } else if (drawPhotoImage && drawImageButton && buttonState != -1 && (!checkOnlyButtonPressed && photoImage.isInsideImage(x, y) || x >= buttonX && x <= buttonX + AndroidUtilities.dp(48) && y >= buttonY && y <= buttonY + AndroidUtilities.dp(48) && radialProgress.getIcon() != MediaActionDrawable.ICON_NONE)) { + } else if (drawPhotoImage && currentMessageObject.sponsoredMedia != null && photoImage.isInsideImage(x, y) || drawPhotoImage && drawImageButton && buttonState != -1 && (!checkOnlyButtonPressed && photoImage.isInsideImage(x, y) || x >= buttonX && x <= buttonX + AndroidUtilities.dp(48) && y >= buttonY && y <= buttonY + AndroidUtilities.dp(48) && radialProgress.getIcon() != MediaActionDrawable.ICON_NONE)) { buttonPressed = 1; invalidate(); return true; @@ -2598,7 +2620,7 @@ private boolean checkLinkPreviewMotionEvent(MotionEvent event) { } else if (buttonPressed != 0) { buttonPressed = 0; playSoundEffect(SoundEffectConstants.CLICK); - if (drawVideoImageButton) { + if (drawVideoImageButton || currentMessageObject.sponsoredMedia != null) { didClickedImage(); } else { didPressButton(true, false); @@ -4065,6 +4087,7 @@ public boolean onTouchEvent(MotionEvent event) { forwardBotPressed = true; result = true; } else if ( + sideButtonVisible && drawSideButton != 0 && x >= sideStartX - dp(24) && x <= sideStartX + dp(40) && y >= sideStartY - dp(24) && y <= sideStartY + dp(38 + (drawSideButton == 3 && commentLayout != null ? 18 : 0) + (drawSideButton2 == SIDE_BUTTON_SPONSORED_MORE ? 38 : 0)) @@ -4316,6 +4339,7 @@ public boolean onTouchEvent(MotionEvent event) { pressedSideButton = 0; } else if (event.getAction() == MotionEvent.ACTION_MOVE) { if (!( + sideButtonVisible && x >= sideStartX - dp(24) && x <= sideStartX + dp(40) && y >= sideStartY - dp(24) && y <= sideStartY + dp(38 + (drawSideButton == 3 && commentLayout != null ? 18 : 0) + (drawSideButton2 == SIDE_BUTTON_SPONSORED_MORE ? 38 : 0)) )) { @@ -4346,10 +4370,10 @@ private boolean checkReactionsTouchEvent(MotionEvent event) { (position.flags & MessageObject.POSITION_FLAG_BOTTOM) != 0 && (position.flags & MessageObject.POSITION_FLAG_LEFT) != 0) { if (cell == this) { - return reactionsLayoutInBubble.chekTouchEvent(event); + return reactionsLayoutInBubble.checkTouchEvent(event); } else { event.offsetLocation(this.getLeft() - cell.getLeft(), this.getTop() - cell.getTop()); - boolean result = cell.reactionsLayoutInBubble.chekTouchEvent(event); + boolean result = cell.reactionsLayoutInBubble.checkTouchEvent(event); event.offsetLocation(-(this.getLeft() - cell.getLeft()), -(this.getTop() - cell.getTop())); return result; } @@ -4358,7 +4382,7 @@ private boolean checkReactionsTouchEvent(MotionEvent event) { } return false; } - return reactionsLayoutInBubble.chekTouchEvent(event); + return reactionsLayoutInBubble.checkTouchEvent(event); } @@ -4796,6 +4820,10 @@ public static StaticLayout generateStaticLayout(CharSequence text, TextPaint pai private void didClickedImage() { if (currentMessageObject.hasMediaSpoilers() && !currentMessageObject.needDrawBluredPreview() && !currentMessageObject.isMediaSpoilersRevealed) { + if (delegate != null && currentMessageObject.isSensitive()) { + delegate.didPressRevealSensitiveContent(this); + return; + } startRevealMedia(lastTouchX, lastTouchY); return; } @@ -4861,6 +4889,10 @@ private void didClickedImage() { if (buttonState == -1) { delegate.didPressImage(this, lastTouchX, lastTouchY); } + } else if (currentMessageObject.sponsoredMedia != null) { + if (delegate != null) { + delegate.didPressImage(this, lastTouchX, lastTouchY); + } } else if (documentAttachType == DOCUMENT_ATTACH_TYPE_GIF) { if (buttonState == -1) { TLRPC.WebPage webPage = MessageObject.getMedia(currentMessageObject.messageOwner).webpage; @@ -6057,8 +6089,19 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe drawInstantView = true; drawInstantViewType = 1; } else if ("telegram_user".equals(webpageType)) { + boolean isProfile = false; + if (webpage != null && webpage.url != null) { + Uri data = Uri.parse(webpage.url); + if (data != null && data.getBooleanQueryParameter("profile", false)) { + isProfile = true; + } + } drawInstantView = true; - drawInstantViewType = 13; + if (isProfile) { + drawInstantViewType = INSTANT_BUTTON_TYPE_PROFILE; + } else { + drawInstantViewType = 13; + } } else if ("telegram_megagroup".equals(webpageType)) { drawInstantView = true; drawInstantViewType = 2; @@ -6345,15 +6388,26 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe webDocument = null; overrideDescrption = messageObject.messageText; description = overrideDescrption != null ? overrideDescrption.toString() : null; - photo = null; author = null; document = null; photo = messageObject.sponsoredPhoto; + isSmallImage = photo != null || peerPhoto != null; + smallImage = true; duration = 0; type = null; - isSmallImage = photo != null || peerPhoto != null; + if (messageObject.sponsoredMedia != null) { + if (messageObject.sponsoredMedia instanceof TLRPC.TL_messageMediaDocument) { + TLRPC.TL_messageMediaDocument media = (TLRPC.TL_messageMediaDocument) messageObject.sponsoredMedia; + document = media.document; + duration = (int) MessageObject.getDocumentDuration(media.document); + } else if (messageObject.sponsoredMedia instanceof TLRPC.TL_messageMediaPhoto) { + TLRPC.TL_messageMediaPhoto media = (TLRPC.TL_messageMediaPhoto) messageObject.sponsoredMedia; + photo = media.photo; + } + smallImage = false; + isSmallImage = false; + } linkPreviewAbove = false; - smallImage = true; } else if (drawInstantViewType == 19) { site_name = null; title = null; @@ -6416,7 +6470,7 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe "telegram_user".equals(type) || "telegram_channel".equals(type) || "telegram_megagroup".equals(type) || "telegram_voicechat".equals(type) || "telegram_videochat".equals(type) || "telegram_livestream".equals(type) || "telegram_channel_boost".equals(type) || "telegram_group_boost".equals(type); - smallImage = !slideshow && (!drawInstantView || drawInstantViewType == 1 || drawInstantViewType == 2 || drawInstantViewType == 9 || drawInstantViewType == 11 || drawInstantViewType == 25 || drawInstantViewType == 13 || drawInstantViewType == 18 || drawInstantViewType == 20 || drawInstantViewType == 22) && document == null && isSmallImageType || (drawInstantViewType == 23 || drawInstantViewType == 24) && stickers != null && !stickers.isEmpty(); + smallImage = !slideshow && (!drawInstantView || drawInstantViewType == 1 || drawInstantViewType == 2 || drawInstantViewType == 9 || drawInstantViewType == 11 || drawInstantViewType == 25 || drawInstantViewType == 13 || drawInstantViewType == 18 || drawInstantViewType == 20 || drawInstantViewType == 22 || drawInstantViewType == INSTANT_BUTTON_TYPE_PROFILE) && document == null && isSmallImageType || (drawInstantViewType == 23 || drawInstantViewType == 24) && stickers != null && !stickers.isEmpty(); TLRPC.MessageMedia media = MessageObject.getMedia(messageObject.messageOwner); if (media != null && !(drawInstantViewType == 23 || drawInstantViewType == 24 || drawInstantViewType == 25)) { if (media.force_large_media) { @@ -6757,7 +6811,7 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe currentPhotoObject = FileLoader.getClosestPhotoSizeWithSize(photo.sizes, 90); photoParentObject = photo; } - if (currentPhotoObject != null && (currentPhotoObject.w == 0 || currentPhotoObject.h == 0)) { + if (currentPhotoObject != null && (currentPhotoObject instanceof TLRPC.TL_photoStrippedSize || currentPhotoObject.w == 0 || currentPhotoObject.h == 0)) { for (int a = 0; a < document.attributes.size(); a++) { TLRPC.DocumentAttribute attribute = document.attributes.get(a); if (attribute instanceof TLRPC.TL_documentAttributeImageSize || attribute instanceof TLRPC.TL_documentAttributeVideo) { @@ -7149,7 +7203,7 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe } else if (documentAttachType == DOCUMENT_ATTACH_TYPE_VIDEO) { photoImage.setNeedsQualityThumb(true); photoImage.setShouldGenerateQualityThumb(true); - if (!isSmallImage && SharedConfig.isAutoplayVideo() && !currentMessageObject.isRepostPreview && (!currentMessageObject.hasMediaSpoilers() || currentMessageObject.isMediaSpoilersRevealed || currentMessageObject.revealingMediaSpoilers) && ( + if (!isSmallImage && !currentMessageObject.isHiddenSensitive() && SharedConfig.isAutoplayVideo() && !currentMessageObject.isRepostPreview && (!currentMessageObject.hasMediaSpoilers() || currentMessageObject.isMediaSpoilersRevealed || currentMessageObject.revealingMediaSpoilers) && ( (currentMessageObject.mediaExists || currentMessageObject.attachPathExists) || messageObject.canStreamVideo() && DownloadController.getInstance(currentAccount).canDownloadMedia(currentMessageObject) )) { @@ -7175,6 +7229,9 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe } else if (MessageObject.isGifDocument(document, messageObject.hasValidGroupId())) { autoDownload = DownloadController.getInstance(currentAccount).canDownloadMedia(currentMessageObject); } + if (currentMessageObject.isHiddenSensitive()) { + autoDownload = false; + } String filter = currentPhotoObject instanceof TLRPC.TL_photoStrippedSize || "s".equals(currentPhotoObject.type) ? currentPhotoFilterThumb : currentPhotoFilter; if ((messageObject.mediaExists || autoDownload) && !currentMessageObject.isRepostPreview) { autoPlayingMedia = true; @@ -7916,7 +7973,7 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe if (captionWidth > widthForCaption) { groupMedia.setOverrideWidth(captionWidth + getExtraTextX() * 2 + dp(20) - dp(8 + 9) + dp(14)); } - if (captionLayout.hasCodeAtBottom || captionLayout.hasQuoteAtBottom) { + if (!captionAbove && (captionLayout.hasCodeAtBottom || captionLayout.hasQuoteAtBottom)) { captionHeight += AndroidUtilities.dp(14); addedCaptionHeight += AndroidUtilities.dp(14); } @@ -8887,7 +8944,7 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe } captionHeight = captionLayout.textHeight(); addedCaptionHeight = captionHeight + AndroidUtilities.dp(9); - if (captionLayout.hasCodeAtBottom || captionLayout.hasQuoteAtBottom) { + if (!captionAbove && (captionLayout.hasCodeAtBottom || captionLayout.hasQuoteAtBottom)) { captionHeight += AndroidUtilities.dp(14); addedCaptionHeight += AndroidUtilities.dp(14); } @@ -9029,7 +9086,7 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe currentPhotoObjectThumb.size = -1; } - if (SharedConfig.isAutoplayVideo() && !currentMessageObject.isRepostPreview && (!currentMessageObject.hasMediaSpoilers() || currentMessageObject.isMediaSpoilersRevealed || currentMessageObject.revealingMediaSpoilers) && (messageObject.type == MessageObject.TYPE_VIDEO /*|| messageObject.type == MessageObject.TYPE_STORY && messageObject.getDocument() != null*/) && !messageObject.needDrawBluredPreview() && + if (!currentMessageObject.isHiddenSensitive() && SharedConfig.isAutoplayVideo() && !currentMessageObject.isRepostPreview && (!currentMessageObject.hasMediaSpoilers() || currentMessageObject.isMediaSpoilersRevealed || currentMessageObject.revealingMediaSpoilers) && (messageObject.type == MessageObject.TYPE_VIDEO /*|| messageObject.type == MessageObject.TYPE_STORY && messageObject.getDocument() != null*/) && !messageObject.needDrawBluredPreview() && ((currentMessageObject.mediaExists || currentMessageObject.attachPathExists) || messageObject.canStreamVideo() && DownloadController.getInstance(currentAccount).canDownloadMedia(currentMessageObject)) ) { if (currentPosition != null) { @@ -9127,6 +9184,9 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe if (MessageObject.isGifDocument(document, messageObject.hasValidGroupId()) || messageObject.type == MessageObject.TYPE_ROUND_VIDEO) { autoDownload = DownloadController.getInstance(currentAccount).canDownloadMedia(currentMessageObject); } + if (messageObject.isHiddenSensitive()) { + autoDownload = false; + } TLRPC.VideoSize videoSize = MessageObject.getDocumentVideoThumb(document); if (((MessageObject.isGifDocument(document, messageObject.hasValidGroupId()) && messageObject.videoEditedInfo == null) || (!messageObject.isSending() && !messageObject.isEditing())) && (localFile != 0 || FileLoader.getInstance(currentAccount).isLoadingFile(fileName) || autoDownload)) { if (localFile != 1 && !messageObject.needDrawBluredPreview() && (localFile != 0 || messageObject.canStreamVideo() && autoDownload)) { @@ -9276,7 +9336,7 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe invalidate(); } - if ((currentPosition == null || currentMessageObject.isMusic() || currentMessageObject.type == MessageObject.TYPE_PAID_MEDIA || currentMessageObject.isDocument()) && !messageObject.isAnyKindOfSticker() && addedCaptionHeight == 0 && !messageObject.isExpiredStory() && !messageObject.isUnsupported()) { + if ((currentPosition == null || currentMessageObject.isMusic() || currentMessageObject.type == MessageObject.TYPE_PAID_MEDIA || currentMessageObject.isDocument()) && !messageObject.isSponsored() && !messageObject.isAnyKindOfSticker() && addedCaptionHeight == 0 && !messageObject.isExpiredStory() && !messageObject.isUnsupported()) { int addCaptionLayoutWidth = 0; int width = backgroundWidth; if ((currentMessageObject.type == MessageObject.TYPE_VOICE || isRoundVideo) && messageObject.isVoiceTranscriptionOpen() && messageObject.getFactCheck() == null) { @@ -10097,10 +10157,13 @@ public void invalidate() { if (super.invalidateCallback != null) { super.invalidateCallback.run(); } - if (invalidateCallback != null) { - invalidateCallback.run(); + if (overrideInvalidate != null) { + overrideInvalidate.run(); return; } + if (invalidateListener != null) { + invalidateListener.run(); + } super.invalidate(); if ((invalidatesParent || currentMessagesGroup != null && invalidateParentForce()) && getParent() != null) { View parent = (View) getParent(); @@ -10120,10 +10183,13 @@ public void invalidateLite() { if (currentMessageObject == null) { return; } - if (invalidateCallback != null) { - invalidateCallback.run(); + if (overrideInvalidate != null) { + overrideInvalidate.run(); return; } + if (invalidateListener != null) { + invalidateListener.run(); + } super.invalidate(); if ((invalidatesParent || currentMessagesGroup != null && invalidateParentForce()) && getParent() != null) { View parent = (View) getParent(); @@ -10138,9 +10204,14 @@ public void invalidateLite() { } } - private Runnable invalidateCallback; - public void setInvalidateCallback(Runnable callback) { - invalidateCallback = callback; + private Runnable overrideInvalidate; + public void setOverrideInvalidate(Runnable callback) { + overrideInvalidate = callback; + } + + private Runnable invalidateListener; + public void setInvalidateListener(Runnable listener) { + invalidateListener = listener; } @@ -10149,10 +10220,13 @@ public void invalidate(int l, int t, int r, int b) { if (currentMessageObject == null) { return; } - if (invalidateCallback != null) { - invalidateCallback.run(); + if (overrideInvalidate != null) { + overrideInvalidate.run(); return; } + if (invalidateListener != null) { + invalidateListener.run(); + } super.invalidate(l, t, r, b); if (invalidatesParent) { if (getParent() != null) { @@ -10382,7 +10456,9 @@ private void updateSeekBarWaveformWidth(Canvas canvas) { } private int createDocumentLayout(int maxWidth, MessageObject messageObject) { - if (messageObject.type == MessageObject.TYPE_TEXT) { + if (messageObject.sponsoredMedia != null) { + documentAttach = messageObject.sponsoredMedia.document; + } else if (messageObject.type == MessageObject.TYPE_TEXT) { documentAttach = MessageObject.getMedia(messageObject.messageOwner).webpage.document; } else { documentAttach = messageObject.getDocument(); @@ -10507,6 +10583,9 @@ private int createDocumentLayout(int maxWidth, MessageObject messageObject) { currentPhotoObject = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, 320); currentPhotoObjectThumb = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, 40); + if (currentMessageObject.isHiddenSensitive() || (DownloadController.getInstance(currentAccount).getAutodownloadMask() & DownloadController.AUTODOWNLOAD_TYPE_PHOTO) == 0) { + currentPhotoObject = null; + } if (currentPhotoObject == null || currentPhotoObject == currentPhotoObjectThumb) { currentPhotoObject = null; photoImage.setNeedsQualityThumb(true); @@ -11050,6 +11129,8 @@ private void createInstantViewButton() { str = getString(R.string.OpenChannel); } else if (drawInstantViewType == 13) { str = getString(R.string.SendMessage).toUpperCase(); + } else if (drawInstantViewType == INSTANT_BUTTON_TYPE_PROFILE) { + str = getString(R.string.OpenProfile).toUpperCase(); } else if (drawInstantViewType == 10) { str = getString(R.string.OpenBot); } else if (drawInstantViewType == 2) { @@ -12029,7 +12110,7 @@ public void drawContent(Canvas canvas, boolean preview) { } } if (documentAttachType == DOCUMENT_ATTACH_TYPE_GIF) { - if (drawPhotoImage && !currentMessageObject.isRepostPreview && photoImage.getVisible() && !hasGamePreview && !currentMessageObject.needDrawBluredPreview() && !currentMessageObject.preview && !isSmallImage) { + if (drawPhotoImage && !currentMessageObject.isRepostPreview && !currentMessageObject.isSponsored() && photoImage.getVisible() && !hasGamePreview && !currentMessageObject.needDrawBluredPreview() && !currentMessageObject.preview && !isSmallImage && !currentMessageObject.isSponsored()) { int oldAlpha = ((BitmapDrawable) Theme.chat_msgMediaMenuDrawable).getPaint().getAlpha(); Theme.chat_msgMediaMenuDrawable.setAlpha((int) (oldAlpha * controlsAlpha)); setDrawableBounds(Theme.chat_msgMediaMenuDrawable, otherX = (int) (photoImage.getImageX() + photoImage.getImageWidth() - AndroidUtilities.dp(14)), otherY = (int) (photoImage.getImageY() + AndroidUtilities.dp(8.1f))); @@ -12058,6 +12139,9 @@ public void drawContent(Canvas canvas, boolean preview) { radialProgress.setBackgroundDrawable(isDrawSelectionBackground() ? currentBackgroundSelectedDrawable : currentBackgroundDrawable); radialProgress.iconScale = 1f; + if (drawPhotoImage && currentMessageObject != null && currentMessageObject.hasMediaSpoilers() && currentMessageObject.isSensitive() && (!currentMessageObject.isMediaSpoilersRevealed || mediaSpoilerRevealProgress != 0 && mediaSpoilerRevealProgress < 1)) { + radialProgress.iconScale *= mediaSpoilerRevealProgress; + } radialProgress.draw(canvas); canvas.save(); @@ -12161,6 +12245,9 @@ public void drawContent(Canvas canvas, boolean preview) { if (!enterTransitionInProgress && documentAttachType == DOCUMENT_ATTACH_TYPE_AUDIO) { radialProgress.setBackgroundDrawable(isDrawSelectionBackground() ? currentBackgroundSelectedDrawable : currentBackgroundDrawable); radialProgress.iconScale = 1f; + if (drawPhotoImage && currentMessageObject != null && currentMessageObject.hasMediaSpoilers() && currentMessageObject.isSensitive() && (!currentMessageObject.isMediaSpoilersRevealed || mediaSpoilerRevealProgress != 0 && mediaSpoilerRevealProgress < 1)) { + radialProgress.iconScale *= mediaSpoilerRevealProgress; + } drawVoiceOnce(canvas, seekBarWaveform == null ? 1f : 1f - seekBarWaveform.explosionRate, () -> radialProgress.draw(canvas)); } @@ -12334,7 +12421,7 @@ protected void onOpen() { updateReactionLayoutPosition(); if (shouldDrawCaptionLayout() && !currentMessageObject.preview) { drawCaptionLayout(canvas, false, 1f); - drawReactionsLayout(canvas, 1f); + drawReactionsLayout(canvas, 1f, null); } if (currentMessagesGroup == null) { @@ -12681,7 +12768,7 @@ private void updateReactionLayoutPosition() { if (hasNewLineForTime && !(drawForwardedName && hasLinkPreview && documentAttachType == DOCUMENT_ATTACH_TYPE_AUDIO)) { reactionsLayoutInBubble.y -= AndroidUtilities.dp(16); } - if (currentMessageObject.type != MessageObject.TYPE_FILE && (captionLayout != null && ((currentMessageObject.type != MessageObject.TYPE_VOICE && !(currentMessageObject.isOut() && drawForwardedName && !drawPhotoImage)) || (currentPosition != null && currentMessagesGroup != null)))) { + if (currentMessageObject.type != MessageObject.TYPE_FILE && (captionLayout != null && ((currentMessageObject.type != MessageObject.TYPE_VOICE && !(currentMessageObject.isOut() && drawForwardedName && !drawPhotoImage)) || (currentPosition != null && currentMessagesGroup != null) || currentMessageObject.type == MessageObject.TYPE_PAID_MEDIA))) { reactionsLayoutInBubble.y -= AndroidUtilities.dp(14); } reactionsLayoutInBubble.y += reactionsLayoutInBubble.positionOffsetY; @@ -12875,8 +12962,9 @@ public void drawLinkPreview(Canvas canvas, float alpha) { Theme.chat_replyNamePaint.setColor(linkLine.check(currentMessageObject, currentUser, currentChat, resourcesProvider, ReplyMessageLine.TYPE_LINK)); linkLine.setEmojiAlpha(drawInstantViewType == 23 || drawInstantViewType == 24 ? 0.5f : 1f); - final boolean drawPhotoImageBefore = drawInstantView && (drawInstantViewType != 9 && drawInstantViewType != 2 && drawInstantViewType != 13 && drawInstantViewType != 11 && drawInstantViewType != 25 && drawInstantViewType != 1 && drawInstantViewType != 18 && drawInstantViewType != 22) || drawInstantViewType == 6 && imageBackgroundColor != 0; - final boolean drawPhotoImageAfter = !drawInstantView || drawInstantViewType == 9 || drawInstantViewType == 2 || drawInstantViewType == 11 || drawInstantViewType == 25 || drawInstantViewType == 13 || drawInstantViewType == 1 || drawInstantViewType == 18 || drawInstantViewType == 22 || isSmallImage; + final boolean drawPhotoImageBeforeBefore = currentMessageObject.isSponsored() && !isSmallImage; + final boolean drawPhotoImageBefore = !drawPhotoImageBeforeBefore && drawInstantView && (drawInstantViewType != 9 && drawInstantViewType != 2 && drawInstantViewType != 13 && drawInstantViewType != 11 && drawInstantViewType != 25 && drawInstantViewType != 1 && drawInstantViewType != 18 && drawInstantViewType != 22) || drawInstantViewType == 6 && imageBackgroundColor != 0; + final boolean drawPhotoImageAfter = !drawPhotoImageBeforeBefore && (!drawInstantView || drawInstantViewType == 9 || drawInstantViewType == 2 || drawInstantViewType == 11 || drawInstantViewType == 25 || drawInstantViewType == 13 || drawInstantViewType == 1 || drawInstantViewType == 18 || drawInstantViewType == 22 || drawInstantViewType == INSTANT_BUTTON_TYPE_PROFILE || isSmallImage); boolean restore = false; boolean drawInstantButtonInside = false; @@ -12915,6 +13003,67 @@ public void drawLinkPreview(Canvas canvas, float alpha) { linkLine.drawLoadingBackground(canvas, AndroidUtilities.rectTmp, rad, rad, rad, alpha); } + if (drawPhotoImage && drawPhotoImageBeforeBefore) { + if (linkPreviewY != startY) { + linkPreviewY += AndroidUtilities.dp(2); + } + + final int photoWidth = width - AndroidUtilities.dp(17); + if (isSmallImage) { + photoImage.setImageX(linkX + width - photoImage.getImageWidth() - AndroidUtilities.dp(6)); + photoImage.setImageY(smallImageStartY); + } else { + photoImage.setImageX(linkX + (hasInvoicePreview ? -AndroidUtilities.dp(6.3f) : AndroidUtilities.dp(10))); + photoImage.setImageY(linkPreviewY); + } + if (transitionParams != null && transitionParams.animateSmallImage) { + if (!isSmallImage && documentAttachType != DOCUMENT_ATTACH_TYPE_DOCUMENT) { + photoImage.setImageWidth((int) AndroidUtilities.lerp(transitionParams.photoImageFromWidth, photoWidth, transitionParams.animateChangeProgress)); + } + photoImage.setImageX(AndroidUtilities.lerp(transitionParams.photoImageFromCenterX, photoImage.getCenterX(), transitionParams.animateChangeProgress) - photoImage.getImageWidth() / 2f); + photoImage.setImageY(AndroidUtilities.lerp(transitionParams.photoImageFromCenterY, photoImage.getCenterY(), transitionParams.animateChangeProgress) - photoImage.getImageHeight() / 2f); + } else if (!isSmallImage && documentAttachType != DOCUMENT_ATTACH_TYPE_ROUND && documentAttachType != DOCUMENT_ATTACH_TYPE_DOCUMENT) { + photoImage.setImageWidth(photoWidth); + } + if (!isSmallImage && drawImageButton) { + int size = AndroidUtilities.dp(48); + buttonX = this.buttonX = (int) (photoImage.getImageX() + (photoImage.getImageWidth() - size) / 2.0f); + buttonY = this.buttonY = (int) (photoImage.getImageY() + (photoImage.getImageHeight() - size) / 2.0f); + radialProgress.setProgressRect((int) buttonX, (int) buttonY, (int) buttonX + size, (int) buttonY + size); + } + if (isRoundVideo && MediaController.getInstance().isPlayingMessage(currentMessageObject) && MediaController.getInstance().isVideoDrawingReady() && canvas.isHardwareAccelerated()) { + imageDrawn = true; + drawTime = true; + } else { + if (delegate == null || delegate.getPinchToZoomHelper() == null || !delegate.getPinchToZoomHelper().isInOverlayModeFor(this)) { + if (alpha != 1f) { + photoImage.setAlpha(alpha); + if (allowDrawPhotoImage()) { + imageDrawn = photoImage.draw(canvas); + } else { + imageDrawn = true; + } + if (currentMessageObject.hasMediaSpoilers()) { + blurredPhotoImage.setAlpha(alpha); + drawBlurredPhoto(canvas); + blurredPhotoImage.setAlpha(1f); + } + photoImage.setAlpha(1f); + } else { + if (allowDrawPhotoImage()) { + imageDrawn = photoImage.draw(canvas); + } else { + imageDrawn = true; + } + if (currentMessageObject.hasMediaSpoilers()) { + drawBlurredPhoto(canvas); + } + } + } + } + linkPreviewY += photoImage.getImageHeight() + dp(6); + } + if (siteNameLayout != null) { if (titleLabelLayout != null) { linkPreviewY += AndroidUtilities.dp(1); @@ -13682,7 +13831,7 @@ private float isSmallImage() { } private boolean shouldDrawMenuDrawable() { - return (currentMessagesGroup == null || (currentPosition.flags & MessageObject.POSITION_FLAG_TOP) != 0) && !hasLinkPreview && (currentMessageObject == null || !currentMessageObject.isRepostPreview); + return (currentMessagesGroup == null || (currentPosition.flags & MessageObject.POSITION_FLAG_TOP) != 0) && !hasLinkPreview && (currentMessageObject == null || !currentMessageObject.isRepostPreview && !currentMessageObject.isSponsored()); } private void drawContact(Canvas canvas) { @@ -14092,6 +14241,7 @@ public void drawMessageText(float textX, float textY, Canvas canvas, ArrayList<M translationLoadingDrawable.setAppearByGradient(true); if (translationLoadingPath == null) { translationLoadingPath = new LinkPath(true); + translationLoadingPath.setUseCornerPathImplementation(true); } translationLoadingDrawable.usePath(translationLoadingPath); translationLoadingDrawable.setRadiiDp(5); @@ -14109,6 +14259,7 @@ public void drawMessageText(float textX, float textY, Canvas canvas, ArrayList<M block.textLayout.getSelectionPath(0, block.textLayout.getText().length(), translationLoadingPath); } } + translationLoadingPath.closeRects(); translationLoadingDrawable.updateBounds(); } @@ -14677,6 +14828,9 @@ public void updateButtonState(boolean ifSame, boolean animated, boolean fromSet) } else { autoDownload = DownloadController.getInstance(currentAccount).canDownloadMedia(currentMessageObject); } + if (currentMessageObject.isHiddenSensitive()) { + autoDownload = false; + } canStreamVideo = ( (currentMessageObject.isSent() || currentMessageObject.isForwarded()) && (documentAttachType == DOCUMENT_ATTACH_TYPE_VIDEO || @@ -15095,6 +15249,10 @@ private void didPressMiniButton(boolean animated) { } private void didPressButton(boolean animated, boolean video) { + if (delegate != null && currentMessageObject.isSensitive() && currentMessageObject.hasMediaSpoilers() && !currentMessageObject.needDrawBluredPreview() && !currentMessageObject.isMediaSpoilersRevealed) { + delegate.didPressRevealSensitiveContent(this); + return; + } if (currentMessageObject != null && !currentMessageObject.isAnyKindOfSticker()) { currentMessageObject.putInDownloadsStore = true; } @@ -15326,7 +15484,7 @@ public void onSuccessDownload(String fileName) { photoImage.setAllowStartAnimation(true); photoImage.startAnimation(); autoPlayingMedia = true; - } else if (!isSmallImage && SharedConfig.isAutoplayVideo() && !currentMessageObject.isRepostPreview && documentAttachType == DOCUMENT_ATTACH_TYPE_VIDEO && (currentPosition == null || (currentPosition.flags & MessageObject.POSITION_FLAG_LEFT) != 0 && (currentPosition.flags & MessageObject.POSITION_FLAG_RIGHT) != 0)) { + } else if (!isSmallImage && !currentMessageObject.isHiddenSensitive() && SharedConfig.isAutoplayVideo() && !currentMessageObject.isRepostPreview && documentAttachType == DOCUMENT_ATTACH_TYPE_VIDEO && (currentPosition == null || (currentPosition.flags & MessageObject.POSITION_FLAG_LEFT) != 0 && (currentPosition.flags & MessageObject.POSITION_FLAG_RIGHT) != 0)) { animatingNoSound = 2; photoImage.setImage(ImageLocation.getForDocument(documentAttach), ImageLoader.AUTOPLAY_FILTER, ImageLocation.getForObject(currentPhotoObject, photoParentObject), currentPhotoObject instanceof TLRPC.TL_photoStrippedSize || currentPhotoObject != null && "s".equals(currentPhotoObject.type) ? currentPhotoFilterThumb : currentPhotoFilter, ImageLocation.getForObject(currentPhotoObjectThumb, photoParentObject), currentPhotoFilterThumb, currentPhotoObjectThumbStripped, documentAttach.size, null, currentMessageObject, 0); if (!PhotoViewer.isPlayingMessage(currentMessageObject)) { @@ -15338,7 +15496,7 @@ public void onSuccessDownload(String fileName) { autoPlayingMedia = true; } else if (documentAttachType == DOCUMENT_ATTACH_TYPE_GIF) { photoImage.setImage(ImageLocation.getForDocument(documentAttach), ImageLoader.AUTOPLAY_FILTER, ImageLocation.getForObject(currentPhotoObject, photoParentObject), currentPhotoObject instanceof TLRPC.TL_photoStrippedSize || currentPhotoObject != null && "s".equals(currentPhotoObject.type) ? currentPhotoFilterThumb : currentPhotoFilter, ImageLocation.getForObject(currentPhotoObjectThumb, photoParentObject), currentPhotoFilterThumb, currentPhotoObjectThumbStripped, documentAttach.size, null, currentMessageObject, 0); - if (SharedConfig.isAutoplayGifs() && !currentMessageObject.isRepostPreview) { + if (!currentMessageObject.isHiddenSensitive() && SharedConfig.isAutoplayGifs() && !currentMessageObject.isRepostPreview) { photoImage.setAllowStartAnimation(true); photoImage.startAnimation(); } else { @@ -15657,6 +15815,12 @@ private void measureTime(MessageObject messageObject) { } else { signString = null; } + if (messageObject.getDialogId() < 0) { + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-messageObject.getDialogId()); + if (chat != null && chat.signature_profiles) { + signString = null; + } + } String timeString; TLRPC.User author = null; if (currentMessageObject.isFromUser()) { @@ -15891,7 +16055,16 @@ private void updateCurrentUserAndChat() { currentUser = new TLRPC.TL_user(); currentUser.first_name = fwd_from.from_name; } else { + long did = currentMessageObject.getDialogId(); long fromId = currentMessageObject.getFromChatId(); + TLRPC.Chat fromChat = null; + if (DialogObject.isChatDialog(fromId)) { + fromChat = messagesController.getChat(-fromId); + } + TLRPC.Chat chat = null; + if (DialogObject.isChatDialog(did)) { + chat = messagesController.getChat(-did); + } if (DialogObject.isEncryptedDialog(currentMessageObject.getDialogId())) { if (currentMessageObject.isOutOwner()) { currentUser = UserConfig.getInstance(currentAccount).getCurrentUser(); @@ -15901,10 +16074,12 @@ private void updateCurrentUserAndChat() { currentUser = messagesController.getUser(echat.user_id); } } - } else if (DialogObject.isUserDialog(fromId) && !currentMessageObject.messageOwner.post) { + } else if (DialogObject.isUserDialog(fromId) && (!currentMessageObject.messageOwner.post || fromChat != null && fromChat.signature_profiles)) { currentUser = messagesController.getUser(fromId); + } else if (currentMessageObject.messageOwner.post && chat != null && !chat.signature_profiles) { + currentChat = chat; } else if (DialogObject.isChatDialog(fromId)) { - currentChat = messagesController.getChat(-fromId); + currentChat = fromChat; } else if (currentMessageObject.messageOwner.post) { currentChat = messagesController.getChat(currentMessageObject.messageOwner.peer_id.channel_id); } @@ -16482,6 +16657,9 @@ protected void onClick() { if (mess.length() > 150) { mess = mess.subSequence(0, 150); } + if (!(mess instanceof SpannableStringBuilder)) { + mess = new SpannableStringBuilder(mess); + } mess = AndroidUtilities.replaceNewLines(mess); stringFinalText = Emoji.replaceEmoji(mess, textPaint.getFontMetricsInt(), AndroidUtilities.dp(14), true); if (messageObject.replyMessageObject.messageOwner != null) { @@ -16711,6 +16889,16 @@ private String getAuthorName() { if (currentUser != null) { return UserObject.getUserName(currentUser); } else if (currentChat != null) { + if (currentMessageObject != null && currentChat.signature_profiles) { + long did = DialogObject.getPeerDialogId(currentMessageObject.messageOwner.from_id); + if (did >= 0) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(did); + if (user != null) return UserObject.getUserName(user); + } else { + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did); + if (chat != null) return chat.title; + } + } return currentChat.title; } else if (currentMessageObject != null && currentMessageObject.isSponsored()) { return currentMessageObject.sponsoredTitle; @@ -16860,7 +17048,7 @@ public void setBackgroundTopY(int offset) { drawable.setBotButtonsBottom(currentMessageObject != null && currentMessageObject.hasInlineBotButtons()); } - float transitionYOffsetForDrawables; + public float transitionYOffsetForDrawables; public void setDrawableBoundsInner(Drawable drawable, int x, int y, int w, int h) { if (drawable != null) { @@ -18118,6 +18306,7 @@ private void drawSideButton(Canvas canvas) { sideStartX -= offsetX; sideStartY -= offsetY; } + sideButtonVisible = true; if (drawSideButton == 3) { if (!(enterTransitionInProgress && !currentMessageObject.isVoice())) { drawCommentButton(canvas, 1f); @@ -18127,6 +18316,10 @@ private void drawSideButton(Canvas canvas) { return; } rect.set(sideStartX, sideStartY, sideStartX + AndroidUtilities.dp(32), sideStartY + AndroidUtilities.dp(drawSideButton2 == SIDE_BUTTON_SPONSORED_MORE ? 64 : 32)); + if (rect.right >= getMeasuredWidth()) { + sideButtonVisible = false; + return; + } applyServiceShaderMatrix(); if (drawSideButton == SIDE_BUTTON_SPONSORED_CLOSE && drawSideButton2 == SIDE_BUTTON_SPONSORED_MORE && sideButtonPressed) { if (sideButtonPath1 == null) { @@ -19360,7 +19553,7 @@ public Theme.MessageDrawable getCurrentBackgroundDrawable(boolean update) { } private boolean shouldDrawCaptionLayout() { - return currentMessageObject != null && !currentMessageObject.preview && (currentPosition == null || (currentMessagesGroup != null && currentMessagesGroup.isDocuments && (currentPosition.flags & MessageObject.POSITION_FLAG_BOTTOM) == 0)) && !transitionParams.animateBackgroundBoundsInner && !(enterTransitionInProgress && currentMessageObject.isVoice()); + return currentMessageObject != null && !currentMessageObject.preview && !currentMessageObject.isSponsored() && (currentPosition == null || (currentMessagesGroup != null && currentMessagesGroup.isDocuments && (currentPosition.flags & MessageObject.POSITION_FLAG_BOTTOM) == 0)) && !transitionParams.animateBackgroundBoundsInner && !(enterTransitionInProgress && currentMessageObject.isVoice()); } public void drawCaptionLayout(Canvas canvas, boolean selectionOnly, float alpha) { @@ -19383,7 +19576,7 @@ public void drawCaptionLayout(Canvas canvas, boolean selectionOnly, float alpha) } } - public void drawReactionsLayout(Canvas canvas, float alpha) { + public void drawReactionsLayout(Canvas canvas, float alpha, Integer only) { if (isRoundVideo) { reactionsLayoutInBubble.drawServiceShaderBackground = 1f - getVideoTranscriptionProgress(); } @@ -19396,11 +19589,11 @@ public void drawReactionsLayout(Canvas canvas, float alpha) { canvas.saveLayerAlpha(AndroidUtilities.rectTmp, (int) (0xFF * getAlpha()), Canvas.ALL_SAVE_FLAG); } if (reactionsLayoutInBubble.drawServiceShaderBackground > 0 || !transitionParams.animateBackgroundBoundsInner || currentPosition != null || isRoundVideo) { - reactionsLayoutInBubble.draw(canvas, transitionParams.animateChange ? transitionParams.animateChangeProgress : 1f, null); + reactionsLayoutInBubble.draw(canvas, transitionParams.animateChange ? transitionParams.animateChangeProgress : 1f, only); } else { canvas.save(); canvas.clipRect(0, 0, getMeasuredWidth(), getBackgroundDrawableBottom() + transitionParams.deltaBottom); - reactionsLayoutInBubble.draw(canvas, transitionParams.animateChange ? transitionParams.animateChangeProgress : 1f, null); + reactionsLayoutInBubble.draw(canvas, transitionParams.animateChange ? transitionParams.animateChangeProgress : 1f, only); canvas.restore(); } if (getAlpha() != 1f) { @@ -19922,8 +20115,10 @@ private boolean findProgressLoadingLink(LoadingDrawableLocation location, LinkPa path.rewind(); int start = spanned.getSpanStart(progressLoadingLink); int end = spanned.getSpanEnd(progressLoadingLink); + path.setUseCornerPathImplementation(true); path.setCurrentLayout(layout, start, yOffset); layout.getSelectionPath(start, end, path); + path.closeRects(); progressLoadingLinkCurrentDrawable.updateBounds(); return true; } @@ -21010,7 +21205,7 @@ public void drawOverlays(Canvas canvas) { } else if (currentMessageObject.type == MessageObject.TYPE_VIDEO || currentMessageObject.type == MessageObject.TYPE_PHOTO || currentMessageObject.type == MessageObject.TYPE_EXTENDED_MEDIA_PREVIEW || documentAttachType == DOCUMENT_ATTACH_TYPE_VIDEO || documentAttachType == DOCUMENT_ATTACH_TYPE_GIF) { if (photoImage.getVisible() && !currentMessageObject.isRepostPreview) { - if (!currentMessageObject.needDrawBluredPreview() && !currentMessageObject.isRepostPreview && !currentMessageObject.preview && !isSmallImage) { + if (!currentMessageObject.needDrawBluredPreview() && !currentMessageObject.isSponsored() && !currentMessageObject.isRepostPreview && !currentMessageObject.preview && !isSmallImage) { if (documentAttachType == DOCUMENT_ATTACH_TYPE_VIDEO) { int oldAlpha = ((BitmapDrawable) Theme.chat_msgMediaMenuDrawable).getPaint().getAlpha(); if (drawMediaCheckBox) { @@ -21063,6 +21258,9 @@ public void drawOverlays(Canvas canvas) { } loadingProgressAlpha *= (1f - isSmallImage()); + if (drawPhotoImage && currentMessageObject != null && currentMessageObject.hasMediaSpoilers() && currentMessageObject.isSensitive() && (!currentMessageObject.isMediaSpoilersRevealed || mediaSpoilerRevealProgress != 0 && mediaSpoilerRevealProgress < 1)) { + loadingProgressAlpha *= mediaSpoilerRevealProgress; + } if (loadingProgressAlpha > 0) { boolean bigRadius = false; @@ -21760,7 +21958,8 @@ public void drawOverlays(Canvas canvas) { if ( (!isRoundVideo || !hasLinkPreview) && (!currentMessageObject.needDrawBluredPreview() || !MediaController.getInstance().isPlayingMessage(currentMessageObject)) && - !(currentMessageObject.hasMediaSpoilers() && (!currentMessageObject.isMediaSpoilersRevealed || !currentMessageObject.revealingMediaSpoilers) && SharedConfig.isAutoplayVideo() && !currentMessageObject.isRepostPreview && currentMessagesGroup == null && (radialProgress.getIcon() == MediaActionDrawable.ICON_PLAY || radialProgress.getIcon() == MediaActionDrawable.ICON_NONE)) + !(currentMessageObject.hasMediaSpoilers() && (!currentMessageObject.isMediaSpoilersRevealed || !currentMessageObject.revealingMediaSpoilers) && SharedConfig.isAutoplayVideo() && !currentMessageObject.isRepostPreview && currentMessagesGroup == null && (radialProgress.getIcon() == MediaActionDrawable.ICON_PLAY || radialProgress.getIcon() == MediaActionDrawable.ICON_NONE)) && + !currentMessageObject.isHiddenSensitive() ) { if (currentMessageObject.needDrawBluredPreview()) { radialProgress.overrideCircleAlpha = 0f; @@ -21803,6 +22002,9 @@ public void drawOverlays(Canvas canvas) { } if ((drawVideoImageButton || animatingDrawVideoImageButton != 0) && !currentMessageObject.isRepostPreview && !currentMessageObject.sendPreview && photoImage.getVisible() && !isSmallImage) { float alpha = controlsAlpha; + if (drawPhotoImage && currentMessageObject != null && currentMessageObject.hasMediaSpoilers() && currentMessageObject.isSensitive() && (!currentMessageObject.isMediaSpoilersRevealed || mediaSpoilerRevealProgress != 0 && mediaSpoilerRevealProgress < 1)) { + alpha *= mediaSpoilerRevealProgress; + } videoRadialProgress.setOverrideAlpha(alpha); videoRadialProgress.draw(canvas); } @@ -21940,6 +22142,52 @@ public void drawOverlays(Canvas canvas) { Theme.chat_timePaint.setAlpha(255); } } + + if (drawPhotoImage && currentMessageObject != null && currentMessageObject.hasMediaSpoilers() && currentMessageObject.isSensitive() && (!currentMessageObject.isMediaSpoilersRevealed || mediaSpoilerRevealProgress != 0 && mediaSpoilerRevealProgress < 1)) { + if (sensitiveText == null) { + SpannableStringBuilder sensitiveTextString = new SpannableStringBuilder("x " + getString(R.string.MessageSensitiveContent)); + ColoredImageSpan span = new ColoredImageSpan(R.drawable.filled_sensitive); + sensitiveTextString.setSpan(span, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + sensitiveText = new Text(sensitiveTextString, 14, AndroidUtilities.getTypeface(AndroidUtilities.TYPEFACE_ROBOTO_MEDIUM)); + } + Text text = sensitiveText; + if (photoImage.getImageWidth() < dp(13 + 13) + sensitiveText.getCurrentWidth()) { + if (sensitiveTextShort == null) { + SpannableStringBuilder sensitiveTextString = new SpannableStringBuilder("x " + getString(R.string.MessageSensitiveContentShort)); + ColoredImageSpan span = new ColoredImageSpan(R.drawable.filled_sensitive); + sensitiveTextString.setSpan(span, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + sensitiveTextShort = new Text(sensitiveTextString, 14, AndroidUtilities.getTypeface(AndroidUtilities.TYPEFACE_ROBOTO_MEDIUM)); + } + text = sensitiveTextShort; + } + + final float cx = photoImage.getImageX() + photoImage.getImageWidth() / 2f; + final float cy = photoImage.getImageY() + photoImage.getImageHeight() / 2f; + final float w = text.getCurrentWidth() + dp(13 + 13); + final float h = dp(32), r = h / 2f; + float s = AndroidUtilities.lerp(.8f, 1f, 1f - mediaSpoilerRevealProgress); + AndroidUtilities.rectTmp.set(cx - w / 2f * s, cy - h / 2f * s, cx + w / 2f * s, cy + h / 2f * s); + + rectPath.reset(); + rectPath.addRoundRect(AndroidUtilities.rectTmp, r, r, Path.Direction.CW); + canvas.save(); + canvas.clipPath(rectPath); + float wasAlpha = blurredPhotoImage.getAlpha(); + blurredPhotoImage.setAlpha((1f - mediaSpoilerRevealProgress) * wasAlpha); + blurredPhotoImage.draw(canvas); + blurredPhotoImage.setAlpha(wasAlpha); + canvas.restore(); + + int oldAlpha = getThemedPaint(Theme.key_paint_chatTimeBackground).getAlpha(); + getThemedPaint(Theme.key_paint_chatTimeBackground).setAlpha((int) (oldAlpha * controlsAlpha * (1f - mediaSpoilerRevealProgress) * .35f)); + canvas.drawRoundRect(AndroidUtilities.rectTmp, r, r, getThemedPaint(Theme.key_paint_chatTimeBackground)); + getThemedPaint(Theme.key_paint_chatTimeBackground).setAlpha(oldAlpha); + + canvas.save(); + canvas.scale(s, s, cx, cy); + text.draw(canvas, cx - w / 2f + dp(13), cy, 0xFFFFFFFF, 1f - mediaSpoilerRevealProgress); + canvas.restore(); + } } private Paint clipPaint; @@ -21962,6 +22210,9 @@ protected void drawRadialProgress(Canvas canvas) { drawPhotoBlurRect(canvas, radialProgress.getProgressRect()); } radialProgress.iconScale = 1f; + if (drawPhotoImage && currentMessageObject != null && currentMessageObject.hasMediaSpoilers() && currentMessageObject.isSensitive() && (!currentMessageObject.isMediaSpoilersRevealed || mediaSpoilerRevealProgress != 0 && mediaSpoilerRevealProgress < 1)) { + radialProgress.iconScale *= mediaSpoilerRevealProgress; + } radialProgress.draw(canvas); if (withPeriod) { @@ -24257,7 +24508,12 @@ private boolean isDark() { } public boolean needDrawAvatar() { - return isChat && !isSavedPreviewChat && (!isThreadPost || isForum) && currentMessageObject != null && !currentMessageObject.isOutOwner() && currentMessageObject.needDrawAvatar() || currentMessageObject != null && currentMessageObject.forceAvatar; + return ( + isChat && !isSavedPreviewChat && (!isThreadPost || isForum) && ( + currentMessageObject != null && !currentMessageObject.isOutOwner() && currentMessageObject.needDrawAvatar() + ) || + currentMessageObject != null && currentMessageObject.forceAvatar + ); } protected boolean drawPhotoImage(Canvas canvas) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/CheckBoxCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/CheckBoxCell.java index a15aec00481..a40e33cc3c3 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/CheckBoxCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/CheckBoxCell.java @@ -460,10 +460,10 @@ public void setMultiline(boolean value) { linksTextView.setSingleLine(false); linksTextView.setEllipsize(null); if (currentType != TYPE_CHECK_BOX_URL) { - layoutParams.height = LayoutParams.WRAP_CONTENT; - layoutParams.gravity = (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP; - layoutParams.topMargin = dp(14); - layoutParams.bottomMargin = dp(10); +// layoutParams.height = LayoutParams.WRAP_CONTENT; +// layoutParams.gravity = (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP; +// layoutParams.topMargin = dp(14); +// layoutParams.bottomMargin = dp(10); } } else { linksTextView.setLines(1); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/CreationTextCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/CreationTextCell.java index 219c3d651ee..b7f9d710bdd 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/CreationTextCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/CreationTextCell.java @@ -17,14 +17,15 @@ public class CreationTextCell extends FrameLayout { private SimpleTextView textView; private ImageView imageView; boolean divider; - public int startPadding = 70; + public int startPadding; public CreationTextCell(Context context) { - this(context, null); + this(context, 70, null); } - public CreationTextCell(Context context, Theme.ResourcesProvider resourcesProvider) { + public CreationTextCell(Context context, int padding, Theme.ResourcesProvider resourcesProvider) { super(context); + this.startPadding = padding; textView = new SimpleTextView(context); textView.setTextSize(16); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java index 7a42746075f..0468e40523e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java @@ -1292,7 +1292,7 @@ public void buildLayout() { updateMessageThumbs(); messageNameString = AndroidUtilities.removeDiacritics(getMessageNameString()); messageString = formatTopicsNames(); - String restrictionReason = message != null ? MessagesController.getRestrictionReason(message.messageOwner.restriction_reason) : null; + String restrictionReason = message != null ? MessagesController.getInstance(message.currentAccount).getRestrictionReason(message.messageOwner.restriction_reason) : null; buttonString = message != null ? getMessageStringFormatted(messageFormatType, restrictionReason, messageNameString, true) : ""; if (applyName && buttonString.length() >= 0 && messageNameString != null) { SpannableStringBuilder spannableStringBuilder = SpannableStringBuilder.valueOf(buttonString); @@ -1398,7 +1398,7 @@ public void buildLayout() { } } } else { - String restrictionReason = MessagesController.getRestrictionReason(message.messageOwner.restriction_reason); + String restrictionReason = MessagesController.getInstance(message.currentAccount).getRestrictionReason(message.messageOwner.restriction_reason); TLRPC.User fromUser = null; TLRPC.Chat fromChat = null; long fromId = message.getFromChatId(); @@ -4194,9 +4194,40 @@ protected void onDraw(Canvas canvas) { private PremiumGradient.PremiumGradientTools premiumGradient; private Drawable lockDrawable; + private int starBgColor; + private Drawable starFg, starBg; + public boolean drawAvatarOverlays(Canvas canvas) { - boolean needInvalidate = false; - float lockT = premiumBlockedT.set(premiumBlocked); + boolean needInvalidate = false, stars = false; + if (chat != null && (chat.flags2 & 2048) != 0) { + stars = true; + float bottom = avatarImage.getImageY2(); + float right = avatarImage.getImageX2(); + float checkProgress = checkBox != null && checkBox.isChecked() ? 1.0f - checkBox.getProgress() : 1.0f; + + if (starBg == null) { + starBg = getContext().getResources().getDrawable(R.drawable.star_small_outline).mutate(); + } + final int bg = Theme.getColor(Theme.key_windowBackgroundWhite); + if (starBgColor != bg) { + starBg.setColorFilter(new PorterDuffColorFilter(starBgColor = bg, PorterDuff.Mode.SRC_IN)); + } + if (starFg == null) { + starFg = getContext().getResources().getDrawable(R.drawable.star_small_inner).mutate(); + } + + final int sz = dp(19.33f); + AndroidUtilities.rectTmp2.set((int) right + dp(1.66f) - sz, (int) bottom - sz, (int) right + dp(1.66f), (int) bottom); + AndroidUtilities.rectTmp2.inset(-dp(1), -dp(1)); + starBg.setBounds(AndroidUtilities.rectTmp2); + starBg.setAlpha((int) (0xFF * checkProgress)); + starBg.draw(canvas); + AndroidUtilities.rectTmp2.set((int) right + dp(1.66f) - sz, (int) bottom - sz, (int) right + dp(1.66f), (int) bottom); + starFg.setBounds(AndroidUtilities.rectTmp2); + starFg.setAlpha((int) (0xFF * checkProgress)); + starFg.draw(canvas); + } + float lockT = premiumBlockedT.set(premiumBlocked && !stars); if (lockT > 0) { float top = avatarImage.getCenterY() + dp(18); float left = avatarImage.getCenterX() + dp(18); @@ -4224,7 +4255,7 @@ public boolean drawAvatarOverlays(Canvas canvas) { canvas.restore(); return false; } - if (isDialogCell && currentDialogFolderId == 0) { + if (isDialogCell && currentDialogFolderId == 0 && !stars) { showTtl = ttlPeriod > 0 && !isOnline() && !hasCall; if (rightFragmentOpenedProgress != 1f && (showTtl || ttlProgress > 0)) { if (timerDrawable == null || (timerDrawable.getTime() != ttlPeriod && ttlPeriod > 0)) { @@ -4866,7 +4897,7 @@ public void updateMessageThumbs() { if (message == null) { return; } - String restrictionReason = MessagesController.getRestrictionReason(message.messageOwner.restriction_reason); + String restrictionReason = MessagesController.getInstance(message.currentAccount).getRestrictionReason(message.messageOwner.restriction_reason); if (message != null && message.messageOwner != null && message.messageOwner.media instanceof TLRPC.TL_messageMediaPaidMedia) { thumbsCount = 0; hasVideoThumb = false; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/EditTextCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/EditTextCell.java index d6acbcc23ab..e2ef26d3256 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/EditTextCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/EditTextCell.java @@ -18,6 +18,7 @@ import android.view.View; import android.view.inputmethod.EditorInfo; import android.widget.FrameLayout; +import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; @@ -200,6 +201,19 @@ public void onFocusChange(View v, boolean hasFocus) { updateLimitText(); } + public ImageView setLeftDrawable(Drawable drawable) { + ImageView imageView = new ImageView(getContext()); + imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); + imageView.setImageDrawable(drawable); + addView(imageView, LayoutHelper.createFrame(24, 24, Gravity.LEFT | Gravity.CENTER_VERTICAL, 18, 0, 0, 0)); + + FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) editText.getLayoutParams(); + lp.leftMargin = dp(24); + editText.setLayoutParams(lp); + + return imageView; + } + public void setText(CharSequence text) { ignoreEditText = true; editText.setText(text); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/GraySectionCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/GraySectionCell.java index 1e0ee2fbe5d..16dd9e3ba3f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/GraySectionCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/GraySectionCell.java @@ -29,7 +29,7 @@ import java.util.List; -public class GraySectionCell extends FrameLayout { +public class GraySectionCell extends FrameLayout implements Theme.Colorable { private AnimatedEmojiSpan.TextViewEmojis textView; private AnimatedTextView rightTextView; @@ -69,6 +69,12 @@ public CharSequence getAccessibilityClassName() { ViewCompat.setAccessibilityHeading(this, true); } + public void updateColors() { + setBackgroundColor(getThemedColor(Theme.key_graySection)); + textView.setTextColor(getThemedColor(Theme.key_graySectionText)); + rightTextView.setTextColor(getThemedColor(Theme.key_graySectionText)); + } + @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure( diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/GroupMedia.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/GroupMedia.java index aebf3e8768c..ff94abcbd13 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/GroupMedia.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/GroupMedia.java @@ -990,6 +990,10 @@ public void calculate() { position.photoWidth = 100; position.photoHeight = 100; } + if (position.photoWidth <= 0 || position.photoHeight <= 0) { + position.photoWidth = 50; + position.photoHeight = 50; + } position.aspectRatio = position.photoWidth / (float) position.photoHeight; if (position.aspectRatio > 1.2f) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/HeaderCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/HeaderCell.java index 5e05adb7106..5ab1bffc864 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/HeaderCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/HeaderCell.java @@ -112,7 +112,11 @@ public HeaderCell(Context context, int textColorKey, int padding, int topMargin, } public void setHeight(int value) { - textView.setMinHeight(AndroidUtilities.dp(height = value) - ((LayoutParams) textView.getLayoutParams()).topMargin); + int newMinHeight = AndroidUtilities.dp(height = value) - ((LayoutParams) textView.getLayoutParams()).topMargin; + if (textView.getMinHeight() != newMinHeight) { + textView.setMinHeight(newMinHeight); + requestLayout(); + } } public void setTopMargin(int topMargin) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ProfileSearchCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ProfileSearchCell.java index a378cf5bd45..05d673a641b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ProfileSearchCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ProfileSearchCell.java @@ -58,7 +58,7 @@ import java.util.Locale; -public class ProfileSearchCell extends BaseCell implements NotificationCenter.NotificationCenterDelegate { +public class ProfileSearchCell extends BaseCell implements NotificationCenter.NotificationCenterDelegate, Theme.Colorable { private CharSequence currentName; public ImageReceiver avatarImage; @@ -491,9 +491,11 @@ public void buildLayout() { } else if (user != null) { if (MessagesController.isSupportUser(user)) { statusString = LocaleController.getString("SupportStatus", R.string.SupportStatus); + } else if (user.bot && user.bot_active_users != 0) { + statusString = LocaleController.formatPluralStringComma("BotUsers", user.bot_active_users, ' '); } else if (user.bot) { statusString = LocaleController.getString("Bot", R.string.Bot); - } else if (user.id == 333000 || user.id == 777000) { + } else if (UserObject.isService(user.id)) { statusString = LocaleController.getString("ServiceNotifications", R.string.ServiceNotifications); } else { if (isOnline == null) { @@ -913,4 +915,11 @@ public boolean onTouchEvent(MotionEvent event) { } return super.onTouchEvent(event); } + + @Override + public void updateColors() { + if (nameLayout != null && getMeasuredWidth() > 0) { + buildLayout(); + } + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/SessionCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/SessionCell.java index d347e219248..903de526eac 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/SessionCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/SessionCell.java @@ -286,7 +286,7 @@ public void setSession(TLObject object, boolean divider) { } } - public static Drawable createDrawable(int sz, String platform) { + public static CombinedDrawable createDrawable(int sz, String platform) { TLRPC.TL_authorization auth = new TLRPC.TL_authorization(); auth.device_model = platform; auth.platform = platform; @@ -294,7 +294,7 @@ public static Drawable createDrawable(int sz, String platform) { return createDrawable(sz, auth); } - public static Drawable createDrawable(int sz, TLRPC.TL_authorization session) { + public static CombinedDrawable createDrawable(int sz, TLRPC.TL_authorization session) { String platform = session.platform.toLowerCase(); if (platform.isEmpty()) { platform = session.system_version.toLowerCase(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedPhotoVideoCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedPhotoVideoCell.java index 2062e002b60..337525decf4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedPhotoVideoCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedPhotoVideoCell.java @@ -182,7 +182,7 @@ public void onAnimationCancel(Animator animation) { public void setMessageObject(MessageObject messageObject) { currentMessageObject = messageObject; imageView.getImageReceiver().setVisible(!PhotoViewer.isShowingImage(messageObject), false); - String restrictionReason = MessagesController.getRestrictionReason(messageObject.messageOwner.restriction_reason); + String restrictionReason = MessagesController.getInstance(currentAccount).getRestrictionReason(messageObject.messageOwner.restriction_reason); if (!TextUtils.isEmpty(restrictionReason)) { videoInfoContainer.setVisibility(INVISIBLE); imageView.setImageResource(R.drawable.photo_placeholder_in); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedPhotoVideoCell2.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedPhotoVideoCell2.java index 5174d718f9b..c467a27697c 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedPhotoVideoCell2.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedPhotoVideoCell2.java @@ -55,6 +55,7 @@ import org.telegram.ui.Components.CombinedDrawable; import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.FlickerLoadingView; +import org.telegram.ui.Components.Shaker; import org.telegram.ui.Components.Text; import org.telegram.ui.Components.spoilers.SpoilerEffect; import org.telegram.ui.Components.spoilers.SpoilerEffect2; @@ -67,8 +68,10 @@ public class SharedPhotoVideoCell2 extends FrameLayout { + public int imageReceiverColor = 0; public ImageReceiver imageReceiver = new ImageReceiver(); public ImageReceiver blurImageReceiver = new ImageReceiver(); + private Shaker shaker; public int storyId; int currentAccount; public boolean isSearchingHashtag; @@ -106,6 +109,7 @@ public class SharedPhotoVideoCell2 extends FrameLayout { private boolean gradientDrawableLoading; public boolean isStory; + public boolean isStoryUploading; public boolean isStoryPinned; static long lastUpdateDownloadSettingsTime; @@ -123,8 +127,21 @@ public class SharedPhotoVideoCell2 extends FrameLayout { public final static int STYLE_CACHE = 1; private int style = STYLE_SHARED_MEDIA; + private final Paint scrimPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint progressPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final AnimatedFloat animatedProgress = new AnimatedFloat(this, 0, 200, CubicBezierInterpolator.EASE_OUT_QUINT); + CanvasButton canvasButton; + private boolean check2, reorder; + public void setCheck2() { + this.check2 = true; + } + public void setReorder(boolean value) { + this.reorder = value; + invalidate(); + } + public SharedPhotoVideoCell2(Context context, SharedResources sharedResources, int currentAccount) { super(context); this.sharedResources = sharedResources; @@ -141,6 +158,12 @@ public SharedPhotoVideoCell2(Context context, SharedResources sharedResources, i } blurImageReceiver.setImageBitmap(Utilities.stackBlurBitmapMax(imageReceiver.getBitmap())); } + if (set && !thumb && check2 && imageReceiver.getBitmap() != null) { + imageReceiverColor = AndroidUtilities.getDominantColor(imageReceiver.getBitmap()); + if (checkBoxBase != null) { + checkBoxBase.setBackgroundColor(Theme.blendOver(imageReceiverColor, Theme.multAlpha(Color.WHITE, .25f))); + } + } }); viewsText.setCallback(this); @@ -177,17 +200,43 @@ public void onCheckBoxPressed() { } + private TLRPC.MessageMedia getStoryMedia(MessageObject messageObject) { + if (messageObject == null || messageObject.storyItem == null) return null; + return messageObject.storyItem.media; + } + + private boolean mediaEqual(TLRPC.MessageMedia a, TLRPC.MessageMedia b) { + if (a == null && b == null) return true; + if (a == null || b == null) return false; + if (a.document != null) { + return b.document != null && b.document.id == a.document.id; + } + if (a.photo != null) { + return b.photo != null && b.photo.id == a.photo.id; + } + return false; + } + public void setMessageObject(MessageObject messageObject, int parentColumnsCount) { int oldParentColumnsCount = currentParentColumnsCount; currentParentColumnsCount = parentColumnsCount; if (currentMessageObject == null && messageObject == null) { return; } - if (currentMessageObject != null && messageObject != null && currentMessageObject.getId() == messageObject.getId() && oldParentColumnsCount == parentColumnsCount && (privacyType == 100) == isStoryPinned) { + if (currentMessageObject != null && + messageObject != null && + currentMessageObject.getId() == messageObject.getId() && + ((currentMessageObject != null ? currentMessageObject.uploadingStory : null) == (messageObject != null ? messageObject.uploadingStory : null)) && + ((currentMessageObject != null ? currentMessageObject.parentStoriesList : null) == (messageObject != null ? messageObject.parentStoriesList : null)) && + mediaEqual(getStoryMedia(currentMessageObject), getStoryMedia(messageObject)) && + oldParentColumnsCount == parentColumnsCount && + (privacyType == 100) == isStoryPinned + ) { return; } currentMessageObject = messageObject; isStory = currentMessageObject != null && currentMessageObject.isStory(); + isStoryUploading = currentMessageObject != null && currentMessageObject.uploadingStory != null; updateSpoilers2(); if (messageObject == null) { imageReceiver.onDetachedFromWindow(); @@ -210,7 +259,7 @@ public void setMessageObject(MessageObject messageObject, int parentColumnsCount blurImageReceiver.onAttachedToWindow(); } } - String restrictionReason = MessagesController.getRestrictionReason(messageObject.messageOwner.restriction_reason); + String restrictionReason = MessagesController.getInstance(currentAccount).getRestrictionReason(messageObject.messageOwner.restriction_reason); String imageFilter; int stride; int width = (int) (AndroidUtilities.displaySize.x / parentColumnsCount / AndroidUtilities.density); @@ -238,6 +287,7 @@ public void setMessageObject(MessageObject messageObject, int parentColumnsCount viewsText.setText("", false); } viewsAlpha.set(drawViews ? 1f : 0f, true); + Object parentObject = messageObject.parentStoriesList != null ? messageObject.storyItem : messageObject; if (!TextUtils.isEmpty(restrictionReason)) { showImageStub = true; } else if (messageObject.storyItem != null && messageObject.storyItem.media instanceof TLRPC.TL_messageMediaUnsupported) { @@ -245,6 +295,8 @@ public void setMessageObject(MessageObject messageObject, int parentColumnsCount Drawable icon = getContext().getResources().getDrawable(R.drawable.msg_emoji_recent).mutate(); icon.setColorFilter(new PorterDuffColorFilter(0x40FFFFFF, PorterDuff.Mode.SRC_IN)); imageReceiver.setImageBitmap(new CombinedDrawable(new ColorDrawable(0xFF333333), icon)); + } else if (messageObject.uploadingStory != null && messageObject.uploadingStory.firstFramePath != null) { + imageReceiver.setImage(ImageLocation.getForPath(messageObject.uploadingStory.firstFramePath), imageFilter, null, null, parentObject, 0); } else if (messageObject.isVideo()) { showVideoLayout = true; if (parentColumnsCount != 9) { @@ -252,9 +304,9 @@ public void setMessageObject(MessageObject messageObject, int parentColumnsCount } if (messageObject.mediaThumb != null) { if (messageObject.strippedThumb != null) { - imageReceiver.setImage(messageObject.mediaThumb, imageFilter, messageObject.strippedThumb, null, messageObject, 0); + imageReceiver.setImage(messageObject.mediaThumb, imageFilter, messageObject.strippedThumb, null, parentObject, 0); } else { - imageReceiver.setImage(messageObject.mediaThumb, imageFilter, messageObject.mediaSmallThumb, imageFilter + "_b", null, 0, null, messageObject, 0); + imageReceiver.setImage(messageObject.mediaThumb, imageFilter, messageObject.mediaSmallThumb, imageFilter + "_b", null, 0, null, parentObject, 0); } } else { TLRPC.Document document = messageObject.getDocument(); @@ -265,9 +317,9 @@ public void setMessageObject(MessageObject messageObject, int parentColumnsCount } if (thumb != null) { if (messageObject.strippedThumb != null) { - imageReceiver.setImage(ImageLocation.getForDocument(qualityThumb, document), imageFilter, messageObject.strippedThumb, null, messageObject, 0); + imageReceiver.setImage(ImageLocation.getForDocument(qualityThumb, document), imageFilter, messageObject.strippedThumb, null, parentObject, 0); } else { - imageReceiver.setImage(ImageLocation.getForDocument(qualityThumb, document), imageFilter, ImageLocation.getForDocument(thumb, document), imageFilter + "_b", null, 0, null, messageObject, 0); + imageReceiver.setImage(ImageLocation.getForDocument(qualityThumb, document), imageFilter, ImageLocation.getForDocument(thumb, document), imageFilter + "_b", null, 0, null, parentObject, 0); } } else { showImageStub = true; @@ -277,9 +329,9 @@ public void setMessageObject(MessageObject messageObject, int parentColumnsCount if (messageObject.mediaExists || canAutoDownload(messageObject) || isStory) { if (messageObject.mediaThumb != null) { if (messageObject.strippedThumb != null) { - imageReceiver.setImage(messageObject.mediaThumb, imageFilter, messageObject.strippedThumb, null, messageObject, 0); + imageReceiver.setImage(messageObject.mediaThumb, imageFilter, messageObject.strippedThumb, null, parentObject, 0); } else { - imageReceiver.setImage(messageObject.mediaThumb, imageFilter, messageObject.mediaSmallThumb, imageFilter + "_b", null, 0, null, messageObject, 0); + imageReceiver.setImage(messageObject.mediaThumb, imageFilter, messageObject.mediaSmallThumb, imageFilter + "_b", null, 0, null, parentObject, 0); } } else { TLRPC.PhotoSize currentPhotoObjectThumb = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, 50); @@ -288,17 +340,17 @@ public void setMessageObject(MessageObject messageObject, int parentColumnsCount currentPhotoObjectThumb = null; } if (messageObject.strippedThumb != null) { - imageReceiver.setImage(ImageLocation.getForObject(currentPhotoObject, messageObject.photoThumbsObject), imageFilter, null, null, messageObject.strippedThumb, currentPhotoObject != null ? currentPhotoObject.size : 0, null, messageObject, messageObject.shouldEncryptPhotoOrVideo() ? 2 : 1); + imageReceiver.setImage(ImageLocation.getForObject(currentPhotoObject, messageObject.photoThumbsObject), imageFilter, null, null, messageObject.strippedThumb, currentPhotoObject != null ? currentPhotoObject.size : 0, null, parentObject, messageObject.shouldEncryptPhotoOrVideo() ? 2 : 1); } else { - imageReceiver.setImage(ImageLocation.getForObject(currentPhotoObject, messageObject.photoThumbsObject), imageFilter, ImageLocation.getForObject(currentPhotoObjectThumb, messageObject.photoThumbsObject), imageFilter + "_b", currentPhotoObject != null ? currentPhotoObject.size : 0, null, messageObject, messageObject.shouldEncryptPhotoOrVideo() ? 2 : 1); + imageReceiver.setImage(ImageLocation.getForObject(currentPhotoObject, messageObject.photoThumbsObject), imageFilter, ImageLocation.getForObject(currentPhotoObjectThumb, messageObject.photoThumbsObject), imageFilter + "_b", currentPhotoObject != null ? currentPhotoObject.size : 0, null, parentObject, messageObject.shouldEncryptPhotoOrVideo() ? 2 : 1); } } } else { if (messageObject.strippedThumb != null) { - imageReceiver.setImage(null, null, null, null, messageObject.strippedThumb, 0, null, messageObject, 0); + imageReceiver.setImage(null, null, null, null, messageObject.strippedThumb, 0, null, parentObject, 0); } else { TLRPC.PhotoSize currentPhotoObjectThumb = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, 50); - imageReceiver.setImage(null, null, ImageLocation.getForObject(currentPhotoObjectThumb, messageObject.photoThumbsObject), "b", null, 0, null, messageObject, 0); + imageReceiver.setImage(null, null, ImageLocation.getForObject(currentPhotoObjectThumb, messageObject.photoThumbsObject), "b", null, 0, null, parentObject, 0); } } } else { @@ -430,7 +482,7 @@ protected void onDraw(Canvas canvas) { canvas.save(); } - if (((checkBoxBase != null && checkBoxBase.isChecked()) || PhotoViewer.isShowingImage(currentMessageObject))) { + if (((checkBoxBase != null && checkBoxBase.isChecked()) || PhotoViewer.isShowingImage(currentMessageObject)) && !check2) { canvas.drawRect(leftpadding, padding, leftpadding + imageWidth - rightpadding, imageHeight, sharedResources.backgroundPaint); } @@ -454,7 +506,7 @@ protected void onDraw(Canvas canvas) { } imageReceiver.setImageCoords((imageWidth - w) / 2, 0, w, getHeight()); } else if (checkBoxProgress > 0) { - float offset = dp(10) * checkBoxProgress; + float offset = dp(check2 ? 7 : 10) * checkBoxProgress; imageReceiver.setImageCoords(leftpadding + offset, padding + offset, imageWidth - offset * 2, imageHeight - offset * 2); blurImageReceiver.setImageCoords(leftpadding + offset, padding + offset, imageWidth - offset * 2, imageHeight - offset * 2); } else { @@ -465,6 +517,16 @@ protected void onDraw(Canvas canvas) { imageReceiver.setImageCoords(leftpadding + padPlus, padding + padPlus, imageWidth, imageHeight); blurImageReceiver.setImageCoords(leftpadding + padPlus, padding + padPlus, imageWidth, imageHeight); } + if (check2) { + imageReceiver.setRoundRadius(AndroidUtilities.lerp(0, dp(8), checkBoxProgress)); + canvas.save(); + if (reorder) { + canvas.translate(imageReceiver.getCenterX(), imageReceiver.getCenterY()); + if (shaker == null) shaker = new Shaker(this); + shaker.concat(canvas, checkBoxProgress); + canvas.translate(-imageReceiver.getCenterX(), -imageReceiver.getCenterY()); + } + } if (!PhotoViewer.isShowingImage(currentMessageObject)) { imageReceiver.draw(canvas); if (currentMessageObject != null && currentMessageObject.hasMediaSpoilers() && !currentMessageObject.isMediaSpoilersRevealedInSharedMedia) { @@ -498,6 +560,23 @@ protected void onDraw(Canvas canvas) { canvas.drawRect(imageReceiver.getDrawRegion(), sharedResources.highlightPaint); } } + if (isStoryUploading) { + scrimPaint.setColor(0x30000000); + canvas.drawRect(imageReceiver.getDrawRegion(), scrimPaint); + progressPaint.setStyle(Paint.Style.STROKE); + progressPaint.setColor(Color.WHITE); + progressPaint.setStrokeWidth(dp(3)); + progressPaint.setStrokeJoin(Paint.Join.ROUND); + progressPaint.setStrokeCap(Paint.Cap.ROUND); + final float r = dp(18); + AndroidUtilities.rectTmp.set( + imageReceiver.getCenterX() - r, imageReceiver.getCenterY() - r, + imageReceiver.getCenterX() + r, imageReceiver.getCenterY() + r + ); + final float a = (System.currentTimeMillis() % 1500L) / 1500f * 360f; + canvas.drawArc(AndroidUtilities.rectTmp, a, animatedProgress.set(AndroidUtilities.lerp(0.15f, 0.95f, currentMessageObject != null ? currentMessageObject.getProgress() : 0f)) * 360, false, progressPaint); + invalidate(); + } bounds.set(imageReceiver.getImageX(), imageReceiver.getImageY(), imageReceiver.getImageX2(), imageReceiver.getImageY2()); drawDuration(canvas, bounds, 1f); @@ -507,13 +586,25 @@ protected void onDraw(Canvas canvas) { } else { drawAuthor(canvas, bounds, 1f); } + if (check2) { + canvas.restore(); + } if (checkBoxBase != null && (style == STYLE_CACHE || checkBoxBase.getProgress() != 0)) { canvas.save(); + if (check2 && reorder) { + canvas.translate(imageReceiver.getCenterX(), imageReceiver.getCenterY()); + if (shaker == null) shaker = new Shaker(this); + shaker.concat(canvas, .5f * checkBoxProgress); + canvas.translate(-imageReceiver.getCenterX(), -imageReceiver.getCenterY()); + } float x, y; if (style == STYLE_CACHE) { x = imageWidth + dp(2) - dp(25) - dp(4); y = dp(4); + } else if (check2) { + x = imageWidth + dp(2) - dp(22 + 5 * checkBoxProgress); + y = dp(-2) + dp(5) * checkBoxProgress; } else { x = imageWidth + dp(2) - dp(25); y = 0; @@ -827,6 +918,9 @@ public void setChecked(final boolean checked, boolean animated) { if (checkBoxBase == null) { checkBoxBase = new CheckBoxBase(this, 21, null); checkBoxBase.setColor(-1, Theme.key_sharedMedia_photoPlaceholder, Theme.key_checkboxCheck); + if (check2 && imageReceiverColor != 0) { + checkBoxBase.setBackgroundColor(Theme.blendOver(imageReceiverColor, Theme.multAlpha(Color.WHITE, .25f))); + } checkBoxBase.setDrawUnchecked(false); checkBoxBase.setBackgroundType(1); checkBoxBase.setBounds(0, 0, dp(24), dp(24)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextCell.java index 155c76cdbf3..c9b0988fc2e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextCell.java @@ -378,7 +378,7 @@ public void setTextAndColorfulIcon(CharSequence text, int resId, int color, bool } } - public void setTextAndIcon(String text, Drawable drawable, boolean divider) { + public void setTextAndIcon(CharSequence text, Drawable drawable, boolean divider) { offsetFromImage = 71; imageLeft = 18; textView.setText(text); @@ -441,7 +441,8 @@ public void setTextAndValue(CharSequence text, CharSequence value, boolean anima offsetFromImage = getOffsetFromImage(false); textView.setText(text); textView.setRightDrawable(null); - valueTextView.setText(TextUtils.ellipsize(valueText = value, valueTextView.getPaint(), AndroidUtilities.displaySize.x / 2.5f, TextUtils.TruncateAt.END), animated); + valueText = value; + valueTextView.setText(valueText == null ? null : TextUtils.ellipsize(valueText, valueTextView.getPaint(), AndroidUtilities.displaySize.x / 2.5f, TextUtils.TruncateAt.END), animated); valueTextView.setVisibility(VISIBLE); valueSpoilersTextView.setVisibility(GONE); imageView.setVisibility(GONE); @@ -633,7 +634,7 @@ public void setTextAndCheckAndIcon(String text, boolean checked, Drawable resDra } } - public void setTextAndValueDrawable(String text, Drawable drawable, boolean divider) { + public void setTextAndValueDrawable(CharSequence text, Drawable drawable, boolean divider) { imageLeft = 21; offsetFromImage = getOffsetFromImage(false); textView.setText(text); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextInfoPrivacyCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextInfoPrivacyCell.java index f45fbd1749a..fd92d4ce384 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextInfoPrivacyCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextInfoPrivacyCell.java @@ -121,7 +121,9 @@ public void setLinkTextColorKey(int key) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - if (fixedSize != 0) { + if (fixedSize == -1) { + super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(0, MeasureSpec.EXACTLY)); + } else if (fixedSize != 0) { super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(fixedSize), MeasureSpec.EXACTLY)); } else { super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextSelectionHelper.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextSelectionHelper.java index 3ddaa4d8400..d256728f91e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextSelectionHelper.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextSelectionHelper.java @@ -2740,28 +2740,31 @@ public void draw(Canvas canvas, ArticleSelectableView view, int i) { if (!arrayList.isEmpty()) { TextLayoutBlock layoutBlock = arrayList.get(i); - int endOffset = endViewOffset; - int textLen = layoutBlock.getLayout().getText().length(); + if (layoutBlock != null && layoutBlock.getLayout() != null && layoutBlock.getLayout().getText() != null) { - if (endOffset > textLen) { - endOffset = textLen; - } - if (position == startViewPosition && position == endViewPosition) { - if (startViewChildPosition == endViewChildPosition && startViewChildPosition == i) { - drawSelection(canvas, layoutBlock.getLayout(), startViewOffset, endOffset, true, true, 0); - } else if (i == startViewChildPosition) { + int endOffset = endViewOffset; + int textLen = layoutBlock.getLayout().getText().length(); + + if (endOffset > textLen) { + endOffset = textLen; + } + if (position == startViewPosition && position == endViewPosition) { + if (startViewChildPosition == endViewChildPosition && startViewChildPosition == i) { + drawSelection(canvas, layoutBlock.getLayout(), startViewOffset, endOffset, true, true, 0); + } else if (i == startViewChildPosition) { + drawSelection(canvas, layoutBlock.getLayout(), startViewOffset, textLen, true, false, 0); + } else if (i == endViewChildPosition) { + drawSelection(canvas, layoutBlock.getLayout(), 0, endOffset, false, true, 0); + } else if (i > startViewChildPosition && i < endViewChildPosition) { + drawSelection(canvas, layoutBlock.getLayout(), 0, textLen, false, false, 0); + } + } else if (position == startViewPosition && startViewChildPosition == i) { drawSelection(canvas, layoutBlock.getLayout(), startViewOffset, textLen, true, false, 0); - } else if (i == endViewChildPosition) { + } else if (position == endViewPosition && endViewChildPosition == i) { drawSelection(canvas, layoutBlock.getLayout(), 0, endOffset, false, true, 0); - } else if (i > startViewChildPosition && i < endViewChildPosition) { + } else if (position > startViewPosition && position < endViewPosition || (position == startViewPosition && i > startViewChildPosition) || (position == endViewPosition && i < endViewChildPosition)) { drawSelection(canvas, layoutBlock.getLayout(), 0, textLen, false, false, 0); } - } else if (position == startViewPosition && startViewChildPosition == i) { - drawSelection(canvas, layoutBlock.getLayout(), startViewOffset, textLen, true, false, 0); - } else if (position == endViewPosition && endViewChildPosition == i) { - drawSelection(canvas, layoutBlock.getLayout(), 0, endOffset, false, true, 0); - } else if (position > startViewPosition && position < endViewPosition || (position == startViewPosition && i > startViewChildPosition) || (position == endViewPosition && i < endViewChildPosition)) { - drawSelection(canvas, layoutBlock.getLayout(), 0, textLen, false, false, 0); } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell.java index a48abd0e27c..f7e379cce46 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell.java @@ -8,6 +8,8 @@ package org.telegram.ui.Cells; +import static org.telegram.messenger.AndroidUtilities.dp; + import android.content.Context; import android.graphics.Canvas; import android.graphics.PorterDuff; @@ -134,9 +136,9 @@ public UserCell(Context context, int padding, int checkbox, boolean admin, boole addButton.setTypeface(AndroidUtilities.bold()); addButton.setBackgroundDrawable(Theme.AdaptiveRipple.filledRectByKey(Theme.key_featuredStickers_addButton, 4)); addButton.setText(LocaleController.getString("Add", R.string.Add)); - addButton.setPadding(AndroidUtilities.dp(17), 0, AndroidUtilities.dp(17), 0); + addButton.setPadding(dp(17), 0, dp(17), 0); addView(addButton, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, 28, Gravity.TOP | (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT), LocaleController.isRTL ? 14 : 0, 15, LocaleController.isRTL ? 0 : 14, 0)); - additionalPadding = (int) Math.ceil((addButton.getPaint().measureText(addButton.getText().toString()) + AndroidUtilities.dp(34 + 14)) / AndroidUtilities.density); + additionalPadding = (int) Math.ceil((addButton.getPaint().measureText(addButton.getText().toString()) + dp(34 + 14)) / AndroidUtilities.density); } else { additionalPadding = 0; } @@ -165,7 +167,7 @@ public boolean onTouchEvent(MotionEvent event) { return super.onTouchEvent(event); } }; - avatarImageView.setRoundRadius(AndroidUtilities.dp(24)); + avatarImageView.setRoundRadius(dp(24)); addView(avatarImageView, LayoutHelper.createFrame(46, 46, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, LocaleController.isRTL ? 0 : 7 + padding, 6, LocaleController.isRTL ? 7 + padding : 0, 0)); setClipChildren(false); @@ -176,7 +178,7 @@ public boolean onTouchEvent(MotionEvent event) { nameTextView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP); addView(nameTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 20, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, LocaleController.isRTL ? 28 + (checkbox == 2 ? 18 : 0) + additionalPadding : (64 + padding), 10, LocaleController.isRTL ? (64 + padding) : 28 + (checkbox == 2 ? 18 : 0) + additionalPadding, 0)); - emojiStatus = new AnimatedEmojiDrawable.SwapAnimatedEmojiDrawable(nameTextView, AndroidUtilities.dp(20)); + emojiStatus = new AnimatedEmojiDrawable.SwapAnimatedEmojiDrawable(nameTextView, dp(20)); statusTextView = new SimpleTextView(context); statusTextView.setTextSize(15); @@ -219,22 +221,22 @@ public boolean onTouchEvent(MotionEvent event) { public void setAvatarPadding(int padding) { LayoutParams layoutParams = (LayoutParams) avatarImageView.getLayoutParams(); - layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? 0 : 7 + padding); - layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? 7 + padding : 0); + layoutParams.leftMargin = dp(LocaleController.isRTL ? 0 : 7 + padding); + layoutParams.rightMargin = dp(LocaleController.isRTL ? 7 + padding : 0); avatarImageView.setLayoutParams(layoutParams); layoutParams = (LayoutParams) nameTextView.getLayoutParams(); - layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? 28 + (checkBoxBig != null ? 18 : 0) : (64 + padding)); - layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? (64 + padding) : 28 + (checkBoxBig != null ? 18 : 0)); + layoutParams.leftMargin = dp(LocaleController.isRTL ? 28 + (checkBoxBig != null ? 18 : 0) : (64 + padding)); + layoutParams.rightMargin = dp(LocaleController.isRTL ? (64 + padding) : 28 + (checkBoxBig != null ? 18 : 0)); layoutParams = (FrameLayout.LayoutParams) statusTextView.getLayoutParams(); - layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? 28 : (64 + padding)); - layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? (64 + padding) : 28); + layoutParams.leftMargin = dp(LocaleController.isRTL ? 28 : (64 + padding)); + layoutParams.rightMargin = dp(LocaleController.isRTL ? (64 + padding) : 28); if (checkBox != null) { layoutParams = (FrameLayout.LayoutParams) checkBox.getLayoutParams(); - layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? 0 : 37 + padding); - layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? 37 + padding : 0); + layoutParams.leftMargin = dp(LocaleController.isRTL ? 0 : 37 + padding); + layoutParams.rightMargin = dp(LocaleController.isRTL ? 37 + padding : 0); } } @@ -254,12 +256,18 @@ public void setAdminRole(String role) { if (role != null) { CharSequence text = adminTextView.getText(); int size = (int) Math.ceil(adminTextView.getPaint().measureText(text, 0, text.length())); - nameTextView.setPadding(LocaleController.isRTL ? size + AndroidUtilities.dp(6) : 0, 0, !LocaleController.isRTL ? size + AndroidUtilities.dp(6) : 0, 0); + setRightPadding(size, true, false); } else { - nameTextView.setPadding(0, 0, 0, 0); + setRightPadding(0, true, false); } } + public void setRightPadding(int pad, boolean top, boolean bottom) { + if (pad > 0) pad += dp(6); + if (top) nameTextView.setPadding(LocaleController.isRTL ? pad : 0, 0, !LocaleController.isRTL ? pad : 0, 0); + if (bottom) statusTextView.setPadding(LocaleController.isRTL ? pad : 0, 0, !LocaleController.isRTL ? pad : 0, 0); + } + public CharSequence getName() { return nameTextView.getText(); } @@ -287,7 +295,7 @@ public void setData(Object object, TLRPC.EncryptedChat ec, CharSequence name, Ch currentStatus = status; try { if (name != null && nameTextView != null) { - name = Emoji.replaceEmoji(name, nameTextView.getPaint().getFontMetricsInt(), AndroidUtilities.dp(18), false); + name = Emoji.replaceEmoji(name, nameTextView.getPaint().getFontMetricsInt(), dp(18), false); } } catch (Exception ignore) {} currentName = name; @@ -412,7 +420,7 @@ public void setCheckDisabled(boolean disabled) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(58) + (needDivider ? 1 : 0), MeasureSpec.EXACTLY)); + super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(dp(58) + (needDivider ? 1 : 0), MeasureSpec.EXACTLY)); } public void setStatusColors(int color, int onlineColor) { @@ -480,7 +488,7 @@ public void update(int mask) { } if (currentObject instanceof String) { - ((LayoutParams) nameTextView.getLayoutParams()).topMargin = AndroidUtilities.dp(19); + ((LayoutParams) nameTextView.getLayoutParams()).topMargin = dp(19); String str = (String) currentObject; switch (str) { case "contacts": @@ -517,14 +525,14 @@ public void update(int mask) { avatarImageView.setImage(null, "50_50", avatarDrawable); currentStatus = ""; } else { - ((LayoutParams) nameTextView.getLayoutParams()).topMargin = AndroidUtilities.dp(10); + ((LayoutParams) nameTextView.getLayoutParams()).topMargin = dp(10); if (currentUser != null) { if (selfAsSavedMessages && UserObject.isUserSelf(currentUser)) { nameTextView.setText(LocaleController.getString("SavedMessages", R.string.SavedMessages), true); statusTextView.setText(null); avatarDrawable.setAvatarType(AvatarDrawable.AVATAR_TYPE_SAVED); avatarImageView.setImage(null, "50_50", avatarDrawable, currentUser); - ((LayoutParams) nameTextView.getLayoutParams()).topMargin = AndroidUtilities.dp(19); + ((LayoutParams) nameTextView.getLayoutParams()).topMargin = dp(19); return; } avatarDrawable.setInfo(currentAccount, currentUser); @@ -556,7 +564,7 @@ public void update(int mask) { CharSequence name = lastName; if (name != null) { try { - name = Emoji.replaceEmoji(lastName, nameTextView.getPaint().getFontMetricsInt(), AndroidUtilities.dp(18), false); + name = Emoji.replaceEmoji(lastName, nameTextView.getPaint().getFontMetricsInt(), dp(18), false); } catch (Exception ignore) {} } nameTextView.setText(name); @@ -573,11 +581,11 @@ public void update(int mask) { } else { if (premiumDrawable == null) { premiumDrawable = getContext().getResources().getDrawable(R.drawable.msg_premium_liststar).mutate(); - premiumDrawable = new AnimatedEmojiDrawable.WrapSizeDrawable(premiumDrawable, AndroidUtilities.dp(14), AndroidUtilities.dp(14)) { + premiumDrawable = new AnimatedEmojiDrawable.WrapSizeDrawable(premiumDrawable, dp(14), dp(14)) { @Override public void draw(@NonNull Canvas canvas) { canvas.save(); - canvas.translate(0, AndroidUtilities.dp(1)); + canvas.translate(0, dp(1)); super.draw(canvas); canvas.restore(); } @@ -586,7 +594,7 @@ public void draw(@NonNull Canvas canvas) { } nameTextView.setRightDrawable(premiumDrawable); } - nameTextView.setRightDrawableTopPadding(-AndroidUtilities.dp(0.5f)); + nameTextView.setRightDrawableTopPadding(-dp(0.5f)); } else { nameTextView.setRightDrawable(null); nameTextView.setRightDrawableTopPadding(0); @@ -627,7 +635,7 @@ public void draw(@NonNull Canvas canvas) { avatarImageView.setImageDrawable(avatarDrawable); } - avatarImageView.setRoundRadius(currentChat != null && currentChat.forum ? AndroidUtilities.dp(14) : AndroidUtilities.dp(24)); + avatarImageView.setRoundRadius(currentChat != null && currentChat.forum ? dp(14) : dp(24)); nameTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); if (adminTextView != null) { @@ -647,7 +655,7 @@ public boolean hasOverlappingRendering() { @Override protected void onDraw(Canvas canvas) { if (needDivider) { - canvas.drawLine(LocaleController.isRTL ? 0 : AndroidUtilities.dp(68), getMeasuredHeight() - 1, getMeasuredWidth() - (LocaleController.isRTL ? AndroidUtilities.dp(68) : 0), getMeasuredHeight() - 1, Theme.dividerPaint); + canvas.drawLine(LocaleController.isRTL ? 0 : dp(68), getMeasuredHeight() - 1, getMeasuredWidth() - (LocaleController.isRTL ? dp(68) : 0), getMeasuredHeight() - 1, Theme.dividerPaint); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChangeUsernameActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChangeUsernameActivity.java index 71933d9ae00..5f9a472da5a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChangeUsernameActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChangeUsernameActivity.java @@ -66,6 +66,7 @@ import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.ui.ActionBar.ActionBar; import org.telegram.ui.ActionBar.ActionBarMenu; import org.telegram.ui.ActionBar.AlertDialog; @@ -316,7 +317,7 @@ public void onItemClick(View view, int position) { toggle.active = reqActive; req = toggle; } else { - TLRPC.TL_bots_toggleUsername toggle = new TLRPC.TL_bots_toggleUsername(); + TL_bots.toggleUsername toggle = new TL_bots.toggleUsername(); toggle.bot = MessagesController.getInstance(currentAccount).getInputUser(botId); toggle.username = reqUsername; toggle.active = reqActive; @@ -615,7 +616,7 @@ private void sendReorder() { reorder.order = usernames; req = reorder; } else { - TLRPC.TL_bots_reorderUsernames reorder = new TLRPC.TL_bots_reorderUsernames(); + TL_bots.reorderUsernames reorder = new TL_bots.reorderUsernames(); reorder.bot = MessagesController.getInstance(currentAccount).getInputUser(botId); reorder.order = usernames; req = reorder; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java index 51fe11eba4d..8a324a92c6e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java @@ -544,7 +544,7 @@ private void loadMessages(boolean reset) { MediaDataController.getInstance(currentAccount).loadReplyMessagesForMessages(missingReplies, -currentChat.id, ChatActivity.MODE_DEFAULT, 0, () -> { saveScrollPosition(false); chatAdapter.notifyDataSetChanged(); - }, getClassGuid()); + }, getClassGuid(), null); } filterDeletedMessages(); @@ -1600,6 +1600,17 @@ private boolean createMenu(View v, float x, float y) { final ArrayList<Integer> options = new ArrayList<>(); final ArrayList<Integer> icons = new ArrayList<>(); + if (currentChat != null && message.currentEvent != null && message.currentEvent.action instanceof TLRPC.TL_channelAdminLogEventActionParticipantJoinByInvite) { + TLRPC.TL_channelAdminLogEventActionParticipantJoinByInvite action = (TLRPC.TL_channelAdminLogEventActionParticipantJoinByInvite) message.currentEvent.action; + if (action.invite != null) { + TLRPC.ChatFull chatFull = getMessagesController().getChatFull(currentChat.id); + InviteLinkBottomSheet sheet = new InviteLinkBottomSheet(getContext(), action.invite, chatFull, null, this, currentChat.id, false, ChatObject.isChannelAndNotMegaGroup(currentChat)); + sheet.setCanEdit(false); + sheet.show(); + return true; + } + } + if (message.currentEvent != null && (message.currentEvent.action instanceof TLRPC.TL_channelAdminLogEventActionDeleteMessage && message.currentEvent.user_id == getMessagesController().telegramAntispamUserId || message.currentEvent.action instanceof TLRPC.TL_channelAdminLogEventActionToggleAntiSpam)) { if (v instanceof ChatActionCell) { SpannableString arrow = new SpannableString(">"); @@ -3007,12 +3018,12 @@ public void didPressUrl(ChatMessageCell cell, final CharacterStyle url, boolean if (peerId > 0) { TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(peerId); if (user != null) { - MessagesController.openChatOrProfileWith(user, null, ChannelAdminLogActivity.this, 0, false); + MessagesController.getInstance(currentAccount).openChatOrProfileWith(user, null, ChannelAdminLogActivity.this, 0, false); } } else { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-peerId); if (chat != null) { - MessagesController.openChatOrProfileWith(null, chat, ChannelAdminLogActivity.this, 0, false); + MessagesController.getInstance(currentAccount).openChatOrProfileWith(null, chat, ChannelAdminLogActivity.this, 0, false); } } } else if (url instanceof URLSpanNoUnderline) { @@ -3051,8 +3062,10 @@ public void didPressUrl(ChatMessageCell cell, final CharacterStyle url, boolean String lowerUrl = urlFinal.toLowerCase(); String lowerUrl2 = messageObject.messageOwner.media.webpage.url.toLowerCase(); if ((Browser.isTelegraphUrl(lowerUrl, false) || lowerUrl.contains("t.me/iv")) && (lowerUrl.contains(lowerUrl2) || lowerUrl2.contains(lowerUrl))) { - ArticleViewer.getInstance().setParentActivity(getParentActivity(), ChannelAdminLogActivity.this); - ArticleViewer.getInstance().open(messageObject); + if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(messageObject) != null) { + return; + } + ChannelAdminLogActivity.this.createArticleViewer(false).open(messageObject); return; } } @@ -3185,8 +3198,10 @@ public void didPressInstantButton(ChatMessageCell cell, int type) { presentFragment(chatActivity); } else if (type == 0) { if (messageObject.messageOwner.media != null && messageObject.messageOwner.media.webpage != null && messageObject.messageOwner.media.webpage.cached_page != null) { - ArticleViewer.getInstance().setParentActivity(getParentActivity(), ChannelAdminLogActivity.this); - ArticleViewer.getInstance().open(messageObject); + if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(messageObject) != null) { + return; + } + ChannelAdminLogActivity.this.createArticleViewer(false).open(messageObject); } } else if (type == 5) { openVCard(getMessagesController().getUser(messageObject.messageOwner.media.user_id), messageObject.messageOwner.media.vcard, messageObject.messageOwner.media.first_name, messageObject.messageOwner.media.last_name); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChannelMonetizationLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/ChannelMonetizationLayout.java index edee6cdc2a4..5bceee41b59 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChannelMonetizationLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChannelMonetizationLayout.java @@ -193,8 +193,10 @@ public ChannelMonetizationLayout( balanceInfo = AndroidUtilities.replaceArrows(AndroidUtilities.replaceSingleTag(getString(MessagesController.getInstance(currentAccount).channelRevenueWithdrawalEnabled ? R.string.MonetizationBalanceInfo : R.string.MonetizationBalanceInfoNotAvailable), -1, REPLACING_TAG_TYPE_LINK_NBSP, () -> { Browser.openUrl(getContext(), getString(R.string.MonetizationBalanceInfoLink)); }), true); - proceedsInfo = AndroidUtilities.replaceArrows(AndroidUtilities.replaceSingleTag(getString(R.string.MonetizationProceedsInfo), -1, REPLACING_TAG_TYPE_LINK_NBSP, () -> { - Browser.openUrl(getContext(), getString(R.string.MonetizationProceedsInfoLink)); + final int proceedsInfoText = starsRevenueAvailable && tonRevenueAvailable ? R.string.MonetizationProceedsStarsTONInfo : starsRevenueAvailable ? R.string.MonetizationProceedsStarsInfo : R.string.MonetizationProceedsTONInfo; + final int proceedsInfoLink = starsRevenueAvailable && tonRevenueAvailable ? R.string.MonetizationProceedsStarsTONInfoLink : starsRevenueAvailable ? R.string.MonetizationProceedsStarsInfoLink : R.string.MonetizationProceedsTONInfoLink; + proceedsInfo = AndroidUtilities.replaceArrows(AndroidUtilities.replaceSingleTag(getString(proceedsInfoText), -1, REPLACING_TAG_TYPE_LINK_NBSP, () -> { + Browser.openUrl(getContext(), getString(proceedsInfoLink)); }, resourcesProvider), true); starsBalanceInfo = AndroidUtilities.replaceArrows(AndroidUtilities.replaceSingleTag(getString(R.string.MonetizationStarsInfo), () -> { Browser.openUrl(getContext(), getString(R.string.MonetizationStarsInfoLink)); @@ -408,7 +410,7 @@ protected boolean subTextSplitToWords() { }); starsAdsButton = new ButtonWithCounterView(context, resourcesProvider); - starsAdsButton.setEnabled(true); + starsAdsButton.setEnabled(false); starsAdsButton.setText(getString(R.string.MonetizationStarsAds), false); starsAdsButton.setOnClickListener(v -> { if (!v.isEnabled() || starsAdsButton.isLoading()) return; @@ -681,6 +683,9 @@ private void setStarsBalance(long crypto_amount, int blockedUntil) { starsBalanceButton.setEnabled(starsBalanceEditTextValue > 0); } + if (starsAdsButton != null) { + starsAdsButton.setEnabled(amount > 0); + } starsBalanceBlockedUntil = blockedUntil; AndroidUtilities.cancelRunOnUIThread(setStarsBalanceButtonText); @@ -696,32 +701,43 @@ private void setStarsBalance(long crypto_amount, int blockedUntil) { private void loadStarsStats() { if (!starsRevenueAvailable) return; - TLRPC.TL_payments_getStarsRevenueStats req2 = new TLRPC.TL_payments_getStarsRevenueStats(); - req2.peer = MessagesController.getInstance(currentAccount).getInputPeer(dialogId); - req2.dark = Theme.isCurrentThemeDark(); - ConnectionsManager.getInstance(currentAccount).sendRequest(req2, (res2, err) -> AndroidUtilities.runOnUIThread(() -> { - if (res2 instanceof TLRPC.TL_payments_starsRevenueStats) { - TLRPC.TL_payments_starsRevenueStats stats = (TLRPC.TL_payments_starsRevenueStats) res2; - - stars_rate = stats.usd_rate; - starsRevenueChart = StatisticActivity.createViewData(stats.revenue_graph, getString(R.string.MonetizationGraphStarsRevenue), 2); - if (starsRevenueChart != null && starsRevenueChart.chartData != null && starsRevenueChart.chartData.lines != null && !starsRevenueChart.chartData.lines.isEmpty() && starsRevenueChart.chartData.lines.get(0) != null) { - starsRevenueChart.chartData.lines.get(0).colorKey = Theme.key_statisticChartLine_golden; - starsRevenueChart.chartData.yRate = (float) (1.0 / stars_rate / 100.0); - } - setupBalances(stats.status); - if (!tonRevenueAvailable) { - progress.animate().alpha(0).setDuration(380).setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT).withEndAction(() -> { - progress.setVisibility(View.GONE); - }).start(); + TLRPC.TL_payments_starsRevenueStats cachedStats = BotStarsController.getInstance(currentAccount).getRevenueStats(dialogId); + if (cachedStats != null) { + AndroidUtilities.runOnUIThread(() -> { + applyStarsStats(cachedStats); + }); + } else { + TLRPC.TL_payments_getStarsRevenueStats req2 = new TLRPC.TL_payments_getStarsRevenueStats(); + req2.peer = MessagesController.getInstance(currentAccount).getInputPeer(dialogId); + req2.dark = Theme.isCurrentThemeDark(); + ConnectionsManager.getInstance(currentAccount).sendRequest(req2, (res2, err) -> AndroidUtilities.runOnUIThread(() -> { + if (res2 instanceof TLRPC.TL_payments_starsRevenueStats) { + TLRPC.TL_payments_starsRevenueStats stats = (TLRPC.TL_payments_starsRevenueStats) res2; + applyStarsStats(stats); } + })); + } + } - if (listView != null) { - listView.adapter.update(true); - } - } - })); + private void applyStarsStats(TLRPC.TL_payments_starsRevenueStats stats) { + stars_rate = stats.usd_rate; + starsRevenueChart = StatisticActivity.createViewData(stats.revenue_graph, getString(R.string.MonetizationGraphStarsRevenue), 2); + if (starsRevenueChart != null && starsRevenueChart.chartData != null && starsRevenueChart.chartData.lines != null && !starsRevenueChart.chartData.lines.isEmpty() && starsRevenueChart.chartData.lines.get(0) != null) { + starsRevenueChart.chartData.lines.get(0).colorKey = Theme.key_statisticChartLine_golden; + starsRevenueChart.chartData.yRate = (float) (1.0 / stars_rate / 100.0); + } + setupBalances(stats.status); + + if (!tonRevenueAvailable && progress != null) { + progress.animate().alpha(0).setDuration(380).setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT).withEndAction(() -> { + progress.setVisibility(View.GONE); + }).start(); + } + + if (listView != null) { + listView.adapter.update(true); + } } private void initLevel() { @@ -826,7 +842,9 @@ public void setupBalances(TLRPC.TL_starsRevenueStatus balances) { lifetimeValue.amount2 = (long) (lifetimeValue.crypto_amount2 * stars_rate * 100.0); lifetimeValue.currency = "USD"; proceedsAvailable = true; - starsBalanceButton.setVisibility(balances.available_balance > 0 || BuildVars.DEBUG_PRIVATE_VERSION ? View.VISIBLE : View.GONE); + if (starsBalanceButton != null) { + starsBalanceButton.setVisibility(balances.available_balance > 0 || BuildVars.DEBUG_PRIVATE_VERSION ? View.VISIBLE : View.GONE); + } if (listView != null && listView.adapter != null) { listView.adapter.update(true); @@ -859,7 +877,7 @@ public void setActionBar(ActionBar actionBar) { } private void checkLearnSheet() { - if (isAttachedToWindow() && proceedsAvailable && MessagesController.getGlobalMainSettings().getBoolean("monetizationadshint", true)) { + if (isAttachedToWindow() && tonRevenueAvailable && proceedsAvailable && MessagesController.getGlobalMainSettings().getBoolean("monetizationadshint", true)) { showLearnSheet(); MessagesController.getGlobalMainSettings().edit().putBoolean("monetizationadshint", false).apply(); } @@ -1727,11 +1745,14 @@ public void reloadTransactions() { } } - private void updateLists(boolean animated) { + private void updateLists(boolean animated, boolean checkMore) { for (int i = 0; i < viewPager.getViewPages().length; ++i) { View page = viewPager.getViewPages()[i]; if (page instanceof Page) { ((Page) page).listView.adapter.update(animated); + if (checkMore) { + ((Page) page).checkMore(); + } } } } @@ -1765,7 +1786,7 @@ private void loadTransactions(int type) { tonTransactionsTotalCount = r.count; tonTransactions.addAll(r.transactions); - updateLists(true); + updateLists(true, true); loadingTransactions[type] = false; } else if (err != null) { BulletinFactory.showError(err); @@ -1791,7 +1812,7 @@ private void loadTransactions(int type) { MessagesController.getInstance(currentAccount).putChats(r.chats, false); starsTransactions.addAll(r.history); starsLastOffset = r.next_offset; - updateLists(true); + updateLists(true, true); loadingTransactions[type] = false; } else if (err != null) { BulletinFactory.showError(err); @@ -1829,18 +1850,27 @@ public Page(Context context, long bot_id, int type, int currentAccount, int clas listView.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { - scheduleLoadTransactions(); + if (!Page.this.listView.canScrollVertically(1) || isLoadingVisible()) { + loadMore.run(); + } } }); } - private void scheduleLoadTransactions() { - if (!Page.this.listView.canScrollVertically(1)) { - AndroidUtilities.cancelRunOnUIThread(loadMore); - AndroidUtilities.runOnUIThread(loadMore, 250); + public void checkMore() { + if (!Page.this.listView.canScrollVertically(1) || isLoadingVisible()) { + loadMore.run(); } } + public boolean isLoadingVisible() { + for (int i = 0; i < listView.getChildCount(); ++i) { + if (listView.getChildAt(i) instanceof FlickerLoadingView) + return true; + } + return false; + } + @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); @@ -1970,6 +2000,12 @@ public void onNestedPreScroll(View target, int dx, int dy, int[] consumed, int t if (innerListView != null && consumed[1] > 0) { innerListView.scrollBy(0, consumed[1]); } + } else if (dy > 0) { + RecyclerListView innerListView = transactionsLayout.getCurrentListView(); + if (listView.getHeight() - bottom >= 0 && innerListView != null && !innerListView.canScrollVertically(1)) { + consumed[1] = dy; + listView.stopScroll(); + } } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java index e85be56d44b..292d743f681 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java @@ -75,6 +75,7 @@ import android.text.style.ForegroundColorSpan; import android.text.style.ImageSpan; import android.text.style.URLSpan; +import android.util.Log; import android.util.Pair; import android.util.Property; import android.util.SparseArray; @@ -168,6 +169,7 @@ import org.telegram.messenger.SendMessagesHelper; import org.telegram.messenger.SharedConfig; import org.telegram.messenger.SvgHelper; +import org.telegram.messenger.Timer; import org.telegram.messenger.TranslateController; import org.telegram.messenger.UserConfig; import org.telegram.messenger.UserObject; @@ -180,6 +182,7 @@ import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.tgnet.tl.TL_stories; import org.telegram.ui.ActionBar.ActionBar; import org.telegram.ui.ActionBar.ActionBarLayout; @@ -240,8 +243,10 @@ import org.telegram.ui.Components.voip.CellFlickerDrawable; import org.telegram.ui.Components.voip.VoIPHelper; import org.telegram.ui.Delegates.ChatActivityMemberRequestsDelegate; +import org.telegram.ui.Stars.StarReactionsOverlay; import org.telegram.ui.Stars.StarsController; import org.telegram.ui.Stars.StarsIntroActivity; +import org.telegram.ui.Stars.StarsReactionsSheet; import org.telegram.ui.Stories.StoriesListPlaceProvider; import org.telegram.ui.Stories.StoriesUtilities; import org.telegram.ui.Stories.recorder.HintView2; @@ -251,6 +256,7 @@ import org.telegram.ui.bots.BotCommandsMenuView; import org.telegram.ui.bots.BotWebViewAttachedSheet; import org.telegram.ui.bots.BotWebViewSheet; +import org.telegram.ui.bots.WebViewRequestProps; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -544,7 +550,7 @@ public ArrayList<MessageObject> getFilteredMessages() { private int pinBullerinTag; protected boolean openKeyboardOnAttachMenuClose; private FlagSecureReason flagSecure; - private boolean isFullyVisible; + public boolean isFullyVisible; private MessageObject hintMessageObject; private int hintMessageType; @@ -838,7 +844,7 @@ public int getColor(int key) { public ProfileChannelCell.ChannelMessageFetcher profileChannelMessageFetcher; public ProfileBirthdayEffect.BirthdayEffectFetcher birthdayAssetsFetcher; - private LongSparseArray<TLRPC.BotInfo> botInfo = new LongSparseArray<>(); + private LongSparseArray<TL_bots.BotInfo> botInfo = new LongSparseArray<>(); private String botUser; private long inlineReturn; private String voiceChatHash; @@ -1106,7 +1112,7 @@ public boolean needPostpone(int id, int currentAccount, Object[] args) { private PinchToZoomHelper pinchToZoomHelper; public EmojiAnimationsOverlay emojiAnimationsOverlay; - public float drawingChatLisViewYoffset; + public float drawingChatListViewYoffset; public int blurredViewTopOffset; public int blurredViewBottomOffset; public ChatMessageSharedResources sharedResources; @@ -1124,6 +1130,17 @@ public static ChatActivity of(long dialogId) { return new ChatActivity(bundle); } + public static ChatActivity of(long dialogId, int messageId) { + Bundle bundle = new Bundle(); + if (dialogId >= 0) { + bundle.putLong("user_id", dialogId); + } else { + bundle.putLong("chat_id", -dialogId); + } + bundle.putInt("message_id", messageId); + return new ChatActivity(bundle); + } + public void deleteHistory(int dateSelectedStart, int dateSelectedEnd, boolean forAll) { chatAdapter.frozenMessages.clear(); for (int i = 0; i < messages.size(); i++) { @@ -1685,7 +1702,7 @@ public void onDoubleTap(View view, int position, float x, float y) { if (!available) { return; } - selectReaction(primaryMessage, null, null, x, y, ReactionsLayoutInBubble.VisibleReaction.fromEmojicon(reactionString), true, false, false, false); + selectReaction(cell, primaryMessage, null, null, x, y, ReactionsLayoutInBubble.VisibleReaction.fromEmojicon(reactionString), true, false, false, false); } else { TLRPC.TL_availableReaction reaction = getMediaDataController().getReactionsMap().get(reactionString); if (reaction == null || cell.getMessageObject().isSponsored()) { @@ -1698,7 +1715,7 @@ public void onDoubleTap(View view, int position, float x, float y) { if (!available) { return; } - selectReaction(primaryMessage, null, null, x, y, ReactionsLayoutInBubble.VisibleReaction.fromEmojicon(reaction), true, false, false, false); + selectReaction(cell, primaryMessage, null, null, x, y, ReactionsLayoutInBubble.VisibleReaction.fromEmojicon(reaction), true, false, false, false); } } }; @@ -2523,6 +2540,7 @@ public boolean onFragmentCreate() { getNotificationCenter().addObserver(this, NotificationCenter.didUpdateMessagesViews); getNotificationCenter().addObserver(this, NotificationCenter.didUpdatePollResults); getNotificationCenter().addObserver(this, NotificationCenter.availableEffectsUpdate); + getNotificationCenter().addObserver(this, NotificationCenter.starReactionAnonymousUpdate); if (currentEncryptedChat != null) { getNotificationCenter().addObserver(this, NotificationCenter.didVerifyMessagesStickers); } @@ -2580,6 +2598,7 @@ public boolean onFragmentCreate() { getNotificationCenter().addObserver(this, NotificationCenter.audioRecordTooShort); getNotificationCenter().addObserver(this, NotificationCenter.didUpdateReactions); getNotificationCenter().addObserver(this, NotificationCenter.savedReactionTagsUpdate); + getNotificationCenter().addObserver(this, NotificationCenter.updateAllMessages); getNotificationCenter().addObserver(this, NotificationCenter.didUpdateExtendedMedia); getNotificationCenter().addObserver(this, NotificationCenter.videoLoadingStateChanged); getNotificationCenter().addObserver(this, NotificationCenter.scheduledMessagesUpdated); @@ -2804,6 +2823,7 @@ private void firstLoadMessages() { return; } firstMessagesLoaded = true; +// Runnable load = () -> { waitingForLoad.add(lastLoadIndex); if (chatMode == MODE_SEARCH) { HashtagSearchController.getInstance(currentAccount).searchHashtag(searchingHashtag, classGuid, searchType, lastLoadIndex++); @@ -2828,6 +2848,8 @@ private void firstLoadMessages() { waitingForLoad.add(lastLoadIndex); getMessagesController().loadMessages(dialog_id, mergeDialogId, false, 1, 0, 0, true, 0, classGuid, 2, 0, MODE_SCHEDULED, chatMode == MODE_SAVED ? 0 : threadMessageId, replyMaxReadId, lastLoadIndex++, isTopic); } +// }; +// getMessagesController().checkSensitive(this, dialog_id, load, this::finishFragment); } private void fillInviterId(boolean load) { @@ -2994,6 +3016,7 @@ public void onFragmentDestroy() { getNotificationCenter().removeObserver(this, NotificationCenter.didUpdatePollResults); getNotificationCenter().removeObserver(this, NotificationCenter.didUpdateReactions); getNotificationCenter().removeObserver(this, NotificationCenter.savedReactionTagsUpdate); + getNotificationCenter().removeObserver(this, NotificationCenter.updateAllMessages); getNotificationCenter().removeObserver(this, NotificationCenter.didUpdateExtendedMedia); getNotificationCenter().removeObserver(this, NotificationCenter.chatOnlineCountDidLoad); getNotificationCenter().removeObserver(this, NotificationCenter.videoLoadingStateChanged); @@ -3017,6 +3040,7 @@ public void onFragmentDestroy() { getNotificationCenter().removeObserver(this, NotificationCenter.quickRepliesDeleted); getNotificationCenter().removeObserver(this, NotificationCenter.quickRepliesUpdated); getNotificationCenter().removeObserver(this, NotificationCenter.availableEffectsUpdate); + getNotificationCenter().removeObserver(this, NotificationCenter.starReactionAnonymousUpdate); getNotificationCenter().removeObserver(this, NotificationCenter.factCheckLoaded); if (chatMode == MODE_EDIT_BUSINESS_LINK) { getNotificationCenter().removeObserver(this, NotificationCenter.businessLinksUpdated); @@ -3084,6 +3108,11 @@ public void onFragmentDestroy() { birthdayAssetsFetcher.detach(true); birthdayAssetsFetcher = null; } + if (starReactionsOverlay != null) { + starReactionsOverlay.setMessageCell(null); + AndroidUtilities.removeFromParent(starReactionsOverlay); + starReactionsOverlay = null; + } } private static class ChatActivityTextSelectionHelper extends TextSelectionHelper.ChatListTextSelectionHelper { @@ -3195,11 +3224,14 @@ protected void onQuoteClick(MessageObject messageObject, int start, int end, Cha @Override public View createView(Context context) { + Timer t = Timer.create("ChatActivity.createView"); if (textSelectionHelper == null) { if (textSelectionHelpersCache != null && !textSelectionHelpersCache.isEmpty()) { textSelectionHelper = textSelectionHelpersCache.remove(0); } else { + Timer.Task t1 = Timer.start(t, "new ChatActivityTextSelectionHelper"); textSelectionHelper = new ChatActivityTextSelectionHelper(); + Timer.done(t1); } textSelectionHelper.setChatActivity(this); } @@ -3223,9 +3255,11 @@ public View createView(Context context) { } if (chatMessagesCache.size() < 10) { int n = 15 - chatMessagesCache.size(); + Timer.Task t2 = Timer.start(t, "create ChatMessageCell n=" + n); for (int a = 0; a < n; a++) { chatMessagesCache.add(new ChatMessageCell(context, currentAccount,true, sharedResources, themeDelegate)); } + Timer.done(t2); } for (int a = 1; a >= 0; a--) { selectedMessagesIds[a].clear(); @@ -3940,19 +3974,14 @@ public void toggleMute() { } else if (currentUser != null && currentUser.bot) { headerItem.lazilyAddSubItem(bot_settings, R.drawable.msg_settings_old, LocaleController.getString("BotSettings", R.string.BotSettings)); addedSettings = true; + headerItem.lazilyAddSubItem(bot_help, R.drawable.msg_help, LocaleController.getString("BotHelp", R.string.BotHelp)); headerItem.lazilyAddSubItem(delete_chat, R.drawable.msg_block2, LocaleController.getString(R.string.DeleteAndBlock)).setColors(getThemedColor(Theme.key_text_RedRegular), getThemedColor(Theme.key_text_RedRegular)); + updateBotButtons(); } else { headerItem.lazilyAddSubItem(delete_chat, R.drawable.msg_delete, LocaleController.getString("DeleteChatUser", R.string.DeleteChatUser)); } } } - if (currentUser != null && currentEncryptedChat == null && currentUser.bot) { - if (!addedSettings) { - headerItem.lazilyAddSubItem(bot_settings, R.drawable.msg_settings_old, LocaleController.getString("BotSettings", R.string.BotSettings)); - } - headerItem.lazilyAddSubItem(bot_help, R.drawable.msg_help, LocaleController.getString("BotHelp", R.string.BotHelp)); - updateBotButtons(); - } } else if (chatMode == MODE_EDIT_BUSINESS_LINK) { headerItem = menu.addItem(chat_menu_options, R.drawable.ic_ab_other, themeDelegate); headerItem.setContentDescription(LocaleController.getString("AccDescrMoreOptions", R.string.AccDescrMoreOptions)); @@ -4912,7 +4941,7 @@ protected void dispatchDraw(Canvas canvas) { if (pullingDownAnimateProgress != 0) { transitionOffset = (chatListView.getMeasuredHeight() - pullingDownOffset) * pullingDownAnimateProgress; } - canvas.translate(0, drawingChatLisViewYoffset = -pullingDownOffset - transitionOffset); + canvas.translate(0, drawingChatListViewYoffset = -pullingDownOffset - transitionOffset); drawChatBackgroundElements(canvas); super.dispatchDraw(canvas); drawChatForegroundElements(canvas); @@ -5025,7 +5054,7 @@ private void drawChatForegroundElements(Canvas canvas) { if (!selectionOnly && cell.getTransitionParams().wasDraw) { canvas.translate(canvasOffsetX, canvasOffsetY); cell.setInvalidatesParent(true); - cell.drawReactionsLayout(canvas, alpha); + cell.drawReactionsLayout(canvas, alpha, null); cell.setInvalidatesParent(false); } canvas.restore(); @@ -6214,6 +6243,9 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (chatActivityEnterView != null) { chatActivityEnterView.hideHints(); } + if (starReactionsOverlay != null) { + starReactionsOverlay.invalidate(); + } } }); @@ -8400,6 +8432,10 @@ protected void onShownUpdate(boolean finish) { updateSearchListEmptyView(); } + if (t != null) { + t.finish(); + } + return fragmentView; } @@ -8762,6 +8798,7 @@ private void updateFilteredMessages(boolean notify) { msg.stableId = lastStableId++; } msg.isOutOwnerCached = null; + Log.i("lolkek", "msg " + msg.getId() + " isOutOwnerCached is reset (2)"); if (msg.messageOwner != null) { msg.messageOwner.out = true; } @@ -8830,6 +8867,7 @@ private void updateFilteredMessages(boolean notify) { if (filteredMessagesDict.containsKey(msg.getId())) { continue; } + Log.i("lolkek", "msg " + msg.getId() + " isOutOwnerCached is reset (3)"); msg.isOutOwnerCached = null; if (msg.messageOwner != null) { msg.messageOwner.out = true; @@ -9419,7 +9457,7 @@ public void onReactionClicked(View view, ReactionsLayoutInBubble.VisibleReaction if (messageObject == null) continue; } if (messageObject.hasReaction(visibleReaction) == remove) { - selectReaction(messageObject, null, null, 0, 0, visibleReaction, false, false, false, true); + selectReaction(findMessageCell(messageObject.getId(), false), messageObject, null, null, 0, 0, visibleReaction, false, false, false, true); if (!remove) { messagesCount++; } @@ -11538,7 +11576,7 @@ private void sendBotInlineResult(TLRPC.BotInlineResult result, boolean notify, i SendMessagesHelper.prepareSendingBotContextResult(this, getAccountInstance(), result, params, dialog_id, replyingMessageObject, getThreadMessage(), null, replyingQuote, notify, scheduleDate, quickReplyShortcut, getQuickReplyId()); chatActivityEnterView.setFieldText(""); hideFieldPanel(false); - getMediaDataController().increaseInlineRaiting(uid); + getMediaDataController().increaseInlineRating(uid); } private void checkBotCommands() { @@ -11559,7 +11597,7 @@ private void checkBotCommands() { } } - private MessageObject.GroupedMessages getValidGroupedMessage(MessageObject message) { + public MessageObject.GroupedMessages getValidGroupedMessage(MessageObject message) { MessageObject.GroupedMessages groupedMessages = null; if (message.getGroupId() != 0) { groupedMessages = groupedMessagesMap.get(message.getGroupId()); @@ -11624,7 +11662,7 @@ public void jumpToDate(int date) { private boolean approved; public void processInlineBotWebView(TLRPC.TL_inlineBotWebView object) { final Runnable open = () -> { - final BotWebViewAttachedSheet.WebViewRequestProps props = BotWebViewAttachedSheet.WebViewRequestProps.of(currentAccount, currentUser != null ? currentUser.id : currentChat.id, mentionContainer.getAdapter().getFoundContextBot().id, object.text, object.url, BotWebViewSheet.TYPE_SIMPLE_WEB_VIEW_BUTTON, 0, false, null, false, null, null, BotWebViewSheet.FLAG_FROM_INLINE_SWITCH, false); + final WebViewRequestProps props = WebViewRequestProps.of(currentAccount, currentUser != null ? currentUser.id : currentChat.id, mentionContainer.getAdapter().getFoundContextBot().id, object.text, object.url, BotWebViewSheet.TYPE_SIMPLE_WEB_VIEW_BUTTON, 0, false, null, false, null, null, BotWebViewSheet.FLAG_FROM_INLINE_SWITCH, false); if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(props) != null) { return; } @@ -11651,7 +11689,7 @@ public void processInlineBotWebView(TLRPC.TL_inlineBotWebView object) { WebAppDisclaimerAlert.show(getContext(), ignored -> { approved = true; open.run(); - }, null); + }, null, null); } } @@ -12734,6 +12772,11 @@ public void onRemoveFromParent() { } else { MediaController.getInstance().setTextureView(videoTextureView, null, null, false); } + if (starReactionsOverlay != null) { + starReactionsOverlay.setMessageCell(null); + AndroidUtilities.removeFromParent(starReactionsOverlay); + starReactionsOverlay = null; + } super.onRemoveFromParent(); } @@ -13345,7 +13388,7 @@ private void requestLinkPreview(TLRPC.TL_messages_getWebPagePreview req, Utiliti } } AndroidUtilities.runOnUIThread(() -> { done.run(false, null); }); - }, classGuid, false); + }, classGuid, false, null); } catch (Exception ignore) {} }); } else { @@ -13754,7 +13797,7 @@ public void showFieldPanel(boolean show, MessageObject messageObjectToReply, Mes messagePreviewParams = null; } fieldPanelShown = 2; - String restrictionReason = MessagesController.getRestrictionReason(messageObjectToReply.messageOwner.restriction_reason); + String restrictionReason = MessagesController.getInstance(currentAccount).getRestrictionReason(messageObjectToReply.messageOwner.restriction_reason); chatActivityEnterView.setForceShowSendButton(false, false); CharSequence name = null; if (messageObjectToReply.isForwarded() && messageObjectToReply.getDialogId() != dialog_id) { @@ -14102,7 +14145,7 @@ public void showFieldPanel(boolean show, MessageObject messageObjectToReply, Mes TLRPC.PhotoSize photoSize = null; TLRPC.PhotoSize thumbPhotoSize = null; TLObject photoSizeObject = null; - if (thumbMediaMessageObject != null && TextUtils.isEmpty(MessagesController.getRestrictionReason(thumbMediaMessageObject.messageOwner.restriction_reason))) { + if (thumbMediaMessageObject != null && TextUtils.isEmpty(MessagesController.getInstance(currentAccount).getRestrictionReason(thumbMediaMessageObject.messageOwner.restriction_reason))) { photoSize = FileLoader.getClosestPhotoSizeWithSize(thumbMediaMessageObject.photoThumbs2, 320); thumbPhotoSize = FileLoader.getClosestPhotoSizeWithSize(thumbMediaMessageObject.photoThumbs2, AndroidUtilities.dp(40)); photoSizeObject = thumbMediaMessageObject.photoThumbsObject2; @@ -14645,7 +14688,7 @@ public void updateMessagesVisiblePart(boolean inLayout) { keyboardOffset = chatActivityEnterView.getEmojiPadding(); } - final boolean visibleToBeRead = currentChat == null || !ChatObject.isChannelAndNotMegaGroup(currentChat) || view.getMeasuredHeight() > 0 && top + view.getMeasuredHeight() * (messageCell == null || messageCell.getCurrentPosition() == null ? .80f : 1f) < clipBottomFinal; + final boolean visibleToBeRead = !BaseFragment.hasSheets(this) && (currentChat == null || !ChatObject.isChannelAndNotMegaGroup(currentChat) || view.getMeasuredHeight() > 0 && top + view.getMeasuredHeight() * (messageCell == null || messageCell.getCurrentPosition() == null ? .80f : 1f) < clipBottomFinal); final float visibleTop = getServiceTop(view); final int visibleBackgroundHeight = getServiceHeight(view); @@ -16183,7 +16226,7 @@ private void drawChildElement(Canvas canvas, float listTop, ChatMessageCell cell } else if (type == 3) { final boolean selectionOnly = cell.getCurrentPosition() != null && (cell.getCurrentPosition().flags & MessageObject.POSITION_FLAG_LEFT) == 0; if (!selectionOnly) { - cell.drawReactionsLayout(canvas, alpha); + cell.drawReactionsLayout(canvas, alpha, null); } } else if (type == 4) { final boolean selectionOnly = cell.getCurrentPosition() != null && (cell.getCurrentPosition().flags & MessageObject.POSITION_FLAG_LEFT) == 0; @@ -17376,6 +17419,7 @@ private void checkActionBarMenu(boolean animated) { viewAsTopics.setVisibility(currentChat != null && currentChat.forum ? View.VISIBLE : View.GONE); } if (avatarContainer != null) { + avatarContainer.setStars(currentChat != null && (currentChat.flags2 & 2048) != 0, animated); if (currentEncryptedChat != null) { avatarContainer.setTime(currentEncryptedChat.ttl, animated); } else if (userInfo != null) { @@ -17994,7 +18038,7 @@ private void processRowSelect(View view, boolean outside, float touchX, float to if (message != null && message.isAnyGift()) { return; } - if (type < 2 || type == 20 || type == MessageObject.TYPE_SUGGEST_PHOTO || message != null && message.type == MessageObject.TYPE_JOINED_CHANNEL || (message != null && message.isWallpaperAction())) { + if (type < 2 || type == 20 || type == MessageObject.TYPE_SUGGEST_PHOTO || message != null && message.type == MessageObject.TYPE_JOINED_CHANNEL || message != null && message.type == MessageObject.TYPE_GIFT_STARS || (message != null && message.isWallpaperAction())) { return; } addToSelectedMessages(message, outside); @@ -18131,7 +18175,7 @@ private void updateBotButtons() { boolean hasSettings = false; if (botInfo.size() != 0) { for (int b = 0; b < botInfo.size(); b++) { - TLRPC.BotInfo info = botInfo.valueAt(b); + TL_bots.BotInfo info = botInfo.valueAt(b); for (int a = 0; a < info.commands.size(); a++) { TLRPC.TL_botCommand command = info.commands.get(a); if (command.command.toLowerCase().equals("help")) { @@ -19154,7 +19198,7 @@ public void didReceivedNotification(int id, int account, final Object... args) { Collections.reverse(messArr); } if (currentEncryptedChat == null && chatMode != MODE_QUICK_REPLIES) { - getMediaDataController().loadReplyMessagesForMessages(messArr, dialog_id, chatMode, 0, null, classGuid); + getMediaDataController().loadReplyMessagesForMessages(messArr, dialog_id, chatMode, 0, null, classGuid, null); } int approximateHeightSum = 0; if (!chatWasReset && (load_type == 2 || load_type == 1) && messArr.isEmpty() && !isCache) { @@ -20401,6 +20445,7 @@ public void didReceivedNotification(int id, int account, final Object... args) { obj.messageOwner = newMsgObj; if (fwdHeader != null && newMsgObj.fwd_from != null && !TextUtils.isEmpty(newMsgObj.fwd_from.from_name)) { obj.messageOwner.fwd_from = fwdHeader; + Log.i("lolkek", "msg " + obj.getId() + " isOutOwnerCached is reset (1)"); obj.isOutOwnerCached = null; } obj.generateThumbs(true); @@ -20426,7 +20471,7 @@ public void didReceivedNotification(int id, int account, final Object... args) { ArrayList<MessageObject> messArr = new ArrayList<>(); messArr.add(obj); if (currentEncryptedChat == null && chatMode != MODE_QUICK_REPLIES) { - getMediaDataController().loadReplyMessagesForMessages(messArr, dialog_id, chatMode, 0, null, classGuid); + getMediaDataController().loadReplyMessagesForMessages(messArr, dialog_id, chatMode, 0, null, classGuid, null); } if (chatAdapter != null) { ChatMessageCell cell = null; @@ -20603,7 +20648,7 @@ public void didReceivedNotification(int id, int account, final Object... args) { URLSpanBotCommand.enabled = !chatInfo.bot_info.isEmpty() && currentChat != null && currentChat.megagroup; botsCount = chatInfo.bot_info.size(); for (int a = 0; a < chatInfo.bot_info.size(); a++) { - TLRPC.BotInfo bot = chatInfo.bot_info.get(a); + TL_bots.BotInfo bot = chatInfo.bot_info.get(a); if (!isThreadChat() && !bot.commands.isEmpty() && (!ChatObject.isChannel(currentChat) || currentChat != null && currentChat.megagroup)) { hasBotsCommands = true; } @@ -21098,6 +21143,20 @@ public void didReceivedNotification(int id, int account, final Object... args) { }); chatAdapter.notifyDataSetChanged(true); }); + } else if (id == NotificationCenter.updateAllMessages) { + long dialogId = (long) args[0]; + if (dialog_id != dialogId) return; + doOnIdle(() -> { + AndroidUtilities.forEachViews(chatListView, view -> { + if (view instanceof ChatMessageCell) { + MessageObject message = ((ChatMessageCell) view).getMessageObject(); + if (message != null) { + message.forceUpdate = true; + } + } + }); + chatAdapter.notifyDataSetChanged(false); + }); } else if (id == NotificationCenter.didVerifyMessagesStickers) { ArrayList<TLRPC.Message> messages = (ArrayList<TLRPC.Message>) args[0]; for (int a = 0, N = messages.size(); a < N; a++) { @@ -21326,7 +21385,7 @@ public void didReceivedNotification(int id, int account, final Object... args) { } boolean updated = false; if (arrayList != null) { - getMediaDataController().loadReplyMessagesForMessages(arrayList, dialog_id, 0, 0, null, classGuid); + getMediaDataController().loadReplyMessagesForMessages(arrayList, dialog_id, 0, 0, null, classGuid, null); } for (int a = 0, N = ids.size(); a < N; a++) { Integer mid = ids.get(a); @@ -21422,7 +21481,7 @@ public void didReceivedNotification(int id, int account, final Object... args) { } loadingPinnedMessages.remove(message.getId()); } - getMediaDataController().loadReplyMessagesForMessages(arrayList, dialog_id, 0, 0, null, classGuid); + getMediaDataController().loadReplyMessagesForMessages(arrayList, dialog_id, 0, 0, null, classGuid, null); updateMessagesVisiblePart(false); } else { pinnedMessageIds.clear(); @@ -21515,7 +21574,7 @@ public void didReceivedNotification(int id, int account, final Object... args) { } else if (id == NotificationCenter.botInfoDidLoad) { int guid = (Integer) args[1]; if (classGuid == guid || guid == 0) { - TLRPC.BotInfo info = (TLRPC.BotInfo) args[0]; + TL_bots.BotInfo info = (TL_bots.BotInfo) args[0]; if (currentEncryptedChat == null) { if (!info.commands.isEmpty() && !ChatObject.isChannel(currentChat) && !isThreadChat()) { hasBotsCommands = true; @@ -21819,7 +21878,7 @@ public void didReceivedNotification(int id, int account, final Object... args) { totalPinnedMessagesCount = (Integer) args[3]; pinnedEndReached = (Boolean) args[4]; - getMediaDataController().loadReplyMessagesForMessages(new ArrayList<>(pinnedMessageObjects.values()), dialog_id, 0, 0, null, classGuid); + getMediaDataController().loadReplyMessagesForMessages(new ArrayList<>(pinnedMessageObjects.values()), dialog_id, 0, 0, null, classGuid, null); if (!inMenuMode && !loadingPinnedMessagesList && totalPinnedMessagesCount == 0 && !pinnedEndReached) { getMediaDataController().loadPinnedMessages(dialog_id, 0, fallbackId); @@ -22305,6 +22364,15 @@ public void didReceivedNotification(int id, int account, final Object... args) { updateVisibleRows(msg -> msg != null && msg.getFactCheck() != null); } else if (id == NotificationCenter.availableEffectsUpdate) { updateVisibleRows(msg -> msg != null && msg.getEffect() != null); + } else if (id == NotificationCenter.starReactionAnonymousUpdate) { + final long did = (long) args[0]; + final int mid = (int) args[1]; + final boolean anonymous = (boolean) args[2]; + if (dialog_id != did) return; + MessageObject messageObject = messagesDict[0].get(mid); + if (messageObject != null) { + messageObject.setMyPaidReactionAnonymous(anonymous); + } } } @@ -22587,7 +22655,7 @@ private void addSponsoredMessages(boolean animated) { processNewMessages(res.messages); } - private void removeFromSponsored(MessageObject message) { + public void removeFromSponsored(MessageObject message) { MessagesController.SponsoredMessagesInfo sponsoredMessagesInfo = getMessagesController().getSponsoredMessages(dialog_id); if (sponsoredMessagesInfo != null) { sponsoredMessagesInfo.messages.remove(message); @@ -24772,7 +24840,7 @@ public void openAttachBotLayout(String botUsername) { openAttachBotLayout(user.id, attachMenuBotStartCommand, false); } }), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors); - }, null); + }, null, null); } else { AttachBotIntroTopView introTopView = new AttachBotIntroTopView(getParentActivity()); introTopView.setColor(Theme.getColor(Theme.key_chat_attachIcon)); @@ -27011,7 +27079,7 @@ public boolean allowLayoutChanges() { fixLayout(); applyDraftMaybe(false); applyChatLinkMessageMaybe(); - if (bottomOverlayChat != null && bottomOverlayChat.getVisibility() != View.VISIBLE && !actionBar.isSearchFieldVisible() && chatMode != MODE_SEARCH) { + if (bottomOverlayChat != null && bottomOverlayChat.getVisibility() != View.VISIBLE && !actionBar.isSearchFieldVisible() && chatMode != MODE_SEARCH && !BaseFragment.hasSheets(this)) { chatActivityEnterView.setFieldFocused(true); } if (chatActivityEnterView != null) { @@ -27044,6 +27112,10 @@ public boolean allowLayoutChanges() { } flagSecure.attach(); + + if (starReactionsOverlay != null) { + starReactionsOverlay.bringToFront(); + } } public float getPullingDownOffset() { @@ -27419,9 +27491,11 @@ public void applyDraftMaybe(boolean canClear) { if (getArguments().getBoolean("hasUrl", false)) { chatActivityEnterView.setSelection(draftMessage.message.indexOf('\n') + 1); AndroidUtilities.runOnUIThread(() -> { - if (chatActivityEnterView != null) { - chatActivityEnterView.setFieldFocused(true); - chatActivityEnterView.openKeyboard(); + if (!BaseFragment.hasSheets(ChatActivity.this)) { + if (chatActivityEnterView != null) { + chatActivityEnterView.setFieldFocused(true); + chatActivityEnterView.openKeyboard(); + } } }, 700); } @@ -27744,7 +27818,7 @@ private CharSequence getMessageCaption(MessageObject messageObject, MessageObjec if (messageObject == null) { return null; } - String restrictionReason = MessagesController.getRestrictionReason(messageObject.messageOwner.restriction_reason); + String restrictionReason = MessagesController.getInstance(currentAccount).getRestrictionReason(messageObject.messageOwner.restriction_reason); if (!TextUtils.isEmpty(restrictionReason)) { return restrictionReason; } @@ -27797,7 +27871,7 @@ private boolean createMenu(View v, boolean single, boolean listView, float x, fl if (message == null) { return false; } - if (!single && (message.messageOwner.action instanceof TLRPC.TL_messageActionGiftPremium || message.messageOwner.action instanceof TLRPC.TL_messageActionGiftCode)) { + if (!single && (message.messageOwner.action instanceof TLRPC.TL_messageActionGiftPremium || message.messageOwner.action instanceof TLRPC.TL_messageActionGiftCode || message.messageOwner.action instanceof TLRPC.TL_messageActionGiftStars)) { return false; } if (factCheckHint != null) { @@ -27829,6 +27903,10 @@ private boolean createMenu(View v, boolean single, boolean listView, float x, fl } }), ConnectionsManager.RequestFlagFailOnServerErrors); return true; + } else if (!longpress && message.messageOwner.action instanceof TLRPC.TL_messageActionPaymentRefunded) { + TLRPC.TL_messageActionPaymentRefunded action = (TLRPC.TL_messageActionPaymentRefunded) message.messageOwner.action; + StarsIntroActivity.showTransactionSheet(getContext(), currentAccount, message.messageOwner.date, action, resourceProvider); + return true; } else if (message.messageOwner.action instanceof TLRPC.TL_messageActionGroupCall || message.messageOwner.action instanceof TLRPC.TL_messageActionInviteToGroupCall || message.messageOwner.action instanceof TLRPC.TL_messageActionGroupCallScheduled) { if (getParentActivity() == null) { return false; @@ -28350,7 +28428,7 @@ public void setAutoDeleteHistory(int time, int action) { if (!selectedObject.isSponsored() && chatMode != MODE_QUICK_REPLIES && chatMode != MODE_SCHEDULED && (!selectedObject.needDrawBluredPreview() || selectedObject.hasExtendedMediaPreview()) && !selectedObject.isLiveLocation() && selectedObject.type != MessageObject.TYPE_PHONE_CALL && !noforwards && selectedObject.type != MessageObject.TYPE_GIFT_PREMIUM && selectedObject.type != MessageObject.TYPE_GIFT_PREMIUM_CHANNEL && selectedObject.type != MessageObject.TYPE_SUGGEST_PHOTO && !selectedObject.isWallpaperAction() - && !message.isExpiredStory() && message.type != MessageObject.TYPE_STORY_MENTION) { + && !message.isExpiredStory() && message.type != MessageObject.TYPE_STORY_MENTION && message.type != MessageObject.TYPE_GIFT_STARS) { items.add(LocaleController.getString("Forward", R.string.Forward)); options.add(OPTION_FORWARD); icons.add(R.drawable.msg_forward); @@ -28523,10 +28601,10 @@ public void setAutoDeleteHistory(int time, int action) { if (chatInfo == null) { isReactionsAvailable = true; } else { - isReactionsAvailable = !isSecretChat() && chatMode != MODE_QUICK_REPLIES && !isInScheduleMode() && message.isReactionsAvailable() && (chatInfo != null && !(chatInfo.available_reactions instanceof TLRPC.TL_chatReactionsNone)) && !availableReacts.isEmpty(); + isReactionsAvailable = !isSecretChat() && chatMode != MODE_QUICK_REPLIES && !isInScheduleMode() && message.isReactionsAvailable() && (chatInfo != null && (!(chatInfo.available_reactions instanceof TLRPC.TL_chatReactionsNone) || chatInfo.paid_reactions_available)) && !availableReacts.isEmpty(); } } else { - isReactionsAvailable = !message.isSecretMedia() && chatMode != MODE_QUICK_REPLIES && !isSecretChat() && !isInScheduleMode() && message.isReactionsAvailable() && (chatInfo != null && !(chatInfo.available_reactions instanceof TLRPC.TL_chatReactionsNone) || (chatInfo == null && !ChatObject.isChannel(currentChat)) || currentUser != null) && !availableReacts.isEmpty(); + isReactionsAvailable = !message.isSecretMedia() && chatMode != MODE_QUICK_REPLIES && !isSecretChat() && !isInScheduleMode() && message.isReactionsAvailable() && (chatInfo != null && (!(chatInfo.available_reactions instanceof TLRPC.TL_chatReactionsNone) || chatInfo.paid_reactions_available) || (chatInfo == null && !ChatObject.isChannel(currentChat)) || currentUser != null) && !availableReacts.isEmpty(); } boolean showMessageSeen = !isReactionsViewAvailable && !isInScheduleMode() && currentChat != null && message.isOutOwner() && message.isSent() && !message.isEditing() && !message.isSending() && !message.isSendError() && !message.isContentUnread() && !message.isUnread() && (ConnectionsManager.getInstance(currentAccount).getCurrentTime() - message.messageOwner.date < getMessagesController().chatReadMarkExpirePeriod) && (ChatObject.isMegagroup(currentChat) || !ChatObject.isChannel(currentChat)) && chatInfo != null && chatInfo.participants_count <= getMessagesController().chatReadMarkSizeThreshold && !(message.messageOwner.action instanceof TLRPC.TL_messageActionChatJoinedByRequest) && (v instanceof ChatMessageCell); boolean showPrivateMessageSeen = !isReactionsViewAvailable && currentChat == null && currentEncryptedChat == null && (currentUser != null && !UserObject.isUserSelf(currentUser) && !UserObject.isReplyUser(currentUser) && !UserObject.isAnonymous(currentUser) && !currentUser.bot && !UserObject.isService(currentUser.id)) && (userInfo == null || !userInfo.read_dates_private) && !isInScheduleMode() && message.isOutOwner() && message.isSent() && !message.isEditing() && !message.isSending() && !message.isSendError() && !message.isContentUnread() && !message.isUnread() && (ConnectionsManager.getInstance(currentAccount).getCurrentTime() - message.messageOwner.date < getMessagesController().pmReadDateExpirePeriod) && !(message.messageOwner.action instanceof TLRPC.TL_messageActionChatJoinedByRequest) && (v instanceof ChatMessageCell); @@ -29036,7 +29114,7 @@ public void run() { textView.setPadding(AndroidUtilities.dp(18), AndroidUtilities.dp(10), AndroidUtilities.dp(18), AndroidUtilities.dp(10)); textView.setMaxWidth(AndroidUtilities.dp(300)); Uri uri = Uri.parse(selectedObject.sponsoredUrl); - textView.setText(Browser.replaceHostname(uri, IDN.toUnicode(uri.getHost(), IDN.ALLOW_UNASSIGNED))); + textView.setText(Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null)); textView.setBackground(Theme.createRadSelectorDrawable(getThemedColor(Theme.key_dialogButtonSelector), 0, selectedObject.sponsoredAdditionalInfo == null ? 6 : 0)); textView.setOnClickListener(e -> { if (selectedObject == null) { @@ -29161,7 +29239,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { return; } BottomSheet.Builder builder = new BottomSheet.Builder(contentView.getContext()); - builder.setCustomView(new SponsoredMessageInfoView(getParentActivity(), themeDelegate)); + builder.setCustomView(new SponsoredMessageInfoView(getParentActivity(), null, themeDelegate)); builder.show(); }); popupLayout.addView(new ActionBarPopupWindow.GapView(contentView.getContext(), themeDelegate), LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 8)); @@ -29366,7 +29444,19 @@ public boolean onTouch(View v, MotionEvent event) { reactionsLayout.setDelegate(new ReactionsContainerLayout.ReactionsContainerDelegate() { @Override public void onReactionClicked(View v, ReactionsLayoutInBubble.VisibleReaction visibleReaction, boolean longpress, boolean addToRecent) { - selectReaction(primaryMessage, finalReactionsLayout, v,0, 0, visibleReaction,false, longpress, addToRecent, false); + float x = 0, y = 0; + ChatMessageCell cell = findMessageCell(primaryMessage.getId(), true); + if (cell != null) { + ReactionsLayoutInBubble.ReactionButton btn = cell.reactionsLayoutInBubble.getReactionButton(visibleReaction); + if (btn != null) { + x = cell.reactionsLayoutInBubble.x + btn.x + btn.width / 2f; + y = cell.reactionsLayoutInBubble.y + btn.y + btn.height / 2f; + } + } + if (visibleReaction != null && visibleReaction.isStar) { + longpress = true; + } + selectReaction(cell, primaryMessage, finalReactionsLayout, v, x, y, visibleReaction,false, longpress, addToRecent, false); } @Override @@ -29933,11 +30023,49 @@ private void showMultipleReactionsPromo(ChatMessageCell cell, ReactionsLayoutInB } } - public void selectReaction(MessageObject primaryMessage, ReactionsContainerLayout reactionsLayout, View fromView, float x, float y, ReactionsLayoutInBubble.VisibleReaction visibleReaction, boolean fromDoubleTap, boolean bigEmoji, boolean addToRecent, boolean withoutAnimation) { + public void selectReaction(ChatMessageCell cell, MessageObject primaryMessage, ReactionsContainerLayout reactionsLayout, View fromView, float x, float y, ReactionsLayoutInBubble.VisibleReaction visibleReaction, boolean fromDoubleTap, boolean bigEmoji, boolean addToRecent, boolean withoutAnimation) { if (isInScheduleMode() || primaryMessage == null) { return; } + if (visibleReaction != null && visibleReaction.isStar) { + closeMenu(); + if (cell == null) { + cell = findMessageCell(primaryMessage.getId(), true); + } + if (bigEmoji) { + if (cell != null) { + cell.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); + } + ArrayList<TLRPC.MessageReactor> reactors = null; + if (primaryMessage != null && primaryMessage.messageOwner != null && primaryMessage.messageOwner.reactions != null) { + reactors = primaryMessage.messageOwner.reactions.top_reactors; + } + StarsController.getInstance(currentAccount).commitPaidReaction(); + StarsReactionsSheet sheet = new StarsReactionsSheet(getContext(), currentAccount, dialog_id, ChatActivity.this, primaryMessage, reactors, themeDelegate); + sheet.setMessageCell(ChatActivity.this, primaryMessage.getId(), cell); + sheet.show(); + return; + } + if (fragmentView != null) { + try { + fragmentView.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); + } catch (Exception ignore) {} + } + StarsController.PendingPaidReactions pending = StarsController.getInstance(currentAccount).sendPaidReaction(primaryMessage, ChatActivity.this, +1, true, true, null); + if (pending != null && cell != null) { + StarReactionsOverlay overlay = getStarReactionsOverlay(); + overlay.setMessageCell(cell); + pending.setOverlay(overlay); + overlay.show(); + int[] loc = new int[2], loc2 = new int[2]; + cell.getLocationInWindow(loc); + overlay.getLocationInWindow(loc2); + overlay.tap(loc[0] - loc2[0] + x, loc[1] - loc2[1] + y, false, true); + } + return; + } + if (getDialogId() == getUserConfig().getClientUserId() && !getUserConfig().isPremium() && primaryMessage.messageOwner != null && (primaryMessage.messageOwner.reactions == null || (primaryMessage.messageOwner.reactions.reactions_as_tags || primaryMessage.messageOwner.reactions.results.isEmpty()))) { new PremiumFeatureBottomSheet(ChatActivity.this, PremiumPreviewFragment.PREMIUM_FEATURE_SAVED_TAGS, true).show(); return; @@ -29958,7 +30086,7 @@ public void selectReaction(MessageObject primaryMessage, ReactionsContainerLayou int finalMessageIdForCell = messageIdForCell; if (added) { - ChatMessageCell cell = findMessageCell(finalMessageIdForCell, true); + cell = findMessageCell(finalMessageIdForCell, true); showMultipleReactionsPromo(cell, visibleReaction, currentChosenReactions); if (!fromDoubleTap) { ReactionsEffectOverlay.show(ChatActivity.this, reactionsLayout, cell, fromView, x, y, visibleReaction, currentAccount, reactionsLayout != null ? (bigEmoji ? ReactionsEffectOverlay.LONG_ANIMATION : ReactionsEffectOverlay.ONLY_MOVE_ANIMATION) : ReactionsEffectOverlay.SHORT_ANIMATION); @@ -30216,7 +30344,7 @@ private CharSequence getMessageContent(MessageObject messageObject, long previou } } } - String restrictionReason = MessagesController.getRestrictionReason(messageObject.messageOwner.restriction_reason); + String restrictionReason = MessagesController.getInstance(currentAccount).getRestrictionReason(messageObject.messageOwner.restriction_reason); if (!TextUtils.isEmpty(restrictionReason)) { str.append(restrictionReason); } else if (messageObject.caption != null) { @@ -32082,6 +32210,7 @@ private void runCloseInstantCameraAnimation() { ObjectAnimator.ofFloat(cameraContainer, View.SCALE_Y, 0.5f), ObjectAnimator.ofFloat(cameraContainer, View.ALPHA, 0.0f), ObjectAnimator.ofFloat(instantCameraView.getSwitchButtonView(), View.ALPHA, 0.0f), + ObjectAnimator.ofFloat(instantCameraView.getFlashButtonView(), View.ALPHA, 0.0f), ObjectAnimator.ofInt(instantCameraView.getPaint(), AnimationProperties.PAINT_ALPHA, 0), ObjectAnimator.ofFloat(instantCameraView.getMuteImageView(), View.ALPHA, 0.0f) ); @@ -32533,7 +32662,7 @@ private void removeMessageObject(MessageObject messageObject) { } } - private void removeMessageWithThanos(MessageObject messageObject) { + public void removeMessageWithThanos(MessageObject messageObject) { int index = messages.indexOf(messageObject); if (index == -1) { return; @@ -32615,7 +32744,7 @@ private void openClickableLink(CharacterStyle url, String str, boolean longPress try { try { Uri uri = Uri.parse(formattedUrl); - formattedUrl = Browser.replaceHostname(uri, IDN.toUnicode(uri.getHost(), IDN.ALLOW_UNASSIGNED)); + formattedUrl = Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null); } catch (Exception e) { FileLog.e(e, false); } @@ -32890,7 +33019,7 @@ private void processExternalUrl(int type, String url, CharacterStyle span, ChatM } } - private void logSponsoredClicked(MessageObject messageObject) { + public void logSponsoredClicked(MessageObject messageObject) { if (messageObject == null || !messageObject.isSponsored()) { return; } @@ -32919,7 +33048,7 @@ private void didPressMessageUrl(CharacterStyle url, boolean longPress, MessageOb } else if (url instanceof URLSpanUserMention) { TLRPC.User user = getMessagesController().getUser(Utilities.parseLong(((URLSpanUserMention) url).getURL())); if (user != null) { - MessagesController.openChatOrProfileWith(user, null, ChatActivity.this, 0, false); + MessagesController.getInstance(currentAccount).openChatOrProfileWith(user, null, ChatActivity.this, 0, false); } if (longPress && cell != null) { cell.resetPressedLink(-1); @@ -33019,8 +33148,10 @@ private void didPressMessageUrl(CharacterStyle url, boolean longPress, MessageOb String lowerUrl = urlFinal.toLowerCase(); String lowerUrl2 = messageObject.messageOwner.media.webpage.url.toLowerCase(); if ((lowerUrl.contains("telegram.org/blog") || Browser.isTelegraphUrl(lowerUrl, false) || lowerUrl.contains("t.me/iv")) && (lowerUrl.contains(lowerUrl2) || lowerUrl2.contains(lowerUrl))) { - ArticleViewer.getInstance().setParentActivity(getParentActivity(), ChatActivity.this); - ArticleViewer.getInstance().open(messageObject); + if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(messageObject) != null) { + return; + } + ChatActivity.this.createArticleViewer(false).open(messageObject); return; } } @@ -33598,7 +33729,7 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (UserObject.isReplyUser(currentUser)) { helpView.setText(false, LocaleController.getString("RepliesChatInfo", R.string.RepliesChatInfo)); } else { - TLRPC.BotInfo mBotInfo = botInfo.size() != 0 ? botInfo.get(currentUser.id) : null; + TL_bots.BotInfo mBotInfo = botInfo.size() != 0 ? botInfo.get(currentUser.id) : null; helpView.setText(true, mBotInfo != null ? mBotInfo.description : null, mBotInfo != null ? mBotInfo.description_document != null ? mBotInfo.description_document : mBotInfo.description_photo : null, mBotInfo); } updateBotHelpCellClick(helpView); @@ -33860,6 +33991,7 @@ public boolean onPreDraw() { ObjectAnimator.ofFloat(cameraContainer, View.SCALE_Y, scale), ObjectAnimator.ofFloat(cameraContainer, View.TRANSLATION_Y, position[1] - rect.y), ObjectAnimator.ofFloat(instantCameraView.getSwitchButtonView(), View.ALPHA, 0.0f), + ObjectAnimator.ofFloat(instantCameraView.getFlashButtonView(), View.ALPHA, 0.0f), ObjectAnimator.ofInt(instantCameraView.getPaint(), AnimationProperties.PAINT_ALPHA, 0), ObjectAnimator.ofFloat(instantCameraView.getMuteImageView(), View.ALPHA, 0.0f) ); @@ -35188,6 +35320,14 @@ public void didPressChannelAvatar(ChatMessageCell cell, TLRPC.Chat chat, int pos processRowSelect(cell, true, touchX, touchY); return; } + if (!asForward && chat != null && chat.signature_profiles) { + MessageObject msg = cell.getMessageObject(); + if (msg != null) { + long did = DialogObject.getPeerDialogId(msg.messageOwner.from_id); + openUserProfile(did); + return; + } + } openChat(cell, chat, postId, asForward); } @@ -35465,6 +35605,7 @@ private void openChat(ChatMessageCell cell, TLRPC.Chat chat, int postId, boolean if (getMessagesController().checkCanOpenChat(args, ChatActivity.this, cell.getMessageObject(), progress)) { ChatActivity chatActivity = new ChatActivity(args); if (progress != null && postId != 0) { + AndroidUtilities.runOnUIThread(() -> { progress.onCancel(getMessagesController().ensureMessagesLoaded(-chat.id, postId, new MessagesController.MessagesLoadedCallback() { @Override public void onMessagesLoaded(boolean fromCache) { @@ -35477,6 +35618,7 @@ public void onError() { presentFragment(chatActivity); } })); + }, 5000); progress.init(); } else { presentFragment(chatActivity); @@ -35574,7 +35716,7 @@ public void didLongPressBotButton(ChatMessageCell cell, TLRPC.KeyboardButton but } @Override - public void didPressReaction(ChatMessageCell cell, TLRPC.ReactionCount reaction, boolean longpress) { + public void didPressReaction(ChatMessageCell cell, TLRPC.ReactionCount reaction, boolean longpress, float x, float y) { if (getParentActivity() == null) { return; } @@ -35586,6 +35728,20 @@ public void didPressReaction(ChatMessageCell cell, TLRPC.ReactionCount reaction, new PremiumFeatureBottomSheet(ChatActivity.this, PremiumPreviewFragment.PREMIUM_FEATURE_SAVED_TAGS, true).show(); return; } + if (longpress && reaction.reaction instanceof TLRPC.TL_reactionPaid) { + cell.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); + MessageObject messageObject = cell.getPrimaryMessageObject(); + if (messageObject == null) return; + ArrayList<TLRPC.MessageReactor> reactors = null; + if (messageObject.messageOwner != null && messageObject.messageOwner.reactions != null) { + reactors = messageObject.messageOwner.reactions.top_reactors; + } + StarsController.getInstance(currentAccount).commitPaidReaction(); + StarsReactionsSheet sheet = new StarsReactionsSheet(getContext(), currentAccount, dialog_id, ChatActivity.this, messageObject, reactors, themeDelegate); + sheet.setMessageCell(ChatActivity.this, messageObject.getId(), findMessageCell(messageObject.getId(), true)); + sheet.show(); + return; + } if (longpress || cell.areTags() && (isInsideContainer || searchingReaction != null && searchingReaction.isSame(reaction.reaction))) { if (/*!ChatObject.isChannelAndNotMegaGroup(currentChat) || dialog_id >= 0*/ true) { cell.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); @@ -35673,7 +35829,7 @@ protected void dispatchDraw(Canvas canvas) { removeTag.setTextAndIcon(LocaleController.getString(R.string.SavedTagRemoveTag), R.drawable.menu_tag_delete); removeTag.setMinimumWidth(160); removeTag.setOnClickListener(view -> { - pressedReaction(cell, reaction); + pressedReaction(cell, reaction, 0, 0); }); removeTag.setColors(Theme.getColor(Theme.key_color_red), Theme.getColor(Theme.key_color_red)); popupLayout.addView(removeTag); @@ -35834,14 +35990,14 @@ public void dismiss() { actionBarSearchTags.setChosen(ReactionsLayoutInBubble.VisibleReaction.fromTL(reaction.reaction), true); } } else if (reaction != null) { - pressedReaction(cell, reaction); + pressedReaction(cell, reaction, x, y); } } - private void pressedReaction(ChatMessageCell cell, TLRPC.ReactionCount reaction) { + private void pressedReaction(ChatMessageCell cell, TLRPC.ReactionCount reaction, float x, float y) { ReactionsLayoutInBubble.VisibleReaction visibleReaction = ReactionsLayoutInBubble.VisibleReaction.fromTL(reaction.reaction); MessageObject messageObject = cell.getPrimaryMessageObject(); - selectReaction(cell.getPrimaryMessageObject(), null, null, 0, 0, visibleReaction,false, false, false, false); + selectReaction(cell, cell.getPrimaryMessageObject(), null, null, x, y, visibleReaction,false, false, false, false); if (messageObject != null & messageObject.messageOwner != null) { if (chatAdapter.isFiltered) { MessageObject realMessage = messagesDict[0].get(messageObject.getId()); @@ -36126,7 +36282,7 @@ public void end(boolean replaced) { if (!safe && !Browser.isInternalUri(uri, null)) { AlertsCreator.showOpenUrlAlert(ChatActivity.this, url, true, true, true, !safe, progressDialogCurrent, themeDelegate); } else { - Browser.openUrl(getContext(), uri, true, true, false, progressDialogCurrent, null); + Browser.openUrl(getContext(), uri, true, true, false, progressDialogCurrent, null, false); } } @@ -36627,8 +36783,10 @@ public void end(boolean replaced) { PollVotesAlert.showForPoll(ChatActivity.this, messageObject); } else if (type == 0) { if (messageObject.messageOwner.media != null && messageObject.messageOwner.media.webpage != null && messageObject.messageOwner.media.webpage.cached_page != null) { - ArticleViewer.getInstance().setParentActivity(getParentActivity(), ChatActivity.this); - ArticleViewer.getInstance().open(messageObject); + if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(messageObject) != null) { + return; + } + ChatActivity.this.createArticleViewer(false).open(messageObject); } } else if (type == ChatMessageCell.INSTANT_BUTTON_TYPE_CONTACT_VIEW) { long uid = messageObject.messageOwner.media.user_id; @@ -36737,7 +36895,7 @@ public void end(boolean replaced) { return; } } - Browser.openUrl(getParentActivity(), Uri.parse(webPage.url), true, true, false, progressDialogCurrent, null); + Browser.openUrl(getParentActivity(), Uri.parse(webPage.url), true, true, false, progressDialogCurrent, null, false); } else { if (messageObject.isSponsored()) { logSponsoredClicked(messageObject); @@ -36762,7 +36920,7 @@ public void end(boolean replaced) { } } }; - Browser.openUrl(getContext(), Uri.parse(messageObject.sponsoredUrl), true, false, false, progressDialogCurrent, null); + Browser.openUrl(getContext(), Uri.parse(messageObject.sponsoredUrl), true, false, false, progressDialogCurrent, null, false); } } else { TLRPC.WebPage webPage = messageObject.getStoryMentionWebpage(); @@ -36806,7 +36964,7 @@ public void end(boolean replaced) { } } }; - Browser.openUrl(getParentActivity(), Uri.parse(webPage.url), true, true, false, progressDialogCurrent, null); + Browser.openUrl(getParentActivity(), Uri.parse(webPage.url), true, true, false, progressDialogCurrent, null, false); } } } @@ -36945,16 +37103,86 @@ public void didPressAboutRevenueSharingAds() { RevenueSharingAdsInfoBottomSheet.showAlert(contentView.getContext(), ChatActivity.this, resourceProvider); } + @Override + public void didPressRevealSensitiveContent(ChatMessageCell cell) { + if (!getMessagesController().showSensitiveContent()) { + final AlertDialog progressDialog = new AlertDialog(getContext(), AlertDialog.ALERT_TYPE_SPINNER); + progressDialog.showDelayed(200); + getMessagesController().getContentSettings(settings -> { + progressDialog.dismissUnless(200); + boolean[] always = new boolean[1]; + FrameLayout frameLayout = new FrameLayout(getContext()); + if (settings != null && settings.sensitive_can_change) { + CheckBoxCell checkbox = new CheckBoxCell(getContext(), 1, getResourceProvider()); + checkbox.setBackground(Theme.getSelectorDrawable(false)); + checkbox.setText(getString(R.string.MessageShowSensitiveContentAlways), "", always[0], false); + checkbox.setPadding(LocaleController.isRTL ? dp(16) : dp(8), 0, LocaleController.isRTL ? dp(8) : dp(16), 0); + frameLayout.addView(checkbox, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.TOP | Gravity.LEFT, 0, 0, 0, 0)); + checkbox.setOnClickListener(v -> { + CheckBoxCell cell1 = (CheckBoxCell) v; + always[0] = !always[0]; + cell1.setChecked(always[0], true); + }); + } + showDialog( + new AlertDialog.Builder(getContext(), getResourceProvider()) + .setTitle(getString(R.string.MessageShowSensitiveContentMediaTitle)) + .setMessage(getString(R.string.MessageShowSensitiveContentMediaText)) + .setView(frameLayout).setCustomViewOffset(9) + .setNegativeButton(getString(R.string.Cancel), null) + .setPositiveButton(getString(R.string.MessageShowSensitiveContentButton), (di, w) -> { + if (always[0]) { + if (settings != null && settings.sensitive_can_change) { + getMessagesController().setContentSettings(true); + BulletinFactory.of(ChatActivity.this) + .createSimpleBulletinDetail(R.raw.chats_infotip, AndroidUtilities.replaceArrows(AndroidUtilities.premiumText(getString(R.string.SensitiveContentSettingsToast), () -> { + presentFragment(new ThemeActivity(ThemeActivity.THEME_TYPE_BASIC).highlightSensitiveRow()); + }), true)) + .show(true); + } + for (int i = 0; i < chatListView.getChildCount(); ++i) { + View child = chatListView.getChildAt(i); + if (!(child instanceof ChatMessageCell)) continue; + ChatMessageCell messageCell = (ChatMessageCell) child; + if (messageCell.getMessageObject() != null && messageCell.getMessageObject().isSensitive()) { + messageCell.startRevealMedia(); + } + } + } else { + if (cell.getMessageObject() != null) { + cell.getMessageObject().isSensitiveCached = false; + } + cell.startRevealMedia(); + } + }) + .create() + ); + }); + return; + } + if (cell.getMessageObject() != null) { + cell.getMessageObject().isSensitiveCached = false; + } + cell.startRevealMedia(); + } }; private void openUserProfile(long uid) { if (uid < 0) { + if (uid == getDialogId()) { + avatarContainer.openProfile(true); + return; + } Bundle args = new Bundle(); args.putLong("chat_id", -uid); if (getMessagesController().checkCanOpenChat(args, ChatActivity.this)) { presentFragment(new ChatActivity(args)); } } else if (uid != getUserConfig().getClientUserId()) { + if (uid == getDialogId()) { + avatarContainer.openProfile(true); + return; + } Bundle args = new Bundle(); args.putLong("user_id", uid); if (currentEncryptedChat != null && uid == currentUser.id) { @@ -36963,6 +37191,11 @@ private void openUserProfile(long uid) { ProfileActivity fragment = new ProfileActivity(args); fragment.setPlayProfileAnimation(currentUser != null && currentUser.id == uid ? 1 : 0); presentFragment(fragment); + } else { + Bundle args = new Bundle(); + args.putLong("user_id", uid); + args.putBoolean("my_profile", true); + presentFragment(new ProfileActivity(args, null)); } } @@ -37606,8 +37839,6 @@ public ArrayList<ThemeDescription> getThemeDescriptions() { themeDescriptions.add(new ThemeDescription(chatActivityEnterView, 0, null, null, null, null, Theme.key_chat_recordVoiceCancel)); themeDescriptions.add(new ThemeDescription(chatActivityEnterView, ThemeDescription.FLAG_TEXTCOLOR, new Class[]{ChatActivityEnterView.class}, new String[]{"recordedAudioTimeTextView"}, null, null, null, Theme.key_chat_messagePanelVoiceDuration)); themeDescriptions.add(new ThemeDescription(chatActivityEnterView, 0, null, null, null, null, Theme.key_chat_recordVoiceCancel)); - themeDescriptions.add(new ThemeDescription(chatActivityEnterView, 0, new Class[]{ChatActivityEnterView.class}, new String[]{"doneButtonProgress"}, null, null, null, Theme.key_contextProgressInner1)); - themeDescriptions.add(new ThemeDescription(chatActivityEnterView, 0, new Class[]{ChatActivityEnterView.class}, new String[]{"doneButtonProgress"}, null, null, null, Theme.key_contextProgressOuter1)); themeDescriptions.add(new ThemeDescription(chatActivityEnterView, ThemeDescription.FLAG_IMAGECOLOR, new Class[]{ChatActivityEnterView.class}, new String[]{"cancelBotButton"}, null, null, null, Theme.key_chat_messagePanelCancelInlineBot)); themeDescriptions.add(new ThemeDescription(chatActivityEnterView, ThemeDescription.FLAG_USEBACKGROUNDDRAWABLE | ThemeDescription.FLAG_DRAWABLESELECTEDSTATE, new Class[]{ChatActivityEnterView.class}, new String[]{"cancelBotButton"}, null, null, null, Theme.key_listSelector)); themeDescriptions.add(new ThemeDescription(chatActivityEnterView, 0, new Class[]{ChatActivityEnterView.class}, new String[]{"redDotPaint"}, null, null, null, Theme.key_chat_recordedVoiceDot)); @@ -38977,6 +39208,9 @@ public boolean isLightStatusBar() { } return ColorUtils.calculateLuminance(color) > 0.7f; } + if (actionBar == null) { + return !Theme.isCurrentThemeDark(); + } return AndroidUtilities.computePerceivedBrightness(actionBar.getBackgroundColor()) > 0.721f; } @@ -39088,6 +39322,27 @@ public ThanosEffect getChatThanosEffect() { return chatListThanosEffect; } + private StarReactionsOverlay starReactionsOverlay; + public StarReactionsOverlay getStarReactionsOverlay() { + if (starReactionsOverlay == null) { + starReactionsOverlay = new StarReactionsOverlay(ChatActivity.this); + } + FrameLayout starReactionsOverlayParent = getLayoutContainer(); +// if (LaunchActivity.instance != null) { +// starReactionsOverlayParent = LaunchActivity.instance.frameLayout; +// } + if (starReactionsOverlayParent == null) { + return null; + } + if (starReactionsOverlay.getParent() != starReactionsOverlayParent) { + AndroidUtilities.removeFromParent(starReactionsOverlay); + starReactionsOverlayParent.addView(starReactionsOverlay, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + } else if (starReactionsOverlayParent.indexOfChild(starReactionsOverlay) < starReactionsOverlayParent.indexOfChild(fragmentView)) { + starReactionsOverlay.bringToFront(); + } + return starReactionsOverlay; + } + private void checkGroupMessagesOrder() { if (!reversed) return; int groupStart = -1; @@ -39176,21 +39431,33 @@ public void didLongPressLink(ChatMessageCell cell, MessageObject messageObject, final ScrimOptions dialog = new ScrimOptions(getContext(), themeDelegate); options.setOnDismiss(dialog::dismissFast); - options.add(R.drawable.msg_openin, getString(R.string.Open), () -> { + final boolean customTabs = SharedConfig.inappBrowser && !str.startsWith("video?") && !Browser.isInternalUri(Uri.parse(str), null); + + options.add(R.drawable.msg_openin, getString(customTabs ? R.string.OpenInTelegramBrowser : R.string.Open), () -> { if (str.startsWith("video?")) { didPressMessageUrl(span, false, messageObject, cell); + } else if (customTabs) { + Browser.openInTelegramBrowser(getParentActivity(), str, null); } else { logSponsoredClicked(messageObject); openClickableLink(span, str, false, cell, messageObject, false); } }); + if (customTabs) { + options.add(R.drawable.msg_language, getString(R.string.OpenInSystemBrowser), () -> { + Browser.openInExternalBrowser(getParentActivity(), str, false); + }); + } + TLRPC.MessageMedia media = MessageObject.getMedia(messageObject); if (media instanceof TLRPC.TL_messageMediaWebPage && media.webpage != null && media.webpage.cached_page != null && TextUtils.equals(media.webpage.url, str)) { options.add(R.drawable.menu_instant_view, getString(R.string.OpenInstantView), () -> { if (messageObject.messageOwner.media != null && messageObject.messageOwner.media.webpage != null && messageObject.messageOwner.media.webpage.cached_page != null) { - ArticleViewer.getInstance().setParentActivity(getParentActivity(), ChatActivity.this); - ArticleViewer.getInstance().open(messageObject); + if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(messageObject) != null) { + return; + } + ChatActivity.this.createArticleViewer(false).open(messageObject); } }); } @@ -39258,7 +39525,7 @@ public void didLongPressLink(ChatMessageCell cell, MessageObject messageObject, try { try { Uri uri = Uri.parse(formattedUrl); - formattedUrl = Browser.replaceHostname(uri, IDN.toUnicode(uri.getHost(), IDN.ALLOW_UNASSIGNED)); + formattedUrl = Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null); } catch (Exception e) { FileLog.e(e, false); } @@ -39363,7 +39630,7 @@ public void didLongPressUsername(ChatMessageCell cell, CharacterStyle link, Stri dialog.setScrim(cell, link, null); showDialog(dialog); }; - if (BuildVars.DEBUG_PRIVATE_VERSION) { + if (true || BuildVars.DEBUG_PRIVATE_VERSION) { TLRPC.TL_account_checkUsername req2 = new TLRPC.TL_account_checkUsername(); req2.username = username; int reqId2 = getConnectionsManager().sendRequest(req2, (res2, err2) -> AndroidUtilities.runOnUIThread(() -> { @@ -39674,4 +39941,11 @@ private void checkHashtagStories(boolean instant) { messagesSearchAdapter.searchStories(searchingHashtag, instant); } + public float getClipTop() { + return chatListView.getY() + ((fragmentTransition == null || (fromPullingDownTransition && !toPullingDownTransition)) && !isInsideContainer ? chatListViewPaddingTop - chatListViewPaddingVisibleOffset - AndroidUtilities.dp(4) : 0); + } + + public float getClipBottom() { + return fragmentView.getBottom() - chatListView.getBottom() + ((fragmentTransition == null || (fromPullingDownTransition && !toPullingDownTransition)) && !isInsideContainer ? blurredViewBottomOffset : 0); + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatEditActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatEditActivity.java index 650dd600063..4e83043936c 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatEditActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatEditActivity.java @@ -63,6 +63,7 @@ import org.telegram.messenger.browser.Browser; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.tgnet.tl.TL_stories; import org.telegram.ui.ActionBar.ActionBar; import org.telegram.ui.ActionBar.ActionBarMenu; @@ -100,12 +101,10 @@ import org.telegram.ui.Components.UndoView; import org.telegram.ui.Stars.BotStarsActivity; import org.telegram.ui.Stars.BotStarsController; -import org.telegram.ui.Stars.StarsController; import java.util.ArrayList; import java.util.HashSet; import java.util.List; -import java.util.Locale; import java.util.concurrent.CountDownLatch; public class ChatEditActivity extends BaseFragment implements ImageUpdater.ImageUpdaterDelegate, NotificationCenter.NotificationCenterDelegate { @@ -138,7 +137,7 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image private TextCell reactionsCell; private TextInfoPrivacyCell settingsSectionCell; - private TextCell signCell; +// private TextCell signCell; private TextCell forumsCell; private FrameLayout stickersContainer; @@ -177,7 +176,7 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image private TLRPC.User currentUser; private TLRPC.UserFull userInfo; - private boolean signMessages; +// private boolean signMessages; private boolean forum, canForum; private boolean isChannel; @@ -341,7 +340,7 @@ public boolean onFragmentCreate() { if (currentChat != null) { avatarDrawable.setInfo(5, currentChat.title, null); isChannel = ChatObject.isChannel(currentChat) && !currentChat.megagroup; - signMessages = currentChat.signatures; +// signMessages = currentChat.signatures; forum = currentChat.forum; canForum = userId == 0 && (forum || Math.max(info == null ? 0 : info.participants_count, currentChat.participants_count) >= getMessagesController().forumUpgradeParticipantsMin) && (info == null || info.linked_chat_id == 0); NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.chatInfoDidLoad); @@ -349,7 +348,7 @@ public boolean onFragmentCreate() { } else { avatarDrawable.setInfo(5, currentUser.first_name, null); isChannel = false; - signMessages = false; +// signMessages = false; forum = false; canForum = false; NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.userInfoDidLoad); @@ -983,14 +982,14 @@ public void afterTextChanged(Editable editable) { } if (isChannel) { - signCell = new TextCell(context, 23, false, true, null); - signCell.setBackgroundDrawable(Theme.getSelectorDrawable(true)); - signCell.setTextAndCheckAndIcon(getString("ChannelSignMessages", R.string.ChannelSignMessages), signMessages, R.drawable.msg_signed, false); - typeEditContainer.addView(signCell, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); - signCell.setOnClickListener(v -> { - signMessages = !signMessages; - ((TextCell) v).setChecked(signMessages); - }); +// signCell = new TextCell(context, 23, false, true, null); +// signCell.setBackgroundDrawable(Theme.getSelectorDrawable(true)); +// signCell.setTextAndCheckAndIcon(getString("ChannelSignMessages", R.string.ChannelSignMessages), signMessages, R.drawable.msg_signed, false); +// typeEditContainer.addView(signCell, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); +// signCell.setOnClickListener(v -> { +// signMessages = !signMessages; +// ((TextCell) v).setChecked(signMessages); +// }); } else if (currentChat.creator) { forumsCell = new TextCell(context, 23, false, true, null); forumsCell.setBackgroundDrawable(Theme.getSelectorDrawable(true)); @@ -1020,24 +1019,26 @@ public void afterTextChanged(Editable editable) { } ActionBarMenu menu = actionBar.createMenu(); - if (currentUser != null || ChatObject.canChangeChatInfo(currentChat) || signCell != null || historyCell != null) { + if (currentUser != null || ChatObject.canChangeChatInfo(currentChat) || /*signCell != null ||*/ historyCell != null) { doneButton = menu.addItemWithWidth(done_button, R.drawable.ic_ab_done, dp(56)); doneButton.setContentDescription(getString("Done", R.string.Done)); } - if (locationCell != null || signCell != null || historyCell != null || typeCell != null || linkedCell != null || forumsCell != null) { + if (locationCell != null || /*signCell != null ||*/ historyCell != null || typeCell != null || linkedCell != null || forumsCell != null) { settingsSectionCell = new TextInfoPrivacyCell(context); Drawable shadowDrawable = Theme.getThemedDrawable(context, R.drawable.greydivider, Theme.getColor(Theme.key_windowBackgroundGrayShadow, getResourceProvider())); Drawable background = new ColorDrawable(getThemedColor(Theme.key_windowBackgroundGray)); CombinedDrawable combinedDrawable = new CombinedDrawable(background, shadowDrawable, 0, 0); combinedDrawable.setFullsize(true); settingsSectionCell.setBackground(combinedDrawable); - linearLayout1.addView(settingsSectionCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); if (forumsCell != null) { settingsSectionCell.setText(getString("ForumToggleDescription", R.string.ForumToggleDescription)); - } else { + } else if (/*signCell != null*/ false) { settingsSectionCell.setText(getString("ChannelSignMessagesInfo", R.string.ChannelSignMessagesInfo)); + } else { + settingsSectionCell.setFixedSize(12); } + linearLayout1.addView(settingsSectionCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); } infoContainer = new LinearLayout(context); @@ -1541,9 +1542,10 @@ private boolean checkDiscard() { String about = info != null && info.about != null ? info.about : ""; if (info != null && ChatObject.isChannel(currentChat) && info.hidden_prehistory != historyHidden || - nameTextView != null && !currentChat.title.equals(nameTextView.getText().toString()) || - descriptionTextView != null && !about.equals(descriptionTextView.getText().toString()) || - signMessages != currentChat.signatures || forum != currentChat.forum) { + nameTextView != null && !currentChat.title.equals(nameTextView.getText().toString()) || + descriptionTextView != null && !about.equals(descriptionTextView.getText().toString()) || + forum != currentChat.forum + ) { AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); builder.setTitle(getString("UserRestrictionsApplyChanges", R.string.UserRestrictionsApplyChanges)); if (isChannel) { @@ -1588,7 +1590,7 @@ private void processDone() { } donePressed = true; if (currentUser != null) { - TLRPC.TL_bots_setBotInfo req = new TLRPC.TL_bots_setBotInfo(); + TL_bots.setBotInfo req = new TL_bots.setBotInfo(); req.bot = getMessagesController().getInputUser(currentUser); req.flags |= 4; req.lang_code = ""; @@ -1667,10 +1669,10 @@ private void processDone() { if (descriptionTextView != null && !about.equals(descriptionTextView.getText().toString())) { getMessagesController().updateChatAbout(chatId, descriptionTextView.getText().toString(), info); } - if (signMessages != currentChat.signatures) { - currentChat.signatures = true; - getMessagesController().toggleChannelSignatures(chatId, signMessages); - } +// if (signMessages != currentChat.signatures) { +// currentChat.signatures = true; +// getMessagesController().toggleChannelSignatures(chatId, signMessages, false); +// } if (forum != currentChat.forum) { getMessagesController().toggleChannelForum(chatId, forum); List<BaseFragment> fragments = getParentLayout().getFragmentStack(); @@ -1800,7 +1802,7 @@ private void updateFields(boolean updateChat, boolean animated) { boolean isPrivate = !ChatObject.isPublic(currentChat); if (settingsSectionCell != null) { - settingsSectionCell.setVisibility(signCell == null && typeCell == null && (linkedCell == null || linkedCell.getVisibility() != View.VISIBLE) && (historyCell == null || historyCell.getVisibility() != View.VISIBLE) && (locationCell == null || locationCell.getVisibility() != View.VISIBLE) ? View.GONE : View.VISIBLE); + settingsSectionCell.setVisibility(/*signCell == null && */typeCell == null && (linkedCell == null || linkedCell.getVisibility() != View.VISIBLE) && (historyCell == null || historyCell.getVisibility() != View.VISIBLE) && (locationCell == null || locationCell.getVisibility() != View.VISIBLE) ? View.GONE : View.VISIBLE); } if (logCell != null) { @@ -1967,7 +1969,7 @@ private void updateFields(boolean updateChat, boolean animated) { public void updateColorCell() { if (colorCell != null) { - colorCell.set(currentChat, (historyCell != null && historyCell.getVisibility() == View.VISIBLE) || (signCell != null && signCell.getVisibility() == View.VISIBLE) || (forumsCell != null && forumsCell.getVisibility() == View.VISIBLE) || ChatObject.isMegagroup(currentChat) && ChatObject.hasAdminRights(currentChat)); + colorCell.set(currentChat, (historyCell != null && historyCell.getVisibility() == View.VISIBLE) || /*(signCell != null && signCell.getVisibility() == View.VISIBLE) || */(forumsCell != null && forumsCell.getVisibility() == View.VISIBLE) || ChatObject.isMegagroup(currentChat) && ChatObject.hasAdminRights(currentChat)); } } @@ -2045,10 +2047,14 @@ public void onAnimationEnd(Animator animation) { } private void updateReactionsCell(boolean animated) { + final TLRPC.ChatFull chat = getMessagesController().getChatFull(chatId); boolean isChannelAndNotMegaGroup = ChatObject.isChannelAndNotMegaGroup(currentChat); String finalString; if (availableReactions == null || availableReactions instanceof TLRPC.TL_chatReactionsNone) { - finalString = getString("ReactionsOff", R.string.ReactionsOff); + finalString = getString(R.string.ReactionsOff); + if (chat != null && chat.paid_reactions_available) { + finalString = "1"; + } } else if (availableReactions instanceof TLRPC.TL_chatReactionsSome) { TLRPC.TL_chatReactionsSome someReactions = (TLRPC.TL_chatReactionsSome) availableReactions; int count = 0; @@ -2065,16 +2071,19 @@ private void updateReactionsCell(boolean animated) { } } if (isChannelAndNotMegaGroup) { - finalString = count == 0 ? getString("ReactionsOff", R.string.ReactionsOff) : String.valueOf(count); + if (chat != null && chat.paid_reactions_available) { + count++; + } + finalString = count == 0 ? getString(R.string.ReactionsOff) : String.valueOf(count); } else { int reacts = Math.min(getMediaDataController().getEnabledReactionsList().size(), count); - finalString = reacts == 0 ? getString("ReactionsOff", R.string.ReactionsOff) : - LocaleController.formatString("ReactionsCount", R.string.ReactionsCount, reacts, getMediaDataController().getEnabledReactionsList().size()); + finalString = reacts == 0 ? getString(R.string.ReactionsOff) : + LocaleController.formatString(R.string.ReactionsCount, reacts, getMediaDataController().getEnabledReactionsList().size()); } } else { - finalString = getString("ReactionsAll", R.string.ReactionsAll); + finalString = getString(R.string.ReactionsAll); } - reactionsCell.setTextAndValueAndIcon(getString("Reactions", R.string.Reactions), finalString, animated, R.drawable.msg_reactions2, true); + reactionsCell.setTextAndValueAndIcon(getString(R.string.Reactions), finalString, animated, R.drawable.msg_reactions2, true); } @Override @@ -2147,10 +2156,10 @@ public ArrayList<ThemeDescription> getThemeDescriptions() { themeDescriptions.add(new ThemeDescription(settingsSectionCell, ThemeDescription.FLAG_BACKGROUNDFILTER, new Class[]{ShadowSectionCell.class}, null, null, null, Theme.key_windowBackgroundGrayShadow)); themeDescriptions.add(new ThemeDescription(deleteInfoCell, ThemeDescription.FLAG_BACKGROUNDFILTER, new Class[]{ShadowSectionCell.class}, null, null, null, Theme.key_windowBackgroundGrayShadow)); - themeDescriptions.add(new ThemeDescription(signCell, ThemeDescription.FLAG_SELECTOR, null, null, null, null, Theme.key_listSelector)); - themeDescriptions.add(new ThemeDescription(signCell, 0, new Class[]{TextCheckCell.class}, new String[]{"textView"}, null, null, null, Theme.key_windowBackgroundWhiteBlackText)); - themeDescriptions.add(new ThemeDescription(signCell, 0, new Class[]{TextCheckCell.class}, new String[]{"checkBox"}, null, null, null, Theme.key_switchTrack)); - themeDescriptions.add(new ThemeDescription(signCell, 0, new Class[]{TextCheckCell.class}, new String[]{"checkBox"}, null, null, null, Theme.key_switchTrackChecked)); +// themeDescriptions.add(new ThemeDescription(signCell, ThemeDescription.FLAG_SELECTOR, null, null, null, null, Theme.key_listSelector)); +// themeDescriptions.add(new ThemeDescription(signCell, 0, new Class[]{TextCheckCell.class}, new String[]{"textView"}, null, null, null, Theme.key_windowBackgroundWhiteBlackText)); +// themeDescriptions.add(new ThemeDescription(signCell, 0, new Class[]{TextCheckCell.class}, new String[]{"checkBox"}, null, null, null, Theme.key_switchTrack)); +// themeDescriptions.add(new ThemeDescription(signCell, 0, new Class[]{TextCheckCell.class}, new String[]{"checkBox"}, null, null, null, Theme.key_switchTrackChecked)); themeDescriptions.add(new ThemeDescription(deleteCell, ThemeDescription.FLAG_SELECTOR, null, null, null, null, Theme.key_listSelector)); themeDescriptions.add(new ThemeDescription(deleteCell, ThemeDescription.FLAG_TEXTCOLOR, new Class[]{TextSettingsCell.class}, new String[]{"textView"}, null, null, null, Theme.key_text_RedRegular)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatEditTypeActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatEditTypeActivity.java index 478761aa79c..fd139146de8 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatEditTypeActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatEditTypeActivity.java @@ -1364,7 +1364,9 @@ private void updatePrivatePublic() { permanentLinkView.setLink(invite != null ? invite.link : null); permanentLinkView.loadUsers(invite, chatId); checkTextView.setVisibility(!isPrivate && checkTextView.length() != 0 ? View.VISIBLE : View.GONE); - manageLinksInfoCell.setText(LocaleController.getString("ManageLinksInfoHelp", R.string.ManageLinksInfoHelp)); + final TLRPC.ChatFull chatFull = getMessagesController().getChatFull(chatId); + final TLRPC.Chat chat = getMessagesController().getChat(chatId); + manageLinksInfoCell.setText(LocaleController.getString(chatFull != null && chatFull.paid_media_allowed && ChatObject.isChannelAndNotMegaGroup(chat) ? R.string.ManageLinksInfoHelpPaid : R.string.ManageLinksInfoHelp)); if (isPrivate) { typeInfoCell.setBackgroundDrawable(Theme.getThemedDrawableByKey(typeInfoCell.getContext(), R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); manageLinksInfoCell.setBackground(Theme.getThemedDrawableByKey(typeInfoCell.getContext(), R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatPullingDownDrawable.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatPullingDownDrawable.java index be98cd3051c..4a58e65fdd3 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatPullingDownDrawable.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatPullingDownDrawable.java @@ -670,7 +670,7 @@ public static TLRPC.Dialog getNextUnreadDialog(long currentDialogId, int folderI TLRPC.Dialog dialog = dialogs.get(i); TLRPC.Chat chat = messagesController.getChat(-dialog.id); if (chat != null && dialog.id != currentDialogId && dialog.unread_count > 0 && DialogObject.isChannel(dialog) && !chat.megagroup && !messagesController.isPromoDialog(dialog.id, false)) { - String reason = MessagesController.getRestrictionReason(chat.restriction_reason); + String reason = messagesController.getRestrictionReason(chat.restriction_reason); if (reason == null) { return dialog; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatRightsEditActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatRightsEditActivity.java index 86d009ae7d8..db031e911df 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatRightsEditActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatRightsEditActivity.java @@ -555,6 +555,9 @@ public void onScrollStateChanged(RecyclerView recyclerView, int newState) { return; } if (position == sendMediaRow) { + if (view instanceof TextCheckCell2 && !((TextCheckCell2) view).isEnabled()) { + return; + } sendMediaExpanded = !sendMediaExpanded; updateRows(false); if (sendMediaExpanded) { @@ -564,6 +567,9 @@ public void onScrollStateChanged(RecyclerView recyclerView, int newState) { } return; } else if (position == channelMessagesRow) { + if (view instanceof TextCheckCell2 && !((TextCheckCell2) view).isEnabled()) { + return; + } channelMessagesExpanded = !channelMessagesExpanded; updateRows(false); listViewAdapter.notifyItemChanged(channelMessagesRow); @@ -574,6 +580,9 @@ public void onScrollStateChanged(RecyclerView recyclerView, int newState) { } return; } else if (position == channelStoriesRow) { + if (view instanceof TextCheckCell2 && !((TextCheckCell2) view).isEnabled()) { + return; + } channelStoriesExpanded = !channelStoriesExpanded; updateRows(false); listViewAdapter.notifyItemChanged(channelStoriesRow); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatUsersActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatUsersActivity.java index 2b3cd044a69..aab3856ece5 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatUsersActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatUsersActivity.java @@ -8,6 +8,8 @@ package org.telegram.ui; +import static org.telegram.messenger.LocaleController.getString; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; @@ -66,6 +68,7 @@ import org.telegram.ui.Cells.ManageChatUserCell; import org.telegram.ui.Cells.ShadowSectionCell; import org.telegram.ui.Cells.TextCell; +import org.telegram.ui.Cells.TextCheckCell; import org.telegram.ui.Cells.TextCheckCell2; import org.telegram.ui.Cells.TextInfoPrivacyCell; import org.telegram.ui.Cells.TextSettingsCell; @@ -91,6 +94,7 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente private static final int VIEW_TYPE_INNER_CHECK = 13; private static final int VIEW_TYPE_EXPANDABLE_SWITCH = 14; private static final int VIEW_TYPE_NOT_RESTRICT_BOOSTERS_SLIDER = 15; + private static final int VIEW_TYPE_CHECK = 16; private ListAdapter listViewAdapter; private StickerEmptyView emptyView; @@ -186,6 +190,10 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente private int loadingUserCellRow; private int loadingHeaderRow; + private int signMessagesRow; + private int signMessagesProfilesRow; + private int signMessagesInfoRow; + private int delayResults; private boolean sendMediaExpanded; @@ -201,6 +209,10 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente private boolean isEnabledNotRestrictBoosters; private int notRestrictBoosters; + private boolean initialSignatures; + private boolean initialProfiles; + private boolean signatures, profiles; + private final static int search_button = 0; private final static int done_button = 1; @@ -276,6 +288,10 @@ public ChatUsersActivity(Bundle args) { initialBannedRights = ChatObject.getBannedRightsString(defaultBannedRights); isChannel = ChatObject.isChannel(currentChat) && !currentChat.megagroup; isForum = ChatObject.isForum(currentChat); + if (currentChat != null) { + initialSignatures = signatures = currentChat.signatures; + initialProfiles = profiles = currentChat.signature_profiles; + } } private void updateRows() { @@ -300,6 +316,9 @@ private void updateRows() { gigaHeaderRow = -1; participantsEndRow = -1; participantsInfoRow = -1; + signMessagesRow = -1; + signMessagesProfilesRow = -1; + signMessagesInfoRow = -1; blockedEmptyRow = -1; permissionsSectionRow = -1; sendMessagesRow = -1; @@ -471,6 +490,15 @@ private void updateRows() { } else if (!firstLoaded) { loadingUserCellRow = rowCount++; } + if (ChatObject.isChannelAndNotMegaGroup(currentChat) && ChatObject.hasAdminRights(currentChat)) { + signMessagesRow = rowCount++; + if (signatures) { + signMessagesProfilesRow = rowCount++; + signMessagesInfoRow = rowCount++; + } else { + signMessagesInfoRow = rowCount++; + } + } } else if (type == TYPE_USERS) { if (ChatObject.isChannel(currentChat)) { if (!ChatObject.isChannelAndNotMegaGroup(currentChat) && !needOpenSearch) { @@ -541,25 +569,25 @@ public View createView(Context context) { actionBar.setBackButtonImage(R.drawable.ic_ab_back); actionBar.setAllowOverlayTitle(true); if (type == TYPE_KICKED) { - actionBar.setTitle(LocaleController.getString("ChannelPermissions", R.string.ChannelPermissions)); + actionBar.setTitle(getString("ChannelPermissions", R.string.ChannelPermissions)); } else if (type == TYPE_BANNED) { - actionBar.setTitle(LocaleController.getString("ChannelBlacklist", R.string.ChannelBlacklist)); + actionBar.setTitle(getString("ChannelBlacklist", R.string.ChannelBlacklist)); } else if (type == TYPE_ADMIN) { - actionBar.setTitle(LocaleController.getString("ChannelAdministrators", R.string.ChannelAdministrators)); + actionBar.setTitle(getString("ChannelAdministrators", R.string.ChannelAdministrators)); } else if (type == TYPE_USERS) { if (selectType == SELECT_TYPE_MEMBERS) { if (isChannel) { - actionBar.setTitle(LocaleController.getString("ChannelSubscribers", R.string.ChannelSubscribers)); + actionBar.setTitle(getString("ChannelSubscribers", R.string.ChannelSubscribers)); } else { - actionBar.setTitle(LocaleController.getString("ChannelMembers", R.string.ChannelMembers)); + actionBar.setTitle(getString("ChannelMembers", R.string.ChannelMembers)); } } else { if (selectType == SELECT_TYPE_ADMIN) { - actionBar.setTitle(LocaleController.getString("ChannelAddAdmin", R.string.ChannelAddAdmin)); + actionBar.setTitle(getString("ChannelAddAdmin", R.string.ChannelAddAdmin)); } else if (selectType == SELECT_TYPE_BLOCK) { - actionBar.setTitle(LocaleController.getString("ChannelBlockUser", R.string.ChannelBlockUser)); + actionBar.setTitle(getString("ChannelBlockUser", R.string.ChannelBlockUser)); } else if (selectType == SELECT_TYPE_EXCEPTION) { - actionBar.setTitle(LocaleController.getString("ChannelAddException", R.string.ChannelAddException)); + actionBar.setTitle(getString("ChannelAddException", R.string.ChannelAddException)); } } } @@ -624,17 +652,20 @@ public void onTextChanged(EditText editText) { searchItem.setVisibility(View.GONE); } if (type == TYPE_KICKED) { - searchItem.setSearchFieldHint(LocaleController.getString("ChannelSearchException", R.string.ChannelSearchException)); + searchItem.setSearchFieldHint(getString("ChannelSearchException", R.string.ChannelSearchException)); } else { - searchItem.setSearchFieldHint(LocaleController.getString("Search", R.string.Search)); + searchItem.setSearchFieldHint(getString("Search", R.string.Search)); } if (!(ChatObject.isChannel(currentChat) || currentChat.creator)) { searchItem.setVisibility(View.GONE); } if (type == TYPE_KICKED) { - doneItem = menu.addItemWithWidth(done_button, R.drawable.ic_ab_done, AndroidUtilities.dp(56), LocaleController.getString("Done", R.string.Done)); + doneItem = menu.addItemWithWidth(done_button, R.drawable.ic_ab_done, AndroidUtilities.dp(56), getString("Done", R.string.Done)); } + } else if (type == TYPE_ADMIN && ChatObject.isChannelAndNotMegaGroup(currentChat) && ChatObject.hasAdminRights(currentChat)) { + ActionBarMenu menu = actionBar.createMenu(); + doneItem = menu.addItemWithWidth(done_button, R.drawable.ic_ab_done, AndroidUtilities.dp(56), getString("Done", R.string.Done)); } fragmentView = new FrameLayout(context) { @@ -661,8 +692,8 @@ protected void dispatchDraw(Canvas canvas) { progressBar.setVisibility(View.GONE); emptyView = new StickerEmptyView(context, progressLayout, StickerEmptyView.STICKER_TYPE_SEARCH); - emptyView.title.setText(LocaleController.getString("NoResult", R.string.NoResult)); - emptyView.subtitle.setText(LocaleController.getString("SearchEmptyViewFilteredSubtitle2", R.string.SearchEmptyViewFilteredSubtitle2)); + emptyView.title.setText(getString("NoResult", R.string.NoResult)); + emptyView.subtitle.setText(getString("SearchEmptyViewFilteredSubtitle2", R.string.SearchEmptyViewFilteredSubtitle2)); emptyView.setVisibility(View.GONE); emptyView.setAnimateLayoutChange(true); emptyView.showProgress(true, false); @@ -730,13 +761,13 @@ protected void onChangeAnimationUpdate(RecyclerView.ViewHolder holder) { listView.invalidate(); } }; - itemAnimator.setDurations(320); - itemAnimator.setMoveDelay(0); - itemAnimator.setAddDelay(0); + itemAnimator.setDurations(420); +// itemAnimator.setMoveDelay(0); +// itemAnimator.setAddDelay(0); itemAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); itemAnimator.setDelayAnimations(false); - listView.setItemAnimator(itemAnimator); itemAnimator.setSupportsChangeAnimations(false); + listView.setItemAnimator(itemAnimator); listView.setAnimateEmptyView(true, RecyclerListView.EMPTY_VIEW_ANIMATION_TYPE_ALPHA); listView.setAdapter(listViewAdapter = new ListAdapter(context)); listView.setVerticalScrollbarPosition(LocaleController.isRTL ? RecyclerListView.SCROLLBAR_POSITION_LEFT : RecyclerListView.SCROLLBAR_POSITION_RIGHT); @@ -744,7 +775,27 @@ protected void onChangeAnimationUpdate(RecyclerView.ViewHolder holder) { listView.setOnItemClickListener((view, position, x, y) -> { boolean listAdapter = listView.getAdapter() == listViewAdapter; - if (listAdapter) { + if (position == signMessagesRow) { + signatures = !signatures; + ((TextCheckCell) view).setChecked(signatures); + + AndroidUtilities.updateVisibleRows(listView); + DiffCallback diffCallback = saveState(); + updateRows(); + updateListAnimated(diffCallback); + + listViewAdapter.notifyItemChanged(signMessagesInfoRow); + } else if (position == signMessagesProfilesRow) { + profiles = !profiles; + ((TextCheckCell) view).setChecked(profiles); + + AndroidUtilities.updateVisibleRows(listView); + DiffCallback diffCallback = saveState(); + updateRows(); + updateListAnimated(diffCallback); + + listViewAdapter.notifyItemChanged(signMessagesInfoRow); + } else if (listAdapter) { if (isExpandableSendMediaRow(position)) { CheckBoxCell checkBoxCell = (CheckBoxCell) view; if (position == sendMediaPhotosRow) { @@ -962,7 +1013,7 @@ public void needAddBot(TLRPC.User user) { } textCell.setChecked(info.antispam = wasAntispam); textCell.getCheckBox().setIcon(ChatObject.canUserDoAdminAction(currentChat, ChatObject.ACTION_DELETE_MESSAGES) && (info == null || !info.antispam || getParticipantsCount() >= getMessagesController().telegramAntispamGroupSizeMin) ? 0 : R.drawable.permission_locked); - BulletinFactory.of(ChatUsersActivity.this).createSimpleBulletin(R.raw.error, LocaleController.getString("UnknownError", R.string.UnknownError)).show(); + BulletinFactory.of(ChatUsersActivity.this).createSimpleBulletin(R.raw.error, getString("UnknownError", R.string.UnknownError)).show(); }); } antiSpamToggleLoading = false; @@ -992,7 +1043,7 @@ public void needAddBot(TLRPC.User user) { } textCell.setChecked(info.participants_hidden = wasParticipantsHidden); textCell.getCheckBox().setIcon(ChatObject.canUserDoAdminAction(currentChat, ChatObject.ACTION_BLOCK_USERS) && (info == null || !info.participants_hidden || getParticipantsCount() >= getMessagesController().hiddenMembersGroupSizeMin) ? 0 : R.drawable.permission_locked); - BulletinFactory.of(ChatUsersActivity.this).createSimpleBulletin(R.raw.error, LocaleController.getString("UnknownError", R.string.UnknownError)).show(); + BulletinFactory.of(ChatUsersActivity.this).createSimpleBulletin(R.raw.error, getString("UnknownError", R.string.UnknownError)).show(); }); } hideMembersToggleLoading = false; @@ -1050,9 +1101,9 @@ protected void onCancel() { } if (checkCell.hasIcon()) { if (ChatObject.isPublic(currentChat) && (position == pinMessagesRow || position == changeInfoRow)) { - BulletinFactory.of(this).createErrorBulletin(LocaleController.getString("EditCantEditPermissionsPublic", R.string.EditCantEditPermissionsPublic)).show(); + BulletinFactory.of(this).createErrorBulletin(getString("EditCantEditPermissionsPublic", R.string.EditCantEditPermissionsPublic)).show(); } else { - BulletinFactory.of(this).createErrorBulletin(LocaleController.getString("EditCantEditPermissions", R.string.EditCantEditPermissions)).show(); + BulletinFactory.of(this).createErrorBulletin(getString("EditCantEditPermissions", R.string.EditCantEditPermissions)).show(); } return; } @@ -1182,10 +1233,10 @@ protected void onCancel() { final boolean canEdit = canEditAdmin; final String rankFinal = rank; AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); - builder.setTitle(LocaleController.getString("AppName", R.string.AppName)); + builder.setTitle(getString("AppName", R.string.AppName)); builder.setMessage(LocaleController.formatString("AdminWillBeRemoved", R.string.AdminWillBeRemoved, UserObject.getUserName(user))); - builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), (dialog, which) -> openRightsEdit(user.id, participant, ar, br, rankFinal, canEdit, selectType == SELECT_TYPE_ADMIN ? 0 : 1, false)); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder.setPositiveButton(getString("OK", R.string.OK), (dialog, which) -> openRightsEdit(user.id, participant, ar, br, rankFinal, canEdit, selectType == SELECT_TYPE_ADMIN ? 0 : 1, false)); + builder.setNegativeButton(getString("Cancel", R.string.Cancel), null); showDialog(builder.create()); } else { openRightsEdit(peerId, participant, adminRights, bannedRights, rank, canEditAdmin, selectType == SELECT_TYPE_ADMIN ? 0 : 1, selectType == SELECT_TYPE_ADMIN || selectType == SELECT_TYPE_EXCEPTION); @@ -1760,22 +1811,22 @@ private boolean createMenuForParticipant(final TLObject participant, boolean res ItemOptions.makeOptions(this, view) .setScrimViewBackground(new ColorDrawable(Theme.getColor(Theme.key_windowBackgroundWhite))) - .addIf(allowSetAdmin, R.drawable.msg_admins, editingAdmin ? LocaleController.getString("EditAdminRights", R.string.EditAdminRights) : LocaleController.getString("SetAsAdmin", R.string.SetAsAdmin), () -> openRightsFor.run(0)) - .addIf(canChangePermission, R.drawable.msg_permissions, LocaleController.getString("ChangePermissions", R.string.ChangePermissions), () -> { + .addIf(allowSetAdmin, R.drawable.msg_admins, editingAdmin ? getString("EditAdminRights", R.string.EditAdminRights) : getString("SetAsAdmin", R.string.SetAsAdmin), () -> openRightsFor.run(0)) + .addIf(canChangePermission, R.drawable.msg_permissions, getString("ChangePermissions", R.string.ChangePermissions), () -> { if (participant instanceof TLRPC.TL_channelParticipantAdmin || participant instanceof TLRPC.TL_chatParticipantAdmin) { showDialog( new AlertDialog.Builder(getParentActivity()) - .setTitle(LocaleController.getString("AppName", R.string.AppName)) + .setTitle(getString("AppName", R.string.AppName)) .setMessage(LocaleController.formatString("AdminWillBeRemoved", R.string.AdminWillBeRemoved, UserObject.getUserName(user))) - .setPositiveButton(LocaleController.getString("OK", R.string.OK), (dialog, which) -> openRightsFor.run(1)) - .setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null) + .setPositiveButton(getString("OK", R.string.OK), (dialog, which) -> openRightsFor.run(1)) + .setNegativeButton(getString("Cancel", R.string.Cancel), null) .create() ); } else { openRightsFor.run(1); } }) - .addIf(ChatObject.canBlockUsers(currentChat) && canEditAdmin, R.drawable.msg_remove, isChannel ? LocaleController.getString("ChannelRemoveUser", R.string.ChannelRemoveUser) : LocaleController.getString("KickFromGroup", R.string.KickFromGroup), true, () -> { + .addIf(ChatObject.canBlockUsers(currentChat) && canEditAdmin, R.drawable.msg_remove, isChannel ? getString("ChannelRemoveUser", R.string.ChannelRemoveUser) : getString("KickFromGroup", R.string.KickFromGroup), true, () -> { getMessagesController().deleteParticipantFromChat(chatId, user); removeParticipants(peerId); if (currentChat != null && user != null && BulletinFactory.canShowBulletin(this)) { @@ -1789,7 +1840,7 @@ private boolean createMenuForParticipant(final TLObject participant, boolean res ItemOptions options = ItemOptions.makeOptions(this, view); if (type == TYPE_KICKED && ChatObject.canBlockUsers(currentChat)) { - options.add(R.drawable.msg_permissions, LocaleController.getString("ChannelEditPermissions", R.string.ChannelEditPermissions), () -> { + options.add(R.drawable.msg_permissions, getString("ChannelEditPermissions", R.string.ChannelEditPermissions), () -> { ChatRightsEditActivity fragment = new ChatRightsEditActivity(peerId, chatId, null, defaultBannedRights, bannedRights, rank, ChatRightsEditActivity.TYPE_BANNED, true, false, null); fragment.setDelegate(new ChatRightsEditActivity.ChatRightsEditActivityDelegate() { @Override @@ -1810,19 +1861,19 @@ public void didChangeOwner(TLRPC.User user) { }); presentFragment(fragment); }); - options.add(R.drawable.msg_delete, LocaleController.getString("ChannelDeleteFromList", R.string.ChannelDeleteFromList), true, () -> deletePeer(peerId)); + options.add(R.drawable.msg_delete, getString("ChannelDeleteFromList", R.string.ChannelDeleteFromList), true, () -> deletePeer(peerId)); } else if (type == TYPE_BANNED && ChatObject.canBlockUsers(currentChat)) { if (ChatObject.canAddUsers(currentChat) && peerId > 0) { - options.add(R.drawable.msg_contact_add, isChannel ? LocaleController.getString("ChannelAddToChannel", R.string.ChannelAddToChannel) : LocaleController.getString("ChannelAddToGroup", R.string.ChannelAddToGroup), () -> { + options.add(R.drawable.msg_contact_add, isChannel ? getString("ChannelAddToChannel", R.string.ChannelAddToChannel) : getString("ChannelAddToGroup", R.string.ChannelAddToGroup), () -> { deletePeer(peerId); TLRPC.User user = getMessagesController().getUser(peerId); getMessagesController().addUserToChat(chatId, user, 0, null, ChatUsersActivity.this, null); }); } - options.add(R.drawable.msg_delete, LocaleController.getString("ChannelDeleteFromList", R.string.ChannelDeleteFromList), true, () -> deletePeer(peerId)); + options.add(R.drawable.msg_delete, getString("ChannelDeleteFromList", R.string.ChannelDeleteFromList), true, () -> deletePeer(peerId)); } else if (type == TYPE_ADMIN && ChatObject.canAddAdmins(currentChat) && canEdit) { if (currentChat.creator || !(participant instanceof TLRPC.TL_channelParticipantCreator)) { - options.add(R.drawable.msg_admins, LocaleController.getString("EditAdminRights", R.string.EditAdminRights), () -> { + options.add(R.drawable.msg_admins, getString("EditAdminRights", R.string.EditAdminRights), () -> { ChatRightsEditActivity fragment = new ChatRightsEditActivity(peerId, chatId, adminRights, null, null, rank, ChatRightsEditActivity.TYPE_ADMIN, true, false, null); fragment.setDelegate(new ChatRightsEditActivity.ChatRightsEditActivityDelegate() { @Override @@ -1844,7 +1895,7 @@ public void didChangeOwner(TLRPC.User user) { presentFragment(fragment); }); } - options.add(R.drawable.msg_remove, LocaleController.getString("ChannelRemoveUserAdmin", R.string.ChannelRemoveUserAdmin), true, () -> { + options.add(R.drawable.msg_remove, getString("ChannelRemoveUserAdmin", R.string.ChannelRemoveUserAdmin), true, () -> { getMessagesController().setUserAdminRole(chatId, getMessagesController().getUser(peerId), new TLRPC.TL_chatAdminRights(), "", !isChannel, ChatUsersActivity.this, false, false, null, null); removeParticipants(peerId); }); @@ -1957,16 +2008,16 @@ private String formatSeconds(int seconds) { private boolean checkDiscard() { String newBannedRights = ChatObject.getBannedRightsString(defaultBannedRights); - if (!newBannedRights.equals(initialBannedRights) || initialSlowmode != selectedSlowmode || hasNotRestrictBoostersChanges()) { + if (!newBannedRights.equals(initialBannedRights) || initialSlowmode != selectedSlowmode || hasNotRestrictBoostersChanges() || signatures != initialSignatures || (signatures && profiles) != initialProfiles) { AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); - builder.setTitle(LocaleController.getString("UserRestrictionsApplyChanges", R.string.UserRestrictionsApplyChanges)); + builder.setTitle(getString("UserRestrictionsApplyChanges", R.string.UserRestrictionsApplyChanges)); if (isChannel) { - builder.setMessage(LocaleController.getString("ChannelSettingsChangedAlert", R.string.ChannelSettingsChangedAlert)); + builder.setMessage(getString("ChannelSettingsChangedAlert", R.string.ChannelSettingsChangedAlert)); } else { - builder.setMessage(LocaleController.getString("GroupSettingsChangedAlert", R.string.GroupSettingsChangedAlert)); + builder.setMessage(getString("GroupSettingsChangedAlert", R.string.GroupSettingsChangedAlert)); } - builder.setPositiveButton(LocaleController.getString("ApplyTheme", R.string.ApplyTheme), (dialogInterface, i) -> processDone()); - builder.setNegativeButton(LocaleController.getString("PassportDiscard", R.string.PassportDiscard), (dialog, which) -> finishFragment()); + builder.setPositiveButton(getString("ApplyTheme", R.string.ApplyTheme), (dialogInterface, i) -> processDone()); + builder.setNegativeButton(getString("PassportDiscard", R.string.PassportDiscard), (dialog, which) -> finishFragment()); showDialog(builder.create()); return false; } @@ -1983,92 +2034,92 @@ private String formatUserPermissions(TLRPC.TL_chatBannedRights rights) { } StringBuilder builder = new StringBuilder(); if (rights.view_messages && defaultBannedRights.view_messages != rights.view_messages) { - builder.append(LocaleController.getString("UserRestrictionsNoRead", R.string.UserRestrictionsNoRead)); + builder.append(getString("UserRestrictionsNoRead", R.string.UserRestrictionsNoRead)); } if (rights.send_messages && defaultBannedRights.send_plain != rights.send_plain) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoSendText", R.string.UserRestrictionsNoSendText)); + builder.append(getString("UserRestrictionsNoSendText", R.string.UserRestrictionsNoSendText)); } if (rights.send_media && defaultBannedRights.send_media != rights.send_media) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoSendMedia", R.string.UserRestrictionsNoSendMedia)); + builder.append(getString("UserRestrictionsNoSendMedia", R.string.UserRestrictionsNoSendMedia)); } else { if (rights.send_photos && defaultBannedRights.send_photos != rights.send_photos) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoSendPhotos", R.string.UserRestrictionsNoSendPhotos)); + builder.append(getString("UserRestrictionsNoSendPhotos", R.string.UserRestrictionsNoSendPhotos)); } if (rights.send_videos && defaultBannedRights.send_videos != rights.send_videos) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoSendVideos", R.string.UserRestrictionsNoSendVideos)); + builder.append(getString("UserRestrictionsNoSendVideos", R.string.UserRestrictionsNoSendVideos)); } if (rights.send_audios && defaultBannedRights.send_audios != rights.send_audios) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoSendMusic", R.string.UserRestrictionsNoSendMusic)); + builder.append(getString("UserRestrictionsNoSendMusic", R.string.UserRestrictionsNoSendMusic)); } if (rights.send_docs && defaultBannedRights.send_docs != rights.send_docs) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoSendDocs", R.string.UserRestrictionsNoSendDocs)); + builder.append(getString("UserRestrictionsNoSendDocs", R.string.UserRestrictionsNoSendDocs)); } if (rights.send_voices && defaultBannedRights.send_voices != rights.send_voices) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoSendVoice", R.string.UserRestrictionsNoSendVoice)); + builder.append(getString("UserRestrictionsNoSendVoice", R.string.UserRestrictionsNoSendVoice)); } if (rights.send_roundvideos && defaultBannedRights.send_roundvideos != rights.send_roundvideos) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoSendRound", R.string.UserRestrictionsNoSendRound)); + builder.append(getString("UserRestrictionsNoSendRound", R.string.UserRestrictionsNoSendRound)); } } if (rights.send_stickers && defaultBannedRights.send_stickers != rights.send_stickers) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoSendStickers", R.string.UserRestrictionsNoSendStickers)); + builder.append(getString("UserRestrictionsNoSendStickers", R.string.UserRestrictionsNoSendStickers)); } if (rights.send_polls && defaultBannedRights.send_polls != rights.send_polls) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoSendPolls", R.string.UserRestrictionsNoSendPolls)); + builder.append(getString("UserRestrictionsNoSendPolls", R.string.UserRestrictionsNoSendPolls)); } if (rights.embed_links && !rights.send_plain && defaultBannedRights.embed_links != rights.embed_links) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoEmbedLinks", R.string.UserRestrictionsNoEmbedLinks)); + builder.append(getString("UserRestrictionsNoEmbedLinks", R.string.UserRestrictionsNoEmbedLinks)); } if (rights.invite_users && defaultBannedRights.invite_users != rights.invite_users) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoInviteUsers", R.string.UserRestrictionsNoInviteUsers)); + builder.append(getString("UserRestrictionsNoInviteUsers", R.string.UserRestrictionsNoInviteUsers)); } if (rights.pin_messages && defaultBannedRights.pin_messages != rights.pin_messages) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoPinMessages", R.string.UserRestrictionsNoPinMessages)); + builder.append(getString("UserRestrictionsNoPinMessages", R.string.UserRestrictionsNoPinMessages)); } if (rights.change_info && defaultBannedRights.change_info != rights.change_info) { if (builder.length() != 0) { builder.append(", "); } - builder.append(LocaleController.getString("UserRestrictionsNoChangeInfo", R.string.UserRestrictionsNoChangeInfo)); + builder.append(getString("UserRestrictionsNoChangeInfo", R.string.UserRestrictionsNoChangeInfo)); } if (builder.length() != 0) { builder.replace(0, 1, builder.substring(0, 1).toUpperCase()); @@ -2078,43 +2129,47 @@ private String formatUserPermissions(TLRPC.TL_chatBannedRights rights) { } private void processDone() { - if (type != TYPE_KICKED) { - return; - } - if (currentChat.creator && !ChatObject.isChannel(currentChat) && selectedSlowmode != initialSlowmode && info != null) { - MessagesController.getInstance(currentAccount).convertToMegaGroup(getParentActivity(), chatId, this, param -> { - if (param != 0) { - chatId = param; - currentChat = MessagesController.getInstance(currentAccount).getChat(param); - processDone(); + if (type == TYPE_KICKED) { + if (currentChat.creator && !ChatObject.isChannel(currentChat) && selectedSlowmode != initialSlowmode && info != null) { + MessagesController.getInstance(currentAccount).convertToMegaGroup(getParentActivity(), chatId, this, param -> { + if (param != 0) { + chatId = param; + currentChat = MessagesController.getInstance(currentAccount).getChat(param); + processDone(); + } + }); + return; + } + String newBannedRights = ChatObject.getBannedRightsString(defaultBannedRights); + if (!newBannedRights.equals(initialBannedRights)) { + getMessagesController().setDefaultBannedRole(chatId, defaultBannedRights, ChatObject.isChannel(currentChat), this); + TLRPC.Chat chat = getMessagesController().getChat(chatId); + if (chat != null) { + chat.default_banned_rights = defaultBannedRights; } - }); - return; - } - String newBannedRights = ChatObject.getBannedRightsString(defaultBannedRights); - if (!newBannedRights.equals(initialBannedRights)) { - getMessagesController().setDefaultBannedRole(chatId, defaultBannedRights, ChatObject.isChannel(currentChat), this); - TLRPC.Chat chat = getMessagesController().getChat(chatId); - if (chat != null) { - chat.default_banned_rights = defaultBannedRights; } - } - if (selectedSlowmode != initialSlowmode && info != null) { - info.slowmode_seconds = getSecondsForIndex(selectedSlowmode); - info.flags |= 131072; - getMessagesController().setChannelSlowMode(chatId, info.slowmode_seconds); - } + if (selectedSlowmode != initialSlowmode && info != null) { + info.slowmode_seconds = getSecondsForIndex(selectedSlowmode); + info.flags |= 131072; + getMessagesController().setChannelSlowMode(chatId, info.slowmode_seconds); + } - if (hasNotRestrictBoostersChanges()) { - boolean isEnabledNotRestrictBoosters = this.isEnabledNotRestrictBoosters && isNotRestrictBoostersVisible(); - if (isEnabledNotRestrictBoosters && notRestrictBoosters == 0) { - getMessagesController().setBoostsToUnblockRestrictions(chatId, 1); - } else if (!isEnabledNotRestrictBoosters && notRestrictBoosters != 0) { - getMessagesController().setBoostsToUnblockRestrictions(chatId, 0); - } else { - getMessagesController().setBoostsToUnblockRestrictions(chatId, notRestrictBoosters); + if (hasNotRestrictBoostersChanges()) { + boolean isEnabledNotRestrictBoosters = this.isEnabledNotRestrictBoosters && isNotRestrictBoostersVisible(); + if (isEnabledNotRestrictBoosters && notRestrictBoosters == 0) { + getMessagesController().setBoostsToUnblockRestrictions(chatId, 1); + } else if (!isEnabledNotRestrictBoosters && notRestrictBoosters != 0) { + getMessagesController().setBoostsToUnblockRestrictions(chatId, 0); + } else { + getMessagesController().setBoostsToUnblockRestrictions(chatId, notRestrictBoosters); + } + } + } else if (type == TYPE_ADMIN) { + if (signatures != initialSignatures || (signatures && profiles) != initialProfiles) { + getMessagesController().toggleChannelSignatures(chatId, signatures, signatures && profiles); } } + finishFragment(); } @@ -2954,20 +3009,20 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { GraySectionCell sectionCell = (GraySectionCell) holder.itemView; if (position == groupStartRow) { if (type == TYPE_BANNED) { - sectionCell.setText(LocaleController.getString("ChannelBlockedUsers", R.string.ChannelBlockedUsers)); + sectionCell.setText(getString("ChannelBlockedUsers", R.string.ChannelBlockedUsers)); } else if (type == TYPE_KICKED) { - sectionCell.setText(LocaleController.getString("ChannelRestrictedUsers", R.string.ChannelRestrictedUsers)); + sectionCell.setText(getString("ChannelRestrictedUsers", R.string.ChannelRestrictedUsers)); } else { if (isChannel) { - sectionCell.setText(LocaleController.getString("ChannelSubscribers", R.string.ChannelSubscribers)); + sectionCell.setText(getString("ChannelSubscribers", R.string.ChannelSubscribers)); } else { - sectionCell.setText(LocaleController.getString("ChannelMembers", R.string.ChannelMembers)); + sectionCell.setText(getString("ChannelMembers", R.string.ChannelMembers)); } } } else if (position == globalStartRow) { - sectionCell.setText(LocaleController.getString("GlobalSearch", R.string.GlobalSearch)); + sectionCell.setText(getString("GlobalSearch", R.string.GlobalSearch)); } else if (position == contactsStartRow) { - sectionCell.setText(LocaleController.getString("Contacts", R.string.Contacts)); + sectionCell.setText(getString("Contacts", R.string.Contacts)); } break; } @@ -3001,6 +3056,9 @@ public ListAdapter(Context context) { @Override public boolean isEnabled(RecyclerView.ViewHolder holder) { int viewType = holder.getItemViewType(); + if (viewType == VIEW_TYPE_CHECK) { + return true; + } if (viewType == 7 || viewType == VIEW_TYPE_EXPANDABLE_SWITCH) { return ChatObject.canBlockUsers(currentChat); } else if (viewType == 0) { @@ -3066,9 +3124,9 @@ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType view = new TextInfoPrivacyCell(mContext); TextInfoPrivacyCell privacyCell = (TextInfoPrivacyCell) view; if (isChannel) { - privacyCell.setText(LocaleController.getString(R.string.NoBlockedChannel2)); + privacyCell.setText(getString(R.string.NoBlockedChannel2)); } else { - privacyCell.setText(LocaleController.getString(R.string.NoBlockedGroup2)); + privacyCell.setText(getString(R.string.NoBlockedGroup2)); } privacyCell.setBackground(Theme.getThemedDrawableByKey(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); break; @@ -3117,7 +3175,7 @@ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType chooseView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); chooseView.setOptions( selectedSlowmode, - LocaleController.getString("SlowmodeOff", R.string.SlowmodeOff), + getString("SlowmodeOff", R.string.SlowmodeOff), LocaleController.formatString("SlowmodeSeconds", R.string.SlowmodeSeconds, 10), LocaleController.formatString("SlowmodeSeconds", R.string.SlowmodeSeconds, 30), LocaleController.formatString("SlowmodeMinutes", R.string.SlowmodeMinutes, 1), @@ -3164,6 +3222,10 @@ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType view = checkBoxCell; view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); break; + case VIEW_TYPE_CHECK: + view = new TextCheckCell(mContext, getResourceProvider()); + view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + break; } return new RecyclerListView.Holder(view); } @@ -3240,12 +3302,12 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { } else if (type == TYPE_ADMIN) { String role = null; if (creator) { - role = LocaleController.getString("ChannelCreator", R.string.ChannelCreator); + role = getString("ChannelCreator", R.string.ChannelCreator); } else if (admin) { TLRPC.User user1 = getMessagesController().getUser(promotedBy); if (user1 != null) { if (user1.id == peerId) { - role = LocaleController.getString("ChannelAdministrator", R.string.ChannelAdministrator); + role = getString("ChannelAdministrator", R.string.ChannelAdministrator); } else { role = LocaleController.formatString("EditAdminPromotedBy", R.string.EditAdminPromotedBy, UserObject.getUserName(user1)); } @@ -3266,22 +3328,22 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { case 1: TextInfoPrivacyCell privacyCell = (TextInfoPrivacyCell) holder.itemView; if (position == antiSpamInfoRow) { - privacyCell.setText(LocaleController.getString("ChannelAntiSpamInfo", R.string.ChannelAntiSpamInfo)); + privacyCell.setText(getString("ChannelAntiSpamInfo", R.string.ChannelAntiSpamInfo)); privacyCell.setBackgroundDrawable(Theme.getThemedDrawableByKey(mContext, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); } else if (position == participantsInfoRow) { if (type == TYPE_BANNED || type == TYPE_KICKED) { if (isChannel) { - privacyCell.setText(LocaleController.getString("NoBlockedChannel2", R.string.NoBlockedChannel2)); + privacyCell.setText(getString("NoBlockedChannel2", R.string.NoBlockedChannel2)); } else { - privacyCell.setText(LocaleController.getString("NoBlockedGroup2", R.string.NoBlockedGroup2)); + privacyCell.setText(getString("NoBlockedGroup2", R.string.NoBlockedGroup2)); } privacyCell.setBackgroundDrawable(Theme.getThemedDrawableByKey(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); } else if (type == TYPE_ADMIN) { if (addNewRow != -1) { if (isChannel) { - privacyCell.setText(LocaleController.getString("ChannelAdminsInfo", R.string.ChannelAdminsInfo)); + privacyCell.setText(getString("ChannelAdminsInfo", R.string.ChannelAdminsInfo)); } else { - privacyCell.setText(LocaleController.getString("MegaAdminsInfo", R.string.MegaAdminsInfo)); + privacyCell.setText(getString("MegaAdminsInfo", R.string.MegaAdminsInfo)); } } else { privacyCell.setText(""); @@ -3291,7 +3353,7 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (!isChannel || selectType != SELECT_TYPE_MEMBERS) { privacyCell.setText(""); } else { - privacyCell.setText(LocaleController.getString("ChannelMembersInfo", R.string.ChannelMembersInfo)); + privacyCell.setText(getString("ChannelMembersInfo", R.string.ChannelMembersInfo)); } privacyCell.setBackgroundDrawable(Theme.getThemedDrawableByKey(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); } @@ -3299,22 +3361,25 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { privacyCell.setBackgroundDrawable(Theme.getThemedDrawableByKey(mContext, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); int seconds = getSecondsForIndex(selectedSlowmode); if (info == null || seconds == 0) { - privacyCell.setText(LocaleController.getString("SlowmodeInfoOff", R.string.SlowmodeInfoOff)); + privacyCell.setText(getString("SlowmodeInfoOff", R.string.SlowmodeInfoOff)); } else { privacyCell.setText(LocaleController.formatString("SlowmodeInfoSelected", R.string.SlowmodeInfoSelected, formatSeconds(seconds))); } } else if (position == hideMembersInfoRow) { privacyCell.setBackgroundDrawable(Theme.getThemedDrawableByKey(mContext, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); - privacyCell.setText(LocaleController.getString("ChannelHideMembersInfo", R.string.ChannelHideMembersInfo)); + privacyCell.setText(getString("ChannelHideMembersInfo", R.string.ChannelHideMembersInfo)); } else if (position == gigaInfoRow) { - privacyCell.setText(LocaleController.getString("BroadcastGroupConvertInfo", R.string.BroadcastGroupConvertInfo)); + privacyCell.setText(getString("BroadcastGroupConvertInfo", R.string.BroadcastGroupConvertInfo)); } else if (position == dontRestrictBoostersInfoRow) { privacyCell.setBackground(Theme.getThemedDrawableByKey(mContext, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); if (isEnabledNotRestrictBoosters) { - privacyCell.setText(LocaleController.getString(R.string.GroupNotRestrictBoostersInfo2)); + privacyCell.setText(getString(R.string.GroupNotRestrictBoostersInfo2)); } else { - privacyCell.setText(LocaleController.getString(R.string.GroupNotRestrictBoostersInfo)); + privacyCell.setText(getString(R.string.GroupNotRestrictBoostersInfo)); } + } else if (position == signMessagesInfoRow) { + privacyCell.setBackground(Theme.getThemedDrawableByKey(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); + privacyCell.setText(getString(signatures ? R.string.ChannelSignProfilesInfo : R.string.ChannelSignInfo)); } break; case 2: @@ -3323,31 +3388,31 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (position == addNewRow) { if (type == TYPE_KICKED) { actionCell.setColors(Theme.key_windowBackgroundWhiteBlueIcon, Theme.key_windowBackgroundWhiteBlueButton); - actionCell.setText(LocaleController.getString("ChannelAddException", R.string.ChannelAddException), null, R.drawable.msg_contact_add, participantsStartRow != -1); + actionCell.setText(getString("ChannelAddException", R.string.ChannelAddException), null, R.drawable.msg_contact_add, participantsStartRow != -1); } else if (type == TYPE_BANNED) { - actionCell.setText(LocaleController.getString("ChannelBlockUser", R.string.ChannelBlockUser), null, R.drawable.msg_user_remove, false); + actionCell.setText(getString("ChannelBlockUser", R.string.ChannelBlockUser), null, R.drawable.msg_user_remove, false); } else if (type == TYPE_ADMIN) { actionCell.setColors(Theme.key_windowBackgroundWhiteBlueIcon, Theme.key_windowBackgroundWhiteBlueButton); boolean showDivider = !(loadingUsers && !firstLoaded); - actionCell.setText(LocaleController.getString("ChannelAddAdmin", R.string.ChannelAddAdmin), null, R.drawable.msg_admin_add, showDivider); + actionCell.setText(getString("ChannelAddAdmin", R.string.ChannelAddAdmin), null, R.drawable.msg_admin_add, showDivider); } else if (type == TYPE_USERS) { actionCell.setColors(Theme.key_windowBackgroundWhiteBlueIcon, Theme.key_windowBackgroundWhiteBlueButton); boolean showDivider = addNew2Row != -1 || (!(loadingUsers && !firstLoaded) && membersHeaderRow == -1 && !participants.isEmpty()); if (isChannel) { - actionCell.setText(LocaleController.getString("AddSubscriber", R.string.AddSubscriber), null, R.drawable.msg_contact_add, showDivider); + actionCell.setText(getString("AddSubscriber", R.string.AddSubscriber), null, R.drawable.msg_contact_add, showDivider); } else { - actionCell.setText(LocaleController.getString("AddMember", R.string.AddMember), null, R.drawable.msg_contact_add, showDivider); + actionCell.setText(getString("AddMember", R.string.AddMember), null, R.drawable.msg_contact_add, showDivider); } } } else if (position == recentActionsRow) { - actionCell.setText(LocaleController.getString("EventLog", R.string.EventLog), null, R.drawable.msg_log, antiSpamRow > recentActionsRow); + actionCell.setText(getString("EventLog", R.string.EventLog), null, R.drawable.msg_log, antiSpamRow > recentActionsRow); } else if (position == addNew2Row) { actionCell.setColors(Theme.key_windowBackgroundWhiteBlueIcon, Theme.key_windowBackgroundWhiteBlueButton); boolean showDivider = !(loadingUsers && !firstLoaded) && membersHeaderRow == -1 && !participants.isEmpty(); - actionCell.setText(LocaleController.getString("ChannelInviteViaLink", R.string.ChannelInviteViaLink), null, R.drawable.msg_link2, showDivider); + actionCell.setText(getString("ChannelInviteViaLink", R.string.ChannelInviteViaLink), null, R.drawable.msg_link2, showDivider); } else if (position == gigaConvertRow) { actionCell.setColors(Theme.key_windowBackgroundWhiteBlueIcon, Theme.key_windowBackgroundWhiteBlueButton); - actionCell.setText(LocaleController.getString("BroadcastGroupConvert", R.string.BroadcastGroupConvert), null, R.drawable.msg_channel, false); + actionCell.setText(getString("BroadcastGroupConvert", R.string.BroadcastGroupConvert), null, R.drawable.msg_channel, false); } break; case 3: @@ -3365,22 +3430,22 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (count != 0) { headerCell.setText(LocaleController.formatPluralString("RemovedUser", count)); } else { - headerCell.setText(LocaleController.getString("ChannelBlockedUsers", R.string.ChannelBlockedUsers)); + headerCell.setText(getString("ChannelBlockedUsers", R.string.ChannelBlockedUsers)); } } else { - headerCell.setText(LocaleController.getString("ChannelRestrictedUsers", R.string.ChannelRestrictedUsers)); + headerCell.setText(getString("ChannelRestrictedUsers", R.string.ChannelRestrictedUsers)); } } else if (position == permissionsSectionRow) { - headerCell.setText(LocaleController.getString("ChannelPermissionsHeader", R.string.ChannelPermissionsHeader)); + headerCell.setText(getString("ChannelPermissionsHeader", R.string.ChannelPermissionsHeader)); } else if (position == slowmodeRow) { - headerCell.setText(LocaleController.getString("Slowmode", R.string.Slowmode)); + headerCell.setText(getString("Slowmode", R.string.Slowmode)); } else if (position == gigaHeaderRow) { - headerCell.setText(LocaleController.getString("BroadcastGroup", R.string.BroadcastGroup)); + headerCell.setText(getString("BroadcastGroup", R.string.BroadcastGroup)); } break; case 6: TextSettingsCell settingsCell = (TextSettingsCell) holder.itemView; - settingsCell.setTextAndValue(LocaleController.getString("ChannelBlacklist", R.string.ChannelBlacklist), String.format("%d", info != null ? info.kicked_count : 0), false); + settingsCell.setTextAndValue(getString("ChannelBlacklist", R.string.ChannelBlacklist), String.format("%d", info != null ? info.kicked_count : 0), false); break; case VIEW_TYPE_EXPANDABLE_SWITCH: case 7: @@ -3390,20 +3455,20 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { boolean animated = checkCell.getTag() != null && (Integer) checkCell.getTag() == position; checkCell.setTag(position); if (position == changeInfoRow) { - checkCell.setTextAndCheck(LocaleController.getString("UserRestrictionsChangeInfo", R.string.UserRestrictionsChangeInfo), !defaultBannedRights.change_info && !ChatObject.isPublic(currentChat), manageTopicsRow != -1, animated); + checkCell.setTextAndCheck(getString("UserRestrictionsChangeInfo", R.string.UserRestrictionsChangeInfo), !defaultBannedRights.change_info && !ChatObject.isPublic(currentChat), manageTopicsRow != -1, animated); } else if (position == addUsersRow) { - checkCell.setTextAndCheck(LocaleController.getString("UserRestrictionsInviteUsers", R.string.UserRestrictionsInviteUsers), !defaultBannedRights.invite_users, true, animated); + checkCell.setTextAndCheck(getString("UserRestrictionsInviteUsers", R.string.UserRestrictionsInviteUsers), !defaultBannedRights.invite_users, true, animated); } else if (position == pinMessagesRow) { - checkCell.setTextAndCheck(LocaleController.getString("UserRestrictionsPinMessages", R.string.UserRestrictionsPinMessages), !defaultBannedRights.pin_messages && !ChatObject.isPublic(currentChat), true, animated); + checkCell.setTextAndCheck(getString("UserRestrictionsPinMessages", R.string.UserRestrictionsPinMessages), !defaultBannedRights.pin_messages && !ChatObject.isPublic(currentChat), true, animated); } else if (position == sendMessagesRow) { - checkCell.setTextAndCheck(LocaleController.getString("UserRestrictionsSendText", R.string.UserRestrictionsSendText), !defaultBannedRights.send_plain, true, animated); + checkCell.setTextAndCheck(getString("UserRestrictionsSendText", R.string.UserRestrictionsSendText), !defaultBannedRights.send_plain, true, animated); } else if(position == dontRestrictBoostersRow) { - checkCell.setTextAndCheck(LocaleController.getString(R.string.GroupNotRestrictBoosters), isEnabledNotRestrictBoosters, false, animated); + checkCell.setTextAndCheck(getString(R.string.GroupNotRestrictBoosters), isEnabledNotRestrictBoosters, false, animated); checkCell.getCheckBox().setDrawIconType(0); checkCell.getCheckBox().setColors(Theme.key_switchTrack, Theme.key_switchTrackChecked, Theme.key_windowBackgroundWhite, Theme.key_windowBackgroundWhite); } else if (position == sendMediaRow) { int sentMediaCount = getSendMediaSelectedCount(); - checkCell.setTextAndCheck(LocaleController.getString("UserRestrictionsSendMedia", R.string.UserRestrictionsSendMedia), sentMediaCount > 0, true, animated); + checkCell.setTextAndCheck(getString("UserRestrictionsSendMedia", R.string.UserRestrictionsSendMedia), sentMediaCount > 0, true, animated); checkCell.setCollapseArrow(String.format(Locale.US, "%d/9", sentMediaCount), !sendMediaExpanded, new Runnable() { @Override public void run() { @@ -3413,13 +3478,13 @@ public void run() { } }); } else if (position == sendStickersRow) { - checkCell.setTextAndCheck(LocaleController.getString("UserRestrictionsSendStickers", R.string.UserRestrictionsSendStickers), !defaultBannedRights.send_stickers, true, animated); + checkCell.setTextAndCheck(getString("UserRestrictionsSendStickers", R.string.UserRestrictionsSendStickers), !defaultBannedRights.send_stickers, true, animated); } else if (position == embedLinksRow) { - checkCell.setTextAndCheck(LocaleController.getString("UserRestrictionsEmbedLinks", R.string.UserRestrictionsEmbedLinks), !defaultBannedRights.embed_links, true, animated); + checkCell.setTextAndCheck(getString("UserRestrictionsEmbedLinks", R.string.UserRestrictionsEmbedLinks), !defaultBannedRights.embed_links, true, animated); } else if (position == sendPollsRow) { - checkCell.setTextAndCheck(LocaleController.getString("UserRestrictionsSendPollsShort", R.string.UserRestrictionsSendPollsShort), !defaultBannedRights.send_polls, true); + checkCell.setTextAndCheck(getString("UserRestrictionsSendPollsShort", R.string.UserRestrictionsSendPollsShort), !defaultBannedRights.send_polls, true); } else if (position == manageTopicsRow) { - checkCell.setTextAndCheck(LocaleController.getString("CreateTopicsPermission", R.string.CreateTopicsPermission), !defaultBannedRights.manage_topics, false, animated); + checkCell.setTextAndCheck(getString("CreateTopicsPermission", R.string.CreateTopicsPermission), !defaultBannedRights.manage_topics, false, animated); } if (ChatObject.canBlockUsers(currentChat)) { if (position == addUsersRow && !ChatObject.canUserDoAdminAction(currentChat, ChatObject.ACTION_INVITE) || @@ -3439,17 +3504,17 @@ public void run() { GraySectionCell sectionCell = (GraySectionCell) holder.itemView; if (position == membersHeaderRow) { if (ChatObject.isChannel(currentChat) && !currentChat.megagroup) { - sectionCell.setText(LocaleController.getString("ChannelOtherSubscribers", R.string.ChannelOtherSubscribers)); + sectionCell.setText(getString("ChannelOtherSubscribers", R.string.ChannelOtherSubscribers)); } else { - sectionCell.setText(LocaleController.getString("ChannelOtherMembers", R.string.ChannelOtherMembers)); + sectionCell.setText(getString("ChannelOtherMembers", R.string.ChannelOtherMembers)); } } else if (position == botHeaderRow) { - sectionCell.setText(LocaleController.getString("ChannelBots", R.string.ChannelBots)); + sectionCell.setText(getString("ChannelBots", R.string.ChannelBots)); } else if (position == contactsHeaderRow) { if (ChatObject.isChannel(currentChat) && !currentChat.megagroup) { - sectionCell.setText(LocaleController.getString("ChannelContacts", R.string.ChannelContacts)); + sectionCell.setText(getString("ChannelContacts", R.string.ChannelContacts)); } else { - sectionCell.setText(LocaleController.getString("GroupContacts", R.string.GroupContacts)); + sectionCell.setText(getString("GroupContacts", R.string.GroupContacts)); } } else if (position == loadingHeaderRow) { sectionCell.setText(""); @@ -3467,10 +3532,10 @@ public void run() { TextCell textCell = (TextCell) holder.itemView; if (position == antiSpamRow) { textCell.getCheckBox().setIcon(ChatObject.canUserDoAdminAction(currentChat, ChatObject.ACTION_DELETE_MESSAGES) && (info == null || info.antispam || getParticipantsCount() >= getMessagesController().telegramAntispamGroupSizeMin) ? 0 : R.drawable.permission_locked); - textCell.setTextAndCheckAndIcon(LocaleController.getString("ChannelAntiSpam", R.string.ChannelAntiSpam), info != null && info.antispam, R.drawable.msg_policy, false); + textCell.setTextAndCheckAndIcon(getString("ChannelAntiSpam", R.string.ChannelAntiSpam), info != null && info.antispam, R.drawable.msg_policy, false); } else if (position == hideMembersRow) { textCell.getCheckBox().setIcon(ChatObject.canUserDoAdminAction(currentChat, ChatObject.ACTION_BLOCK_USERS) && (info == null || info.participants_hidden || getParticipantsCount() >= getMessagesController().hiddenMembersGroupSizeMin) ? 0 : R.drawable.permission_locked); - textCell.setTextAndCheck(LocaleController.getString("ChannelHideMembers", R.string.ChannelHideMembers), info != null && info.participants_hidden, false); + textCell.setTextAndCheck(getString("ChannelHideMembers", R.string.ChannelHideMembers), info != null && info.participants_hidden, false); } break; case VIEW_TYPE_INNER_CHECK: @@ -3478,27 +3543,36 @@ public void run() { animated = checkBoxCell.getTag() != null && (Integer) checkBoxCell.getTag() == position; checkBoxCell.setTag(position); if (position == sendMediaPhotosRow) { - checkBoxCell.setText(LocaleController.getString("SendMediaPermissionPhotos", R.string.SendMediaPermissionPhotos), "", !defaultBannedRights.send_photos, true, animated); + checkBoxCell.setText(getString("SendMediaPermissionPhotos", R.string.SendMediaPermissionPhotos), "", !defaultBannedRights.send_photos, true, animated); } else if (position == sendMediaVideosRow) { - checkBoxCell.setText(LocaleController.getString("SendMediaPermissionVideos", R.string.SendMediaPermissionVideos), "", !defaultBannedRights.send_videos, true, animated); + checkBoxCell.setText(getString("SendMediaPermissionVideos", R.string.SendMediaPermissionVideos), "", !defaultBannedRights.send_videos, true, animated); } else if (position == sendMediaStickerGifsRow) { - checkBoxCell.setText(LocaleController.getString("SendMediaPermissionStickersGifs", R.string.SendMediaPermissionStickersGifs), "", !defaultBannedRights.send_stickers, true, animated); + checkBoxCell.setText(getString("SendMediaPermissionStickersGifs", R.string.SendMediaPermissionStickersGifs), "", !defaultBannedRights.send_stickers, true, animated); } else if (position == sendMediaMusicRow) { - checkBoxCell.setText(LocaleController.getString("SendMediaPermissionMusic", R.string.SendMediaPermissionMusic), "", !defaultBannedRights.send_audios, true, animated); + checkBoxCell.setText(getString("SendMediaPermissionMusic", R.string.SendMediaPermissionMusic), "", !defaultBannedRights.send_audios, true, animated); } else if (position == sendMediaFilesRow) { - checkBoxCell.setText(LocaleController.getString("SendMediaPermissionFiles", R.string.SendMediaPermissionFiles), "", !defaultBannedRights.send_docs, true, animated); + checkBoxCell.setText(getString("SendMediaPermissionFiles", R.string.SendMediaPermissionFiles), "", !defaultBannedRights.send_docs, true, animated); } else if (position == sendMediaVoiceMessagesRow) { - checkBoxCell.setText(LocaleController.getString("SendMediaPermissionVoice", R.string.SendMediaPermissionVoice), "", !defaultBannedRights.send_voices, true, animated); + checkBoxCell.setText(getString("SendMediaPermissionVoice", R.string.SendMediaPermissionVoice), "", !defaultBannedRights.send_voices, true, animated); } else if (position == sendMediaVideoMessagesRow) { - checkBoxCell.setText(LocaleController.getString("SendMediaPermissionRound", R.string.SendMediaPermissionRound), "", !defaultBannedRights.send_roundvideos, true, animated); + checkBoxCell.setText(getString("SendMediaPermissionRound", R.string.SendMediaPermissionRound), "", !defaultBannedRights.send_roundvideos, true, animated); } else if (position == sendMediaEmbededLinksRow) { - checkBoxCell.setText(LocaleController.getString("SendMediaEmbededLinks", R.string.SendMediaEmbededLinks), "", !defaultBannedRights.embed_links && !defaultBannedRights.send_plain, false, animated); - }else if (position == sendPollsRow) { - checkBoxCell.setText(LocaleController.getString("SendMediaPolls", R.string.SendMediaPolls), "", !defaultBannedRights.send_polls, false, animated); - } + checkBoxCell.setText(getString("SendMediaEmbededLinks", R.string.SendMediaEmbededLinks), "", !defaultBannedRights.embed_links && !defaultBannedRights.send_plain, false, animated); + } else if (position == sendPollsRow) { + checkBoxCell.setText(getString("SendMediaPolls", R.string.SendMediaPolls), "", !defaultBannedRights.send_polls, false, animated); + } else // checkBoxCell.setText(getCheckBoxTitle(item.headerName, percents[item.index < 0 ? 8 : item.index], item.index < 0), AndroidUtilities.formatFileSize(item.size), selected, item.index < 0 ? !collapsed : !item.last); checkBoxCell.setPad(1); break; + case VIEW_TYPE_CHECK: + TextCheckCell checkCell2 = (TextCheckCell) holder.itemView; + if (position == signMessagesRow) { + checkCell2.setTextAndCheck(getString(R.string.ChannelSignMessages), signatures, signatures); + } else if (position == signMessagesProfilesRow) { + checkCell2.setTextAndCheck(getString(R.string.ChannelSignMessagesWithProfile), profiles, false); + } + break; + } } @@ -3521,7 +3595,7 @@ public int getItemViewType(int position) { return 3; } else if (position == restricted1SectionRow || position == permissionsSectionRow || position == slowmodeRow || position == gigaHeaderRow) { return 5; - } else if (position == participantsInfoRow || position == slowmodeInfoRow || position == dontRestrictBoostersInfoRow || position == gigaInfoRow || position == antiSpamInfoRow || position == hideMembersInfoRow) { + } else if (position == participantsInfoRow || position == slowmodeInfoRow || position == dontRestrictBoostersInfoRow || position == gigaInfoRow || position == antiSpamInfoRow || position == hideMembersInfoRow || position == signMessagesInfoRow) { return 1; } else if (position == blockedEmptyRow) { return 4; @@ -3546,6 +3620,8 @@ public int getItemViewType(int position) { return VIEW_TYPE_EXPANDABLE_SWITCH; } else if (position == dontRestrictBoostersSliderRow) { return VIEW_TYPE_NOT_RESTRICT_BOOSTERS_SLIDER; + } else if (position == signMessagesRow || position == signMessagesProfilesRow) { + return VIEW_TYPE_CHECK; } return 0; } @@ -3725,6 +3801,9 @@ public void fillPositions(SparseIntArray sparseIntArray) { put(++pointer, loadingProgressRow, sparseIntArray); put(++pointer, loadingUserCellRow, sparseIntArray); put(++pointer, loadingHeaderRow, sparseIntArray); + put(++pointer, signMessagesRow, sparseIntArray); + put(++pointer, signMessagesProfilesRow, sparseIntArray); + put(++pointer, signMessagesInfoRow, sparseIntArray); } private void put(int id, int position, SparseIntArray sparseIntArray) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/AlertsCreator.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/AlertsCreator.java index e4cf205c0da..ea22d3e2c0e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/AlertsCreator.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/AlertsCreator.java @@ -1200,13 +1200,13 @@ public static void showOpenUrlAlert(BaseFragment fragment, String url, boolean p } long inlineReturn = (fragment instanceof ChatActivity) ? ((ChatActivity) fragment).getInlineReturn() : 0; if (Browser.isInternalUrl(url, null) || !ask) { - Browser.openUrl(fragment.getParentActivity(), Uri.parse(url), inlineReturn == 0, tryTelegraph, forceNotInternalForApps && checkInternalBotApp(url), progress, null); + Browser.openUrl(fragment.getParentActivity(), Uri.parse(url), inlineReturn == 0, tryTelegraph, forceNotInternalForApps && checkInternalBotApp(url), progress, null, false); } else { String urlFinal; if (punycode) { try { Uri uri = Uri.parse(url); - urlFinal = Browser.replaceHostname(uri, IDN.toUnicode(uri.getHost(), IDN.ALLOW_UNASSIGNED)); + urlFinal = Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null); } catch (Exception e) { FileLog.e(e, false); urlFinal = url; @@ -1444,7 +1444,7 @@ public static void createBotLaunchAlert(BaseFragment fragment, TLRPC.User user, Context context = fragment.getContext(); AlertDialog.Builder builder = new AlertDialog.Builder(context); - TextView messageTextView = new TextView(context) { + LinkSpanDrawable.LinksTextView messageTextView = new LinkSpanDrawable.LinksTextView(context) { @Override public void setText(CharSequence text, BufferType type) { text = Emoji.replaceEmoji(text, getPaint().getFontMetricsInt(), false); @@ -1453,9 +1453,9 @@ public void setText(CharSequence text, BufferType type) { }; NotificationCenter.listenEmojiLoading(messageTextView); messageTextView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack)); + messageTextView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn)); messageTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); messageTextView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP); - messageTextView.setText(LocaleController.getString(R.string.BotWebViewStartPermission)); FrameLayout frameLayout = new FrameLayout(context); builder.setCustomViewOffset(6); @@ -1499,11 +1499,19 @@ public void setText(CharSequence text, BufferType type) { } }); builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); - fragment.showDialog(builder.create(), false, dialog -> { + AlertDialog dialog = builder.create(); + fragment.showDialog(dialog, false, d -> { if (onDismiss != null) { onDismiss.run(); } }); + + messageTextView.setText(AndroidUtilities.replaceSingleTag(getString(R.string.BotWebViewStartPermission), () -> { + if (dialog != null) { + dialog.dismiss(); + } + Browser.openUrl(context, getString(R.string.BotWebViewStartPermissionLink)); + })); } public static void createBotLaunchAlert(BaseFragment fragment, AtomicBoolean allowWrite, TLRPC.User user, Runnable loadBotSheet) { @@ -1514,7 +1522,7 @@ public static void createBotLaunchAlert(BaseFragment fragment, AtomicBoolean all CheckBoxCell[] cell = new CheckBoxCell[1]; AlertDialog.Builder builder = new AlertDialog.Builder(context); - TextView messageTextView = new TextView(context) { + LinkSpanDrawable.LinksTextView messageTextView = new LinkSpanDrawable.LinksTextView(context) { @Override public void setText(CharSequence text, BufferType type) { text = Emoji.replaceEmoji(text, getPaint().getFontMetricsInt(), false); @@ -1523,9 +1531,9 @@ public void setText(CharSequence text, BufferType type) { }; NotificationCenter.listenEmojiLoading(messageTextView); messageTextView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack)); + messageTextView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn)); messageTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); messageTextView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP); - messageTextView.setText(LocaleController.getString(R.string.BotWebViewStartPermission)); FrameLayout frameLayout = new FrameLayout(context) { @Override @@ -1616,7 +1624,15 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { builder.setPositiveButton(LocaleController.getString(R.string.Start), (dialogInterface, i) -> loadBotSheet.run()); builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); - fragment.showDialog(builder.create()); + AlertDialog dialog = builder.create(); + fragment.showDialog(dialog); + + messageTextView.setText(AndroidUtilities.replaceSingleTag(getString(R.string.BotWebViewStartPermission), () -> { + if (dialog != null) { + dialog.dismiss(); + } + Browser.openUrl(context, getString(R.string.BotWebViewStartPermissionLink)); + })); } public static void createClearOrDeleteDialogAlert(BaseFragment fragment, boolean clear, TLRPC.Chat chat, TLRPC.User user, boolean secret, boolean canDeleteHistory, MessagesStorage.BooleanCallback onProcessRunnable) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedEmojiSpan.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedEmojiSpan.java index 31b8607ba82..4ecc1db014f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedEmojiSpan.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedEmojiSpan.java @@ -47,7 +47,7 @@ public class AnimatedEmojiSpan extends ReplacementSpan { public TLRPC.Document document; public String emoji; private float scale; - private float extraScale = 1f; + public float extraScale = 1f; public boolean standard; public boolean full = false; public boolean top = false; @@ -79,7 +79,6 @@ public class AnimatedEmojiSpan extends ReplacementSpan { public void setAdded() { isAdded = true; extraScale = 0f; - lockPositionChanging = true; } public void setAnimateChanges() { @@ -94,8 +93,13 @@ public void setRemoved(Runnable action) { public float getExtraScale() { if (isAdded) { + lockPositionChanging = true; isAdded = false; extraScale = 0f; + if (scaleAnimator != null) { + scaleAnimator.removeAllListeners(); + scaleAnimator.cancel(); + } scaleAnimator = ValueAnimator.ofFloat(extraScale, 1f); scaleAnimator.addUpdateListener(animator -> { extraScale = (float) animator.getAnimatedValue(); @@ -106,6 +110,7 @@ public float getExtraScale() { @Override public void onAnimationEnd(Animator animation) { scaleAnimator = null; + lockPositionChanging = false; } }); scaleAnimator.setDuration(130); @@ -521,7 +526,7 @@ public static EmojiGroupedSpans update(int cacheType, View view, boolean invalid if (clone && textLayout.getText() instanceof Spannable) { int start = spanned.getSpanStart(span), end = spanned.getSpanEnd(span); ((Spannable) spanned).removeSpan(span); - ((Spannable) spanned).setSpan(span = cloneSpan(span), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ((Spannable) spanned).setSpan(span = cloneSpan(span, null), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } AnimatedEmojiHolder holder = null; if (prev == null) { @@ -972,12 +977,15 @@ public void draw(Canvas canvas, List<SpoilerEffect> spoilers, long time, float b } } - public static AnimatedEmojiSpan cloneSpan(AnimatedEmojiSpan span) { + public static AnimatedEmojiSpan cloneSpan(AnimatedEmojiSpan span, Paint.FontMetricsInt fontMetricsInt) { AnimatedEmojiSpan animatedEmojiSpan; if (span.document != null) { - animatedEmojiSpan = new AnimatedEmojiSpan(span.document, span.fontMetrics); + animatedEmojiSpan = new AnimatedEmojiSpan(span.document, fontMetricsInt != null ? fontMetricsInt : span.fontMetrics); } else { - animatedEmojiSpan = new AnimatedEmojiSpan(span.documentId, span.scale, span.fontMetrics); + animatedEmojiSpan = new AnimatedEmojiSpan(span.documentId, span.scale, fontMetricsInt != null ? fontMetricsInt : span.fontMetrics); + } + if (fontMetricsInt != null) { + animatedEmojiSpan.size = span.size; } animatedEmojiSpan.fromEmojiKeyboard = span.fromEmojiKeyboard; animatedEmojiSpan.isAdded = span.isAdded; @@ -986,10 +994,14 @@ public static AnimatedEmojiSpan cloneSpan(AnimatedEmojiSpan span) { } public static CharSequence cloneSpans(CharSequence text) { - return cloneSpans(text, -1); + return cloneSpans(text, -1, null); } public static CharSequence cloneSpans(CharSequence text, int newCacheType) { + return cloneSpans(text, newCacheType, null); + } + + public static CharSequence cloneSpans(CharSequence text, int newCacheType, Paint.FontMetricsInt fontMetricsInt) { if (!(text instanceof Spanned)) { return text; } @@ -1014,7 +1026,7 @@ public static CharSequence cloneSpans(CharSequence text, int newCacheType) { AnimatedEmojiSpan oldSpan = (AnimatedEmojiSpan) spans[i]; newText.removeSpan(oldSpan); - AnimatedEmojiSpan newSpan = cloneSpan(oldSpan); + AnimatedEmojiSpan newSpan = cloneSpan(oldSpan, fontMetricsInt); if (newCacheType != -1) { newSpan.cacheType = newCacheType; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedFileDrawable.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedFileDrawable.java index 7a7784c8b6a..a81116148ad 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedFileDrawable.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedFileDrawable.java @@ -663,6 +663,29 @@ public void seekTo(long ms, boolean removeLoading, boolean force) { } } +// public void seekToSync(long ms) { +// if (nativePtr != 0) { +// if (renderingBitmap == null) { +// if (!unusedBitmaps.isEmpty()) { +// renderingBitmap = unusedBitmaps.remove(0); +// } else { +// renderingBitmap = Bitmap.createBitmap((int) (metaData[0] * scaleFactor), (int) (metaData[1] * scaleFactor), Bitmap.Config.ARGB_8888); +// } +// } +// if (decodeQueue == null) { +// decodeQueue = new DispatchQueue("decodeQueue" + this); +// } +// decodeQueue.postRunnable(() -> { +// prepareToSeek(nativePtr); +// seekToMs(nativePtr, ms, false); +// getVideoFrame(nativePtr, renderingBitmap, metaData, renderingBitmap.getRowBytes(), false, startTime, endTime, true); +// AndroidUtilities.runOnUIThread(() -> { +// invalidateInternal(); +// }); +// }); +// } +// } + public void recycle() { if (!secondParentViews.isEmpty()) { recycleWithSecond = true; @@ -1184,14 +1207,14 @@ public Bitmap getFirstFrame(Bitmap bitmap) { bitmap = Bitmap.createBitmap(renderingWidth, renderingHeight, Bitmap.Config.ARGB_8888); } Canvas canvas = new Canvas(bitmap); - if (generatingCacheBitmap == null) { - generatingCacheBitmap = Bitmap.createBitmap(metaData[0], metaData[1], Bitmap.Config.ARGB_8888); - } long nativePtr = createDecoder(path.getAbsolutePath(), metaData, currentAccount, streamFileSize, stream, false); if (nativePtr == 0) { return bitmap; } + if (generatingCacheBitmap == null) { + generatingCacheBitmap = Bitmap.createBitmap(Math.max(1, metaData[0]), Math.max(1, metaData[1]), Bitmap.Config.ARGB_8888); + } getVideoFrame(nativePtr, generatingCacheBitmap, metaData, generatingCacheBitmap.getRowBytes(), false, startTime, endTime, true); destroyDecoder(nativePtr); bitmap.eraseColor(Color.TRANSPARENT); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedTextView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedTextView.java index 0fed232e629..90e98008233 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedTextView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/AnimatedTextView.java @@ -18,6 +18,7 @@ import android.graphics.PorterDuffColorFilter; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; +import android.graphics.RectF; import android.graphics.Shader; import android.graphics.Typeface; import android.graphics.drawable.Drawable; @@ -1055,12 +1056,21 @@ public void setBounds(@NonNull Rect bounds) { this.bounds.set(bounds); } + public void setBounds(@NonNull RectF bounds) { + setBounds((int) bounds.left, (int) bounds.top, (int) bounds.right, (int) bounds.bottom); + } + @Override public void setBounds(int left, int top, int right, int bottom) { super.setBounds(left, top, right, bottom); this.bounds.set(left, top, right, bottom); } + public void setBounds(float left, float top, float right, float bottom) { + super.setBounds((int) left, (int) top, (int) right, (int) bottom); + this.bounds.set((int) left, (int) top, (int) right, (int) bottom); + } + @NonNull @Override public Rect getDirtyBounds() { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/AvatarDrawable.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/AvatarDrawable.java index 77d76cb50a5..c3bb22850bc 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/AvatarDrawable.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/AvatarDrawable.java @@ -414,35 +414,7 @@ public void setInfo(long id, String firstName, String lastName, String custom, I color2 = profileColor.getAvatarColor2(); } } else if (customColor != null) { - if (customColor >= 14) { - MessagesController messagesController = MessagesController.getInstance(UserConfig.selectedAccount); - if (messagesController != null && messagesController.peerColors != null && messagesController.peerColors.getColor(customColor) != null) { - final int peerColor = messagesController.peerColors.getColor(customColor).getColor1(); - if (advancedGradient) { - int[] gradient = advancedGradients[getPeerColorIndex(peerColor)]; - this.advancedGradient.setColors(gradient[0], gradient[1], gradient[2], gradient[3]); - } else { - color = getThemedColor(Theme.keys_avatar_background[getPeerColorIndex(peerColor)]); - color2 = getThemedColor(Theme.keys_avatar_background2[getPeerColorIndex(peerColor)]); - } - } else { - if (advancedGradient) { - int[] gradient = advancedGradients[getColorIndex(customColor)]; - this.advancedGradient.setColors(gradient[0], gradient[1], gradient[2], gradient[3]); - } else { - color = getThemedColor(Theme.keys_avatar_background[getColorIndex(customColor)]); - color2 = getThemedColor(Theme.keys_avatar_background2[getColorIndex(customColor)]); - } - } - } else { - if (advancedGradient) { - int[] gradient = advancedGradients[getColorIndex(customColor)]; - this.advancedGradient.setColors(gradient[0], gradient[1], gradient[2], gradient[3]); - } else { - color = getThemedColor(Theme.keys_avatar_background[getColorIndex(customColor)]); - color2 = getThemedColor(Theme.keys_avatar_background2[getColorIndex(customColor)]); - } - } + setPeerColor(customColor); } else { if (advancedGradient) { int[] gradient = advancedGradients[getColorIndex(id)]; @@ -466,6 +438,52 @@ public void setInfo(long id, String firstName, String lastName, String custom, I getAvatarSymbols(firstName, lastName, custom, stringBuilder); } + public void setPeerColor(int id) { + if (advancedGradient != null) { + hasGradient = false; + hasAdvancedGradient = true; + } else { + hasGradient = true; + hasAdvancedGradient = false; + } + if (id >= 14) { + MessagesController messagesController = MessagesController.getInstance(UserConfig.selectedAccount); + if (messagesController != null && messagesController.peerColors != null && messagesController.peerColors.getColor(id) != null) { + final int peerColor = messagesController.peerColors.getColor(id).getColor1(); + if (advancedGradient != null) { + int[] gradient = advancedGradients[getPeerColorIndex(peerColor)]; + this.advancedGradient.setColors(gradient[0], gradient[1], gradient[2], gradient[3]); + } else { + color = getThemedColor(Theme.keys_avatar_background[getPeerColorIndex(peerColor)]); + color2 = getThemedColor(Theme.keys_avatar_background2[getPeerColorIndex(peerColor)]); + } + } else { + if (advancedGradient != null) { + int[] gradient = advancedGradients[getColorIndex(id)]; + this.advancedGradient.setColors(gradient[0], gradient[1], gradient[2], gradient[3]); + } else { + color = getThemedColor(Theme.keys_avatar_background[getColorIndex(id)]); + color2 = getThemedColor(Theme.keys_avatar_background2[getColorIndex(id)]); + } + } + } else { + if (advancedGradient != null) { + int[] gradient = advancedGradients[getColorIndex(id)]; + this.advancedGradient.setColors(gradient[0], gradient[1], gradient[2], gradient[3]); + } else { + color = getThemedColor(Theme.keys_avatar_background[getColorIndex(id)]); + color2 = getThemedColor(Theme.keys_avatar_background2[getColorIndex(id)]); + } + } + } + + public void setText(String text) { + invalidateTextLayout = true; + avatarType = AVATAR_TYPE_NORMAL; + drawDeleted = false; + getAvatarSymbols(text, null, null, stringBuilder); + } + public static void getAvatarSymbols(String firstName, String lastName, String custom, StringBuilder result) { result.setLength(0); if (custom != null) { @@ -520,6 +538,7 @@ public void draw(Canvas canvas) { gradient = new LinearGradient(0, 0, 0, gradientBottom = bounds.height(), gradientColor1 = color, gradientColor2 = color2, Shader.TileMode.CLAMP); } backgroundPaint.setShader(gradient); + backgroundPaint.setAlpha(alpha); } else { backgroundPaint.setShader(null); backgroundPaint.setColor(ColorUtils.setAlphaComponent(getColor(), alpha)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/BottomSheetWithRecyclerListView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/BottomSheetWithRecyclerListView.java index 802220a5dec..cf7abda2851 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/BottomSheetWithRecyclerListView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/BottomSheetWithRecyclerListView.java @@ -27,6 +27,7 @@ import org.telegram.ui.ActionBar.BottomSheet; import org.telegram.ui.ActionBar.SimpleTextView; import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.LaunchActivity; public abstract class BottomSheetWithRecyclerListView extends BottomSheet { @@ -52,6 +53,7 @@ public enum ActionBarType { private float shadowAlpha = 1f; private boolean showHandle = false; + protected boolean handleOffset; private RectF handleRect = new RectF(); private ActionBarType actionBarType = ActionBarType.FADING; @@ -417,6 +419,9 @@ private void preDrawInternal(Canvas canvas, View parent) { } } top = top - headerHeight - headerPaddingTop - headerPaddingBottom; + if (showHandle && handleOffset) { + top -= dp(actionBarType == ActionBarType.SLIDING ? 8 : 16); + } float handleAlpha = 1.0f; float progressToFullView = 0.0f; @@ -488,6 +493,16 @@ protected void onPreDraw(Canvas canvas, int top, float progressToFullView) { } + @Override + public boolean isAttachedLightStatusBar() { + if (actionBar != null && actionBar.getTag() != null) { + return isLightStatusBar(); + } else if (baseFragment != null) { + return baseFragment.isLightStatusBar(); + } + return isLightStatusBar(); + } + private boolean isLightStatusBar() { return ColorUtils.calculateLuminance(Theme.getColor(Theme.key_dialogBackground, resourcesProvider)) > 0.7f; } @@ -518,7 +533,9 @@ public BaseFragment getBaseFragment() { } private void updateStatusBar() { - if (actionBar != null && actionBar.getTag() != null) { + if (attachedFragment != null) { + LaunchActivity.instance.checkSystemBarColors(true, true, true, false); + } else if (actionBar != null && actionBar.getTag() != null) { AndroidUtilities.setLightStatusBar(getWindow(), isLightStatusBar()); } else if (baseFragment != null) { AndroidUtilities.setLightStatusBar(getWindow(), baseFragment.isLightStatusBar()); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Bulletin.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Bulletin.java index 54fe2d4734a..f83e1534670 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Bulletin.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Bulletin.java @@ -1,5 +1,6 @@ package org.telegram.ui.Components; +import static org.telegram.messenger.AndroidUtilities.dp; import static java.lang.annotation.RetentionPolicy.SOURCE; import android.animation.Animator; @@ -337,7 +338,9 @@ public void setCanHide(boolean canHide) { if (this.canHide != canHide && layout != null) { this.canHide = canHide; if (canHide) { - layout.postDelayed(hideRunnable, duration); + if (duration >= 0) { + layout.postDelayed(hideRunnable, duration); + } } else { layout.removeCallbacks(hideRunnable); } @@ -684,10 +687,10 @@ public boolean isTransitionRunning() { public Layout(@NonNull Context context, Theme.ResourcesProvider resourcesProvider) { super(context); this.resourcesProvider = resourcesProvider; - setMinimumHeight(AndroidUtilities.dp(48)); + setMinimumHeight(dp(48)); setBackground(getThemedColor(Theme.key_undo_background)); updateSize(); - setPadding(AndroidUtilities.dp(8), AndroidUtilities.dp(8), AndroidUtilities.dp(8), AndroidUtilities.dp(8)); + setPadding(dp(8), dp(8), dp(8), dp(8)); setWillNotDraw(false); ScaleStateListAnimator.apply(this, .02f, 1.5f); } @@ -702,7 +705,7 @@ protected void setBackground(int color) { } public void setBackground(int color, int rounding) { - background = Theme.createRoundRectDrawable(AndroidUtilities.dp(rounding), color); + background = Theme.createRoundRectDrawable(dp(rounding), color); } public final static FloatPropertyCompat<Layout> IN_OUT_OFFSET_Y = new FloatPropertyCompat<Layout>("offsetY") { @@ -1072,19 +1075,19 @@ protected void dispatchDraw(Canvas canvas) { if (clipPaint == null) { clipPaint = new Paint(Paint.ANTI_ALIAS_FLAG); clipPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); - clipGradient = new LinearGradient(0, 0, 0, AndroidUtilities.dp(8), this.top ? new int[]{0xff000000, 0} : new int[]{0, 0xff000000}, new float[]{0, 1}, Shader.TileMode.CLAMP); + clipGradient = new LinearGradient(0, 0, 0, dp(8), this.top ? new int[]{0xff000000, 0} : new int[]{0, 0xff000000}, new float[]{0, 1}, Shader.TileMode.CLAMP); clipMatrix = new Matrix(); clipGradient.setLocalMatrix(clipMatrix); clipPaint.setShader(clipGradient); } canvas.save(); clipMatrix.reset(); - clipMatrix.postTranslate(0, this.top ? top : bottom - AndroidUtilities.dp(8)); + clipMatrix.postTranslate(0, this.top ? top : bottom - dp(8)); clipGradient.setLocalMatrix(clipMatrix); if (this.top) { - canvas.drawRect(0, top, getWidth(), top + AndroidUtilities.dp(8), clipPaint); + canvas.drawRect(0, top, getWidth(), top + dp(8), clipPaint); } else { - canvas.drawRect(0, bottom - AndroidUtilities.dp(8), getWidth(), bottom, clipPaint); + canvas.drawRect(0, bottom - dp(8), getWidth(), bottom, clipPaint); } canvas.restore(); canvas.restore(); @@ -1138,7 +1141,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { @Override protected void measureChildWithMargins(View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed) { if (button != null && child != button) { - widthUsed += button.getMeasuredWidth() - AndroidUtilities.dp(12); + widthUsed += button.getMeasuredWidth() - dp(12); } super.measureChildWithMargins(child, parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed); if (child != button) { @@ -1209,7 +1212,7 @@ public MultiLineLayout(@NonNull Context context, Theme.ResourcesProvider resourc addView(imageView, LayoutHelper.createFrameRelatively(30, 30, Gravity.START | Gravity.CENTER_VERTICAL, 12, 8, 12, 8)); textView.setGravity(Gravity.START); - textView.setPadding(0, AndroidUtilities.dp(8), 0, AndroidUtilities.dp(8)); + textView.setPadding(0, dp(8), 0, dp(8)); textView.setTextColor(getThemedColor(Theme.key_undo_infoColor)); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15); textView.setTypeface(Typeface.SANS_SERIF); @@ -1263,7 +1266,7 @@ public CharSequence getAccessibilityText() { public void hideImage() { imageView.setVisibility(GONE); - ((MarginLayoutParams) linearLayout.getLayoutParams()).setMarginStart(AndroidUtilities.dp(12)); + ((MarginLayoutParams) linearLayout.getLayoutParams()).setMarginStart(dp(12)); } } @@ -1293,7 +1296,7 @@ public TwoLineLottieLayout(@NonNull Context context, Theme.ResourcesProvider res addView(linearLayout, LayoutHelper.createFrameRelatively(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL, 52, 8, 8, 8)); titleTextView = new LinkSpanDrawable.LinksTextView(context); - titleTextView.setPadding(AndroidUtilities.dp(4), 0, AndroidUtilities.dp(4), 0); + titleTextView.setPadding(dp(4), 0, dp(4), 0); titleTextView.setSingleLine(); titleTextView.setTextColor(undoInfoColor); titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); @@ -1301,7 +1304,7 @@ public TwoLineLottieLayout(@NonNull Context context, Theme.ResourcesProvider res linearLayout.addView(titleTextView); subtitleTextView = new LinkSpanDrawable.LinksTextView(context); - subtitleTextView.setPadding(AndroidUtilities.dp(4), 0, AndroidUtilities.dp(4), 0); + subtitleTextView.setPadding(dp(4), 0, dp(4), 0); subtitleTextView.setTextColor(undoInfoColor); subtitleTextView.setLinkTextColor(undoLinkColor); subtitleTextView.setTypeface(Typeface.SANS_SERIF); @@ -1332,7 +1335,79 @@ public CharSequence getAccessibilityText() { public void hideImage() { imageView.setVisibility(GONE); - ((MarginLayoutParams) linearLayout.getLayoutParams()).setMarginStart(AndroidUtilities.dp(10)); + ((MarginLayoutParams) linearLayout.getLayoutParams()).setMarginStart(dp(10)); + } + } + + public static class TwoLineAnimatedLottieLayout extends ButtonLayout { + + public final RLottieImageView imageView; + public final LinkSpanDrawable.LinksTextView titleTextView; + public final AnimatedTextView subtitleTextView; + private final LinearLayout linearLayout; + + private final int textColor; + + public TwoLineAnimatedLottieLayout(@NonNull Context context, Theme.ResourcesProvider resourcesProvider) { + super(context, resourcesProvider); + this.textColor = getThemedColor(Theme.key_undo_infoColor); + setBackground(getThemedColor(Theme.key_undo_background)); + + imageView = new RLottieImageView(context); + imageView.setScaleType(ImageView.ScaleType.CENTER); + addView(imageView, LayoutHelper.createFrameRelatively(56, 48, Gravity.START | Gravity.CENTER_VERTICAL)); + + final int undoInfoColor = getThemedColor(Theme.key_undo_infoColor); + final int undoLinkColor = getThemedColor(Theme.key_undo_cancelColor); + + linearLayout = new LinearLayout(context); + linearLayout.setOrientation(LinearLayout.VERTICAL); + addView(linearLayout, LayoutHelper.createFrameRelatively(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL, 52, 8, 8, 8)); + + titleTextView = new LinkSpanDrawable.LinksTextView(context); + titleTextView.setPadding(dp(4), 0, dp(4), 0); + titleTextView.setSingleLine(); + titleTextView.setTextColor(undoInfoColor); + titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + titleTextView.setTypeface(AndroidUtilities.bold()); + linearLayout.addView(titleTextView); + + subtitleTextView = new AnimatedTextView(context, false, true, true); + subtitleTextView.setPadding(dp(4), 0, dp(4), 0); + subtitleTextView.setTextColor(undoInfoColor); + subtitleTextView.setTypeface(Typeface.SANS_SERIF); + subtitleTextView.setTextSize(dp(13)); + linearLayout.addView(subtitleTextView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, dp(6))); + } + + public void setSubtitle(CharSequence text, boolean animated) { + subtitleTextView.setText(text, animated); + } + + @Override + protected void onShow() { + super.onShow(); + imageView.playAnimation(); + } + + public void setAnimation(int resId, String... layers) { + setAnimation(resId, 32, 32, layers); + } + + public void setAnimation(int resId, int w, int h, String... layers) { + imageView.setAnimation(resId, w, h); + for (String layer : layers) { + imageView.setLayerColor(layer + ".**", textColor); + } + } + + public CharSequence getAccessibilityText() { + return titleTextView.getText() + ".\n" + subtitleTextView.getText(); + } + + public void hideImage() { + imageView.setVisibility(GONE); + ((MarginLayoutParams) linearLayout.getLayoutParams()).setMarginStart(dp(10)); } } @@ -1385,7 +1460,7 @@ public boolean dispatchTouchEvent(MotionEvent ev) { return super.dispatchTouchEvent(ev); } }; - reactionsContainerLayout.setPadding(AndroidUtilities.dp(4), AndroidUtilities.dp(24), AndroidUtilities.dp(4), AndroidUtilities.dp(0)); + reactionsContainerLayout.setPadding(dp(4), dp(24), dp(4), dp(0)); reactionsContainerLayout.setDelegate(new ReactionsContainerLayout.ReactionsContainerDelegate() { @Override public void onReactionClicked(View view, ReactionsLayoutInBubble.VisibleReaction visibleReaction, boolean longpress, boolean addToRecent) { @@ -1442,7 +1517,7 @@ private void showTaggedReactionToast(ReactionsLayoutInBubble.VisibleReaction vis reactionsContainerLayout.setClipChildren(false); reactionsContainerLayout.setClipToPadding(false); reactionsContainerLayout.setVisibility(View.VISIBLE); - reactionsContainerLayout.setBubbleOffset(-AndroidUtilities.dp(80)); + reactionsContainerLayout.setBubbleOffset(-dp(80)); reactionsContainerLayout.setHint(LocaleController.getString(R.string.SavedTagReactionsHint)); addView(reactionsContainerLayout, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, 92.5f, Gravity.CENTER_HORIZONTAL, 0, 36, 0, 0)); reactionsContainerLayout.setMessage(null, null, true); @@ -1471,7 +1546,7 @@ public void hideReactionsDialog() { @Override protected int getMeasuredBackgroundHeight() { - return textView.getMeasuredHeight() + AndroidUtilities.dp(30); + return textView.getMeasuredHeight() + dp(30); } @Override @@ -1503,7 +1578,7 @@ public LottieLayout(@NonNull Context context, Theme.ResourcesProvider resourcesP @Override public void setText(CharSequence text, BufferType type) { - text = Emoji.replaceEmoji(text, getPaint().getFontMetricsInt(), AndroidUtilities.dp(13), false); + text = Emoji.replaceEmoji(text, getPaint().getFontMetricsInt(), dp(13), false); super.setText(text, type); } }; @@ -1512,7 +1587,7 @@ public void setText(CharSequence text, BufferType type) { textView.setTypeface(Typeface.SANS_SERIF); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15); textView.setEllipsize(TextUtils.TruncateAt.END); - textView.setPadding(0, AndroidUtilities.dp(8), 0, AndroidUtilities.dp(8)); + textView.setPadding(0, dp(8), 0, dp(8)); addView(textView, LayoutHelper.createFrameRelatively(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL, 56, 0, 8, 0)); textView.setLinkTextColor(getThemedColor(Theme.key_undo_cancelColor)); @@ -1582,7 +1657,7 @@ public LoadingLottieLayout(@NonNull Context context, Theme.ResourcesProvider res textLoadingView.setTypeface(Typeface.SANS_SERIF); textLoadingView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15); textLoadingView.setEllipsize(TextUtils.TruncateAt.END); - textLoadingView.setPadding(0, AndroidUtilities.dp(8), 0, AndroidUtilities.dp(8)); + textLoadingView.setPadding(0, dp(8), 0, dp(8)); textView.setVisibility(View.GONE); addView(textLoadingView, LayoutHelper.createFrameRelatively(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL, 56, 0, 8, 0)); @@ -1622,14 +1697,14 @@ public UsersLayout(@NonNull Context context, boolean subtitle, Theme.ResourcesPr avatarsImageView = new AvatarsImageView(context, false); avatarsImageView.setStyle(AvatarsDrawable.STYLE_MESSAGE_SEEN); - avatarsImageView.setAvatarsTextSize(AndroidUtilities.dp(18)); + avatarsImageView.setAvatarsTextSize(dp(18)); addView(avatarsImageView, LayoutHelper.createFrameRelatively(24 + 12 + 12 + 8, 48, Gravity.START | Gravity.CENTER_VERTICAL, 12, 0, 0, 0)); if (!subtitle) { textView = new LinkSpanDrawable.LinksTextView(context) { @Override public void setText(CharSequence text, BufferType type) { - text = Emoji.replaceEmoji(text, getPaint().getFontMetricsInt(), AndroidUtilities.dp(13), false); + text = Emoji.replaceEmoji(text, getPaint().getFontMetricsInt(), dp(13), false); super.setText(text, type); } }; @@ -1637,33 +1712,35 @@ public void setText(CharSequence text, BufferType type) { textView.setTypeface(Typeface.SANS_SERIF); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15); textView.setEllipsize(TextUtils.TruncateAt.END); - textView.setPadding(0, AndroidUtilities.dp(8), 0, AndroidUtilities.dp(8)); + textView.setPadding(0, dp(8), 0, dp(8)); textView.setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT); addView(textView, LayoutHelper.createFrameRelatively(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL, 12 + 56 + 2, 0, 12, 0)); } else { linearLayout = new LinearLayout(getContext()); linearLayout.setOrientation(LinearLayout.VERTICAL); - addView(linearLayout, LayoutHelper.createFrameRelatively(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL, 18 + 56 + 2, 0, 12, 0)); + addView(linearLayout, LayoutHelper.createFrameRelatively(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL, 18 + 56 + 2, 6, 12, 6)); textView = new LinkSpanDrawable.LinksTextView(context) { @Override public void setText(CharSequence text, BufferType type) { - text = Emoji.replaceEmoji(text, getPaint().getFontMetricsInt(), AndroidUtilities.dp(13), false); + text = Emoji.replaceEmoji(text, getPaint().getFontMetricsInt(), dp(13), false); super.setText(text, type); } }; NotificationCenter.listenEmojiLoading(textView); textView.setTypeface(Typeface.SANS_SERIF); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setTypeface(AndroidUtilities.bold()); textView.setEllipsize(TextUtils.TruncateAt.END); textView.setMaxLines(1); linearLayout.addView(textView); subtitleView = new LinkSpanDrawable.LinksTextView(context); subtitleView.setTypeface(Typeface.SANS_SERIF); - subtitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + subtitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12); subtitleView.setEllipsize(TextUtils.TruncateAt.END); - subtitleView.setMaxLines(1); + subtitleView.setSingleLine(false); + subtitleView.setMaxLines(3); subtitleView.setLinkTextColor(getThemedColor(Theme.key_undo_cancelColor)); linearLayout.addView(subtitleView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, 0, 0, 0, 0, 0)); } @@ -1746,7 +1823,7 @@ public static final class UndoButton extends Button { private Runnable delayedAction; private Bulletin bulletin; - private TextView undoTextView; + public TextView undoTextView; private boolean isUndone; public UndoButton(@NonNull Context context, boolean text) { @@ -1862,10 +1939,10 @@ public Bulletin show() { } } - private static class TimerView extends View { + public static class TimerView extends View { private final Paint progressPaint; - private long timeLeft; + public long timeLeft; private int prevSeconds; private String timeLeftString; private int textWidth; @@ -1884,22 +1961,27 @@ public TimerView(Context context, Theme.ResourcesProvider resourcesProvider) { super(context); textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); - textPaint.setTextSize(AndroidUtilities.dp(12)); - textPaint.setTypeface(AndroidUtilities.bold()); - textPaint.setColor(Theme.getColor(Theme.key_undo_infoColor, resourcesProvider)); + textPaint.setTextSize(dp(12)); + textPaint.setTypeface(AndroidUtilities.getTypeface("fonts/num.otf")); progressPaint = new Paint(Paint.ANTI_ALIAS_FLAG); progressPaint.setStyle(Paint.Style.STROKE); - progressPaint.setStrokeWidth(AndroidUtilities.dp(2)); + progressPaint.setStrokeWidth(dp(2)); progressPaint.setStrokeCap(Paint.Cap.ROUND); - progressPaint.setColor(Theme.getColor(Theme.key_undo_infoColor, resourcesProvider)); + + setColor(Theme.getColor(Theme.key_undo_infoColor, resourcesProvider)); + } + + public void setColor(int color) { + textPaint.setColor(color); + progressPaint.setColor(color); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int newSeconds = timeLeft > 0 ? (int) Math.ceil(timeLeft / 1000.0f) : 0; - rect.set(AndroidUtilities.dp(1), AndroidUtilities.dp(1), getMeasuredWidth() - AndroidUtilities.dp(1), getMeasuredHeight() - AndroidUtilities.dp(1)); + rect.set(dp(1), dp(1), getMeasuredWidth() - dp(1), getMeasuredHeight() - dp(1)); if (prevSeconds != newSeconds) { prevSeconds = newSeconds; timeLeftString = String.valueOf(Math.max(0, newSeconds)); @@ -1926,7 +2008,7 @@ protected void onDraw(Canvas canvas) { if (timeLayoutOut != null && timeReplaceProgress < 1f) { textPaint.setAlpha((int) (alpha * (1f - timeReplaceProgress))); canvas.save(); - canvas.translate(rect.centerX() - textWidthOut / 2f, rect.centerY() - timeLayoutOut.getHeight() / 2f + AndroidUtilities.dp(10) * timeReplaceProgress); + canvas.translate(rect.centerX() - textWidthOut / 2f, rect.centerY() - timeLayoutOut.getHeight() / 2f + dp(10) * timeReplaceProgress - dp(.5f)); timeLayoutOut.draw(canvas); textPaint.setAlpha(alpha); canvas.restore(); @@ -1937,7 +2019,7 @@ protected void onDraw(Canvas canvas) { textPaint.setAlpha((int) (alpha * timeReplaceProgress)); } canvas.save(); - canvas.translate(rect.centerX() - textWidth / 2f, rect.centerY() - timeLayout.getHeight() / 2f - AndroidUtilities.dp(10) * (1f - timeReplaceProgress)); + canvas.translate(rect.centerX() - textWidth / 2f, rect.centerY() - timeLayout.getHeight() / 2f - dp(10) * (1f - timeReplaceProgress) - dp(.5f)); timeLayout.draw(canvas); if (timeReplaceProgress != 1f) { textPaint.setAlpha(alpha); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/BulletinFactory.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/BulletinFactory.java index 3a0ef681324..1181f5d6d3f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/BulletinFactory.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/BulletinFactory.java @@ -406,6 +406,10 @@ public Bulletin createUsersBulletin(List<? extends TLObject> users, CharSequence return createUsersBulletin(users, text, null, null); } + public Bulletin createUsersBulletin(List<? extends TLObject> users, CharSequence text, CharSequence subtitle) { + return createUsersBulletin(users, text, subtitle, null); + } + public Bulletin createUsersBulletin(List<? extends TLObject> users, CharSequence text, CharSequence subtitle, UndoObject undoObject) { final Bulletin.UsersLayout layout = new Bulletin.UsersLayout(getContext(), subtitle != null, resourcesProvider); int count = 0; @@ -436,8 +440,8 @@ public Bulletin createUsersBulletin(List<? extends TLObject> users, CharSequence layout.textView.setMaxLines(1); layout.textView.setText(text); layout.subtitleView.setText(subtitle); - layout.subtitleView.setSingleLine(true); - layout.subtitleView.setMaxLines(1); + layout.subtitleView.setSingleLine(false); + layout.subtitleView.setMaxLines(3); if (layout.linearLayout.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) { int margin = AndroidUtilities.dp(12 + 56 + 2 - (3 - count) * 12); if (count == 1) { @@ -879,7 +883,7 @@ public Bulletin createCopyLinkBulletin(String text, Theme.ResourcesProvider reso return create(layout, Bulletin.DURATION_SHORT); } - private Bulletin create(Bulletin.Layout layout, int duration) { + public Bulletin create(Bulletin.Layout layout, int duration) { if (fragment != null) { return Bulletin.make(fragment, layout, duration); } else { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java index ca7ed2c90bd..b519ac5054a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java @@ -145,6 +145,7 @@ import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.SerializedData; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.tgnet.tl.TL_stories; import org.telegram.ui.ActionBar.ActionBar; import org.telegram.ui.ActionBar.ActionBarMenuSubItem; @@ -179,9 +180,9 @@ import org.telegram.ui.bots.BotCommandsMenuView; import org.telegram.ui.bots.BotKeyboardView; import org.telegram.ui.bots.BotWebViewAttachedSheet; -import org.telegram.ui.bots.BotWebViewMenuContainer; import org.telegram.ui.bots.BotWebViewSheet; import org.telegram.ui.bots.ChatActivityBotWebViewButton; +import org.telegram.ui.bots.WebViewRequestProps; import java.io.File; import java.io.FileOutputStream; @@ -389,7 +390,7 @@ default boolean onceVoiceAvailable() { private String botMenuWebViewTitle; private String botMenuWebViewUrl; - public BotWebViewMenuContainer botWebViewMenuContainer; +// public BotWebViewMenuContainer botWebViewMenuContainer; private ChatActivityBotWebViewButton botWebViewButton; @Nullable @@ -759,7 +760,7 @@ public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo i private Runnable openKeyboardRunnable = new Runnable() { @Override public void run() { - if (hasBotWebView() && botCommandsMenuIsShowing()) { + if (hasBotWebView() && botCommandsMenuIsShowing() || BaseFragment.hasSheets(parentFragment)) { return; } @@ -2570,12 +2571,12 @@ protected void onDraw(Canvas canvas) { showRestrictedHint(); return; } - if (hasBotWebView() && botCommandsMenuIsShowing()) { - if (botWebViewMenuContainer != null) { - botWebViewMenuContainer.dismiss(v::callOnClick); - } - return; - } +// if (hasBotWebView() && botCommandsMenuIsShowing()) { +// if (botWebViewMenuContainer != null) { +// botWebViewMenuContainer.dismiss(v::callOnClick); +// } +// return; +// } if (!isPopupShowing() || currentPopupContentType != 0) { showPopup(1, 0); @@ -3283,10 +3284,10 @@ private void createBotButton() { AndroidUtilities.updateViewVisibilityAnimated(botButton, false, 0.1f, false); attachLayout.addView(botButton, 0, LayoutHelper.createLinear(48, 48)); botButton.setOnClickListener(v -> { - if (hasBotWebView() && botCommandsMenuIsShowing()) { - botWebViewMenuContainer.dismiss(v::callOnClick); - return; - } +// if (hasBotWebView() && botCommandsMenuIsShowing()) { +// botWebViewMenuContainer.dismiss(v::callOnClick); +// return; +// } if (searchingType != 0) { setSearchingTypeInternal(0, false); emojiView.closeSearch(false); @@ -3906,9 +3907,10 @@ private void createBotCommandsMenuButton() { } openWebViewMenu(); - } else if (botWebViewMenuContainer != null) { - botWebViewMenuContainer.dismiss(); } +// else if (botWebViewMenuContainer != null) { +// botWebViewMenuContainer.dismiss(); +// } return; } @@ -3968,13 +3970,23 @@ private void openWebViewMenu() { createBotWebViewMenuContainer(); Runnable onRequestWebView = () -> { AndroidUtilities.hideKeyboard(this); - BotWebViewAttachedSheet.WebViewRequestProps props = BotWebViewAttachedSheet.WebViewRequestProps.of(currentAccount, dialog_id, dialog_id, botMenuWebViewTitle, botMenuWebViewUrl, BotWebViewSheet.TYPE_BOT_MENU_BUTTON, 0, false, null, false, null, null, 0, false); + WebViewRequestProps props = WebViewRequestProps.of(currentAccount, dialog_id, dialog_id, botMenuWebViewTitle, botMenuWebViewUrl, BotWebViewAttachedSheet.TYPE_BOT_MENU_BUTTON, 0, false, null, false, null, null, 0, false); if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(props) != null) { if (botCommandsMenuButton != null) { botCommandsMenuButton.setOpened(false); } return; } + if (AndroidUtilities.isWebAppLink(botMenuWebViewUrl)) { + Browser.Progress progress = new Browser.Progress(); + progress.onEnd(() -> { + if (botCommandsMenuButton != null) { + botCommandsMenuButton.setOpened(false); + } + }); + Browser.openAsInternalIntent(getContext(), botMenuWebViewUrl, false, progress); + return; + } if (AndroidUtilities.isTablet()) { BotWebViewSheet webViewSheet = new BotWebViewSheet(getContext(), resourcesProvider); webViewSheet.setDefaultFullsize(false); @@ -3987,7 +3999,18 @@ private void openWebViewMenu() { botCommandsMenuButton.setOpened(false); } } else { - botWebViewMenuContainer.show(currentAccount, dialog_id, botMenuWebViewUrl); + if (parentFragment != null && parentFragment.getParentActivity() != null) { + BotWebViewAttachedSheet sheet = parentFragment.createBotViewer(); + sheet.setDefaultFullsize(false); + sheet.setNeedsContext(false); + sheet.setParentActivity(parentFragment.getParentActivity()); + sheet.requestWebView(null, props); + sheet.show(); + + if (botCommandsMenuButton != null) { + botCommandsMenuButton.setOpened(false); + } + } } }; @@ -4616,25 +4639,25 @@ private void updateBotCommandsMenuContainerTopPadding() { } private void createBotWebViewMenuContainer() { - if (botWebViewMenuContainer != null) { - return; - } - botWebViewMenuContainer = new BotWebViewMenuContainer(getContext(), this) { - @Override - public void onDismiss() { - super.onDismiss(); - if (botCommandsMenuButton != null) { - botCommandsMenuButton.setOpened(false); - } - } - }; - sizeNotifierLayout.addView(botWebViewMenuContainer, 15, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.BOTTOM)); - botWebViewMenuContainer.setVisibility(GONE); - botWebViewMenuContainer.setOnDismissGlobalListener(()->{ - if (botButtonsMessageObject != null && (messageEditText == null || TextUtils.isEmpty(messageEditText.getTextToUse())) && !botWebViewMenuContainer.hasSavedText()) { - showPopup(1, POPUP_CONTENT_BOT_KEYBOARD); - } - }); +// if (botWebViewMenuContainer != null) { +// return; +// } +// botWebViewMenuContainer = new BotWebViewMenuContainer(getContext(), this) { +// @Override +// public void onDismiss() { +// super.onDismiss(); +// if (botCommandsMenuButton != null) { +// botCommandsMenuButton.setOpened(false); +// } +// } +// }; +// sizeNotifierLayout.addView(botWebViewMenuContainer, 15, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.BOTTOM)); +// botWebViewMenuContainer.setVisibility(GONE); +// botWebViewMenuContainer.setOnDismissGlobalListener(()->{ +// if (botButtonsMessageObject != null && (messageEditText == null || TextUtils.isEmpty(messageEditText.getTextToUse())) && !botWebViewMenuContainer.hasSavedText()) { +// showPopup(1, POPUP_CONTENT_BOT_KEYBOARD); +// } +// }); } private ArrayList<TextWatcher> messageEditTextWatchers; @@ -5643,15 +5666,15 @@ public float topViewVisible() { } public void onAdjustPanTransitionUpdate(float y, float progress, boolean keyboardVisible) { - if (botWebViewMenuContainer != null) { - botWebViewMenuContainer.setTranslationY(y); - } +// if (botWebViewMenuContainer != null) { +// botWebViewMenuContainer.setTranslationY(y); +// } } public void onAdjustPanTransitionEnd() { - if (botWebViewMenuContainer != null) { - botWebViewMenuContainer.onPanTransitionEnd(); - } +// if (botWebViewMenuContainer != null) { +// botWebViewMenuContainer.onPanTransitionEnd(); +// } if (onKeyboardClosed != null) { onKeyboardClosed.run(); onKeyboardClosed = null; @@ -5659,9 +5682,9 @@ public void onAdjustPanTransitionEnd() { } public void onAdjustPanTransitionStart(boolean keyboardVisible, int contentHeight) { - if (botWebViewMenuContainer != null) { - botWebViewMenuContainer.onPanTransitionStart(keyboardVisible, contentHeight); - } +// if (botWebViewMenuContainer != null) { +// botWebViewMenuContainer.onPanTransitionStart(keyboardVisible, contentHeight); +// } if (keyboardVisible && showTopViewRunnable != null) { AndroidUtilities.cancelRunOnUIThread(showTopViewRunnable); showTopViewRunnable.run(); @@ -5672,9 +5695,9 @@ public void onAdjustPanTransitionStart(boolean keyboardVisible, int contentHeigh setTextFieldRunnable.run(); } - if (keyboardVisible && messageEditText != null && messageEditText.hasFocus() && hasBotWebView() && botCommandsMenuIsShowing() && botWebViewMenuContainer != null) { - botWebViewMenuContainer.dismiss(); - } +// if (keyboardVisible && messageEditText != null && messageEditText.hasFocus() && hasBotWebView() && botCommandsMenuIsShowing() && botWebViewMenuContainer != null) { +// botWebViewMenuContainer.dismiss(); +// } } private void onWindowSizeChanged() { @@ -5867,7 +5890,7 @@ public void onResume() { } int visibility = getVisibility(); - if (showKeyboardOnResume && parentFragment != null && parentFragment.isLastFragment()) { + if (showKeyboardOnResume && !BaseFragment.hasSheets(parentFragment)) { showKeyboardOnResume = false; if (delegate != null) { delegate.onKeyboardRequested(); @@ -6077,7 +6100,7 @@ public void updateFieldHint(boolean animated) { TLRPC.Chat chat = accountInstance.getMessagesController().getChat(-dialog_id); TLRPC.ChatFull chatFull = accountInstance.getMessagesController().getChatFull(-dialog_id); isChannel = ChatObject.isChannelAndNotMegaGroup(chat); - anonymously = ChatObject.getSendAsPeerId(chat, chatFull) == -dialog_id; + anonymously = isChannel ? chat != null && !chat.signatures && !chat.signature_profiles : ChatObject.getSendAsPeerId(chat, chatFull) == -dialog_id; } if (anonymously) { messageEditText.setHintText(getString("SendAnonymously", R.string.SendAnonymously)); @@ -9268,8 +9291,11 @@ public void setFieldFocused(boolean focus) { if (messageEditText == null || am.isTouchExplorationEnabled()) { return; } + if (focus && BaseFragment.hasSheets(parentFragment)) { + focus = false; + } if (focus) { - if (searchingType == 0 && !messageEditText.isFocused() && (botWebViewMenuContainer == null || botWebViewMenuContainer.getVisibility() == View.GONE)) { + if (searchingType == 0 && !messageEditText.isFocused()/* && (botWebViewMenuContainer == null || botWebViewMenuContainer.getVisibility() == View.GONE)*/) { AndroidUtilities.runOnUIThread(focusRunnable = () -> { focusRunnable = null; boolean allowFocus; @@ -9509,13 +9535,15 @@ public void updateSendAsButton(boolean animated) { return; } createMessageEditText(); + TLRPC.Chat chat = parentFragment.getMessagesController().getChat(-dialog_id); TLRPC.ChatFull full = parentFragment.getMessagesController().getChatFull(-dialog_id); TLRPC.Peer defPeer = full != null ? full.default_send_as : null; if (defPeer == null && delegate.getSendAsPeers() != null && !delegate.getSendAsPeers().peers.isEmpty()) { defPeer = delegate.getSendAsPeers().peers.get(0).peer; } boolean isVisible = defPeer != null && (delegate.getSendAsPeers() == null || delegate.getSendAsPeers().peers.size() > 1) && - !isEditingMessage() && !isRecordingAudioVideo() && (recordedAudioPanel == null || recordedAudioPanel.getVisibility() != View.VISIBLE); + !isEditingMessage() && !isRecordingAudioVideo() && (recordedAudioPanel == null || recordedAudioPanel.getVisibility() != View.VISIBLE) && + (!ChatObject.isChannelAndNotMegaGroup(chat) || ChatObject.canSendAsPeers(chat)); if (isVisible) { createSenderSelectView(); } @@ -9649,7 +9677,8 @@ public void onAnimationCancel(Animator animation) { } public boolean onBotWebViewBackPressed() { - return botWebViewMenuContainer != null && botWebViewMenuContainer.onBackPressed(); + return false; +// return botWebViewMenuContainer != null && botWebViewMenuContainer.onBackPressed(); } public boolean hasBotWebView() { @@ -9878,7 +9907,7 @@ public void run() { return; } - BotWebViewAttachedSheet.WebViewRequestProps props = BotWebViewAttachedSheet.WebViewRequestProps.of(currentAccount, messageObject.messageOwner.dialog_id, botId, button.text, button.url, button instanceof TLRPC.TL_keyboardButtonSimpleWebView ? BotWebViewSheet.TYPE_SIMPLE_WEB_VIEW_BUTTON : BotWebViewSheet.TYPE_WEB_VIEW_BUTTON, replyMessageObject != null ? replyMessageObject.messageOwner.id : 0, false, null, false, null, null, 0, false); + WebViewRequestProps props = WebViewRequestProps.of(currentAccount, messageObject.messageOwner.dialog_id, botId, button.text, button.url, button instanceof TLRPC.TL_keyboardButtonSimpleWebView ? BotWebViewSheet.TYPE_SIMPLE_WEB_VIEW_BUTTON : BotWebViewSheet.TYPE_WEB_VIEW_BUTTON, replyMessageObject != null ? replyMessageObject.messageOwner.id : 0, false, null, false, null, null, 0, false); if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(props) != null) { if (botCommandsMenuButton != null) { botCommandsMenuButton.setOpened(false); @@ -10987,7 +11016,7 @@ public void onAnimationEnd(Animator animation) { } public void openKeyboardInternal() { - if (hasBotWebView() && botCommandsMenuIsShowing()) { + if (hasBotWebView() && botCommandsMenuIsShowing() || BaseFragment.hasSheets(parentFragment)) { return; } showPopup(AndroidUtilities.usingHardwareInput || AndroidUtilities.isInMultiwindow || parentFragment != null && parentFragment.isInBubbleMode() || isPaused ? 0 : 2, 0); @@ -11027,7 +11056,7 @@ public boolean hasAudioToSend() { } public void openKeyboard() { - if (hasBotWebView() && botCommandsMenuIsShowing()) { + if (hasBotWebView() && botCommandsMenuIsShowing() || BaseFragment.hasSheets(parentFragment)) { return; } if (delegate != null) { @@ -11175,7 +11204,7 @@ public void onAnimationEnd(Animator animation) { checkBotMenu(); if (keyboardVisible && isPopupShowing() && stickersExpansionAnim == null) { showPopup(0, currentPopupContentType); - } else if (!keyboardVisible && !isPopupShowing() && botButtonsMessageObject != null && replyingMessageObject != botButtonsMessageObject && (!hasBotWebView() || !botCommandsMenuIsShowing()) && (messageEditText == null || TextUtils.isEmpty(messageEditText.getText())) && botReplyMarkup != null && !botReplyMarkup.rows.isEmpty()) { + } else if (!keyboardVisible && !isPopupShowing() && botButtonsMessageObject != null && replyingMessageObject != botButtonsMessageObject && (!hasBotWebView() && !botCommandsMenuIsShowing() && !BaseFragment.hasSheets(parentFragment)) && (messageEditText == null || TextUtils.isEmpty(messageEditText.getText())) && botReplyMarkup != null && !botReplyMarkup.rows.isEmpty()) { if (sizeNotifierLayout.adjustPanLayoutHelper.animationInProgress()) { sizeNotifierLayout.adjustPanLayoutHelper.stopTransition(); } else { @@ -11463,11 +11492,11 @@ public void didReceivedNotification(int id, int account, Object... args) { updateRecordInterface(RECORD_STATE_CANCEL_BY_TIME, true); } else if (id == NotificationCenter.updateBotMenuButton) { long botId = (long) args[0]; - TLRPC.BotMenuButton botMenuButton = (TLRPC.BotMenuButton) args[1]; + TL_bots.BotMenuButton botMenuButton = (TL_bots.BotMenuButton) args[1]; if (botId == dialog_id) { - if (botMenuButton instanceof TLRPC.TL_botMenuButton) { - TLRPC.TL_botMenuButton webViewButton = (TLRPC.TL_botMenuButton) botMenuButton; + if (botMenuButton instanceof TL_bots.TL_botMenuButton) { + TL_bots.TL_botMenuButton webViewButton = (TL_bots.TL_botMenuButton) botMenuButton; botMenuWebViewTitle = webViewButton.text; botMenuWebViewUrl = webViewButton.url; botMenuButtonType = BotMenuButtonType.WEB_VIEW; @@ -11726,7 +11755,7 @@ public boolean swipeToBackEnabled() { if (isInVideoMode() && recordedAudioPanel != null && recordedAudioPanel.getVisibility() == View.VISIBLE) { return false; } - if (hasBotWebView() && botCommandsMenuButton.isOpened()) { + if (hasBotWebView() && botCommandsMenuButton.isOpened() || BaseFragment.hasSheets(parentFragment)) { return false; } return true; @@ -12331,11 +12360,11 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { botWebViewButton.getLayoutParams().height = getMeasuredHeight() - dp(2); measureChild(botWebViewButton, widthMeasureSpec, heightMeasureSpec); } - if (botWebViewMenuContainer != null) { - MarginLayoutParams params = (MarginLayoutParams) botWebViewMenuContainer.getLayoutParams(); - params.bottomMargin = messageEditText == null ? 0 : messageEditText.getMeasuredHeight(); - measureChild(botWebViewMenuContainer, widthMeasureSpec, heightMeasureSpec); - } +// if (botWebViewMenuContainer != null) { +// MarginLayoutParams params = (MarginLayoutParams) botWebViewMenuContainer.getLayoutParams(); +// params.bottomMargin = messageEditText == null ? 0 : messageEditText.getMeasuredHeight(); +// measureChild(botWebViewMenuContainer, widthMeasureSpec, heightMeasureSpec); +// } } @Override @@ -12357,20 +12386,20 @@ private void beginDelayedTransition() { } } - private LongSparseArray<TLRPC.BotInfo> lastBotInfo; + private LongSparseArray<TL_bots.BotInfo> lastBotInfo; - public void setBotInfo(LongSparseArray<TLRPC.BotInfo> botInfo) { + public void setBotInfo(LongSparseArray<TL_bots.BotInfo> botInfo) { setBotInfo(botInfo, true); } - public void setBotInfo(LongSparseArray<TLRPC.BotInfo> botInfo, boolean animate) { + public void setBotInfo(LongSparseArray<TL_bots.BotInfo> botInfo, boolean animate) { lastBotInfo = botInfo; if (botInfo.size() == 1 && botInfo.valueAt(0).user_id == dialog_id) { - TLRPC.BotInfo info = botInfo.valueAt(0); - TLRPC.BotMenuButton menuButton = info.menu_button; - if (menuButton instanceof TLRPC.TL_botMenuButton) { - TLRPC.TL_botMenuButton webViewButton = (TLRPC.TL_botMenuButton) menuButton; + TL_bots.BotInfo info = botInfo.valueAt(0); + TL_bots.BotMenuButton menuButton = info.menu_button; + if (menuButton instanceof TL_bots.TL_botMenuButton) { + TL_bots.TL_botMenuButton webViewButton = (TL_bots.TL_botMenuButton) menuButton; botMenuWebViewTitle = webViewButton.text; botMenuWebViewUrl = webViewButton.url; botMenuButtonType = BotMenuButtonType.WEB_VIEW; @@ -12400,9 +12429,9 @@ public void hideBotCommands() { } if (hasBotWebView()) { - if (botWebViewMenuContainer != null) { - botWebViewMenuContainer.dismiss(); - } +// if (botWebViewMenuContainer != null) { +// botWebViewMenuContainer.dismiss(); +// } } else { if (botCommandsMenuContainer != null) { botCommandsMenuContainer.dismiss(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlert.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlert.java index 9df5e46c601..256d41ee416 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlert.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlert.java @@ -127,7 +127,7 @@ import org.telegram.ui.Stars.StarsIntroActivity; import org.telegram.ui.Stories.recorder.StoryEntry; import org.telegram.ui.WebAppDisclaimerAlert; -import org.telegram.ui.bots.BotWebViewContainer; +import org.telegram.ui.web.BotWebViewContainer; import org.telegram.ui.bots.BotWebViewMenuContainer; import org.telegram.ui.bots.ChatAttachAlertBotWebViewLayout; @@ -205,6 +205,11 @@ public void onWebAppSetupClosingBehavior(boolean needConfirmation) { webViewLayout.setNeedCloseConfirmation(needConfirmation); } + @Override + public void onWebAppSwipingBehavior(boolean allowSwipes) { + webViewLayout.setAllowSwipes(allowSwipes); + } + @Override public void onCloseRequested(Runnable callback) { if (currentAttachLayout != webViewLayout) { @@ -818,6 +823,7 @@ public void onPanTransitionEnd() { protected boolean typeButtonsAvailable; private boolean stories; + public boolean storyMediaPicker; boolean sendButtonEnabled = true; private float sendButtonEnabledProgress = 1f; @@ -1918,7 +1924,7 @@ public void setTranslationY(float translationY) { if (currentSheetAnimationType == 1) { if (translationY < 0) { currentAttachLayout.setTranslationY(translationY); - if (avatarPicker != 0) { + if (avatarPicker != 0 || storyMediaPicker) { headerView.setTranslationY(baseSelectedTextViewTranslationY + translationY - currentPanTranslationY); } translationY = 0; @@ -2412,7 +2418,7 @@ public void setTranslationY(float translationY) { showBotLayout(button.attachMenuBot.bot_id, true); MediaDataController.getInstance(currentAccount).updateAttachMenuBotsInCache(); }), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors); - }, null); + }, null, null); } else { showBotLayout(button.attachMenuBot.bot_id, true); } @@ -4326,7 +4332,7 @@ private void updateSelectedPosition(int idx) { } float offset = actionBar.getAlpha() != 0 ? 0.0f : AndroidUtilities.dp(26 * (1.0f - headerView.getAlpha())); - if (menuShowed && avatarPicker == 0) { + if (menuShowed && avatarPicker == 0 && !storyMediaPicker) { selectedMenuItem.setTranslationY(scrollOffset - AndroidUtilities.dp(37 + finalMove * moveProgress) + offset + currentPanTranslationY); } else { selectedMenuItem.setTranslationY(ActionBar.getCurrentActionBarHeight() - AndroidUtilities.dp(4) - AndroidUtilities.dp(37 + finalMove) + currentPanTranslationY); @@ -4364,7 +4370,7 @@ private void updateActionBarVisibility(boolean show, boolean animated) { } boolean needsSearchItem = searchItem != null && (avatarSearch || false && currentAttachLayout == photoLayout && !menuShowed && baseFragment instanceof ChatActivity && ((ChatActivity) baseFragment).allowSendGifs() && ((ChatActivity) baseFragment).allowSendPhotos()); - boolean needMoreItem = !isPhotoPicker && (avatarPicker != 0 || !menuShowed) && currentAttachLayout == photoLayout && (photosEnabled || videosEnabled); + boolean needMoreItem = !isPhotoPicker && !storyMediaPicker && (avatarPicker != 0 || !menuShowed) && currentAttachLayout == photoLayout && (photosEnabled || videosEnabled); if (currentAttachLayout == restrictedLayout) { needsSearchItem = false; needMoreItem = false; @@ -4509,15 +4515,15 @@ public void updateCountButton(int animated) { } currentAttachLayout.onSelectedItemsCountChanged(count); - if (currentAttachLayout == photoLayout && ((baseFragment instanceof ChatActivity) || avatarPicker != 0) && (count == 0 && menuShowed || (count != 0 || avatarPicker != 0) && !menuShowed)) { - menuShowed = count != 0 || avatarPicker != 0; + if (currentAttachLayout == photoLayout && ((baseFragment instanceof ChatActivity) || avatarPicker != 0 || storyMediaPicker) && (count == 0 && menuShowed || (count != 0 || avatarPicker != 0 || storyMediaPicker) && !menuShowed)) { + menuShowed = count != 0 || avatarPicker != 0 || storyMediaPicker; if (menuAnimator != null) { menuAnimator.cancel(); menuAnimator = null; } boolean needsSearchItem = avatarPicker != 0 && searchItem != null && actionBar.getTag() != null && baseFragment instanceof ChatActivity && ((ChatActivity) baseFragment).allowSendGifs(); if (menuShowed) { - if (avatarPicker == 0) { + if (avatarPicker == 0 && !storyMediaPicker) { selectedMenuItem.setVisibility(View.VISIBLE); } headerView.setVisibility(View.VISIBLE); @@ -4527,7 +4533,7 @@ public void updateCountButton(int animated) { } } if (animated == 0) { - if (actionBar.getTag() == null && avatarPicker == 0) { + if (actionBar.getTag() == null && avatarPicker == 0 && !storyMediaPicker) { selectedMenuItem.setAlpha(menuShowed ? 1.0f : 0.0f); } headerView.setAlpha(menuShowed ? 1.0f : 0.0f); @@ -4540,7 +4546,7 @@ public void updateCountButton(int animated) { } else { menuAnimator = new AnimatorSet(); ArrayList<Animator> animators = new ArrayList<>(); - if (actionBar.getTag() == null && avatarPicker == 0) { + if (actionBar.getTag() == null && avatarPicker == 0 && !storyMediaPicker) { animators.add(ObjectAnimator.ofFloat(selectedMenuItem, View.ALPHA, menuShowed ? 1.0f : 0.0f)); } animators.add(ObjectAnimator.ofFloat(headerView, View.ALPHA, menuShowed ? 1.0f : 0.0f)); @@ -4553,7 +4559,7 @@ public void updateCountButton(int animated) { public void onAnimationEnd(Animator animation) { menuAnimator = null; if (!menuShowed) { - if (actionBar.getTag() == null && avatarPicker == 0) { + if (actionBar.getTag() == null && avatarPicker == 0 && !storyMediaPicker) { selectedMenuItem.setVisibility(View.INVISIBLE); } headerView.setVisibility(View.INVISIBLE); @@ -4651,7 +4657,7 @@ public void init() { typeButtonsAvailable = !editingMessageObject.hasValidGroupId(); } else { layoutToSet = photoLayout; - typeButtonsAvailable = avatarPicker == 0; + typeButtonsAvailable = avatarPicker == 0 && !storyMediaPicker; selectedId = 1; } buttonsRecyclerView.setVisibility(typeButtonsAvailable ? View.VISIBLE : View.GONE); @@ -4759,9 +4765,9 @@ public void setAvatarPicker(int type, boolean search) { shadow.setVisibility(View.GONE); } if (avatarPicker == 2) { - selectedTextView.setText(getString("ChoosePhotoOrVideo", R.string.ChoosePhotoOrVideo)); + selectedTextView.setText(getString(R.string.ChoosePhotoOrVideo)); } else { - selectedTextView.setText(getString("ChoosePhoto", R.string.ChoosePhoto)); + selectedTextView.setText(getString(R.string.ChoosePhoto)); } } else { typeButtonsAvailable = true; @@ -4771,8 +4777,14 @@ public void setAvatarPicker(int type, boolean search) { } } + public void setStoryMediaPicker() { + storyMediaPicker = true; + typeButtonsAvailable = false; + selectedTextView.setText(getString(R.string.ChoosePhotoOrVideo)); + } + public void enableStickerMode(Utilities.Callback2<String, TLRPC.InputDocument> customStickerHandler) { - selectedTextView.setText(getString("ChoosePhoto", R.string.ChoosePhoto)); + selectedTextView.setText(getString(R.string.ChoosePhotoForSticker)); typeButtonsAvailable = false; buttonsRecyclerView.setVisibility(View.GONE); shadow.setVisibility(View.GONE); @@ -4808,7 +4820,7 @@ public void setSoundPicker() { isSoundPicker = true; buttonsRecyclerView.setVisibility(View.GONE); shadow.setVisibility(View.GONE); - selectedTextView.setText(getString("ChoosePhotoOrVideo", R.string.ChoosePhotoOrVideo)); + selectedTextView.setText(getString(R.string.ChoosePhotoOrVideo)); } public boolean storyLocationPickerFileIsVideo; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertContactsLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertContactsLayout.java index e94898df055..5dc64c6939f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertContactsLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertContactsLayout.java @@ -590,7 +590,7 @@ private TLRPC.User prepareContact(Object object) { ArrayList<AndroidUtilities.VcardItem> items = new ArrayList<>(); ArrayList<AndroidUtilities.VcardItem> phones = new ArrayList<>(); ArrayList<AndroidUtilities.VcardItem> other = new ArrayList<>(); - ArrayList<TLRPC.TL_restrictionReason> vcard = null; + ArrayList<TLRPC.RestrictionReason> vcard = null; if (contact.key != null) { Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, contact.key); result = AndroidUtilities.loadVCardFromStream(uri, parentAlert.currentAccount, true, items, name); @@ -680,7 +680,7 @@ private TLRPC.User prepareContact(Object object) { } } currentUser.restriction_reason.clear(); - TLRPC.TL_restrictionReason reason = new TLRPC.TL_restrictionReason(); + TLRPC.RestrictionReason reason = new TLRPC.RestrictionReason(); reason.text = builder.toString(); reason.reason = ""; reason.platform = ""; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertDocumentLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertDocumentLayout.java index 8500fcba025..e8e7ba2b1ef 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertDocumentLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertDocumentLayout.java @@ -801,6 +801,9 @@ private boolean onItemClick(View view, Object object) { } if (item.file.length() == 0) { return false; + } + if (parentAlert.storyMediaPicker) { + } selectedFiles.put(path, item); selectedFilesOrder.add(path); @@ -837,7 +840,7 @@ public boolean isRingtone(File file) { mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); } if (file.length() == 0 || mimeType == null || !RingtoneDataStore.ringtoneSupportedMimeType.contains(mimeType)) { - BulletinFactory.of(parentAlert.getContainer(), null).createErrorBulletinSubtitle(LocaleController.formatString("InvalidFormatError", R.string.InvalidFormatError), LocaleController.formatString("ErrorInvalidRingtone", R.string.ErrorRingtoneInvalidFormat), null).show(); + BulletinFactory.of(parentAlert.getContainer(), null).createErrorBulletinSubtitle(LocaleController.formatString("InvalidFormatError", R.string.InvalidFormatError), LocaleController.getString(R.string.ErrorRingtoneInvalidFormat), null).show(); return false; } if (file.length() > MessagesController.getInstance(UserConfig.selectedAccount).ringtoneSizeMax) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertPhotoLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertPhotoLayout.java index 68948b7780e..21dff34ea86 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertPhotoLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertPhotoLayout.java @@ -954,6 +954,9 @@ public int getSpanSize(int position) { } }); gridView.setOnItemLongClickListener((view, position) -> { + if (parentAlert.storyMediaPicker) { + return false; + } if (position == 0 && selectedAlbumEntry == galleryAlbumEntry) { if (parentAlert.delegate != null) { parentAlert.delegate.didPressedButton(0, false, true, 0, 0, false, false); @@ -2131,7 +2134,7 @@ public void onAnimationEnd(Animator animation) { } protected void updatePhotosCounter(boolean added) { - if (counterTextView == null || parentAlert.avatarPicker != 0) { + if (counterTextView == null || parentAlert.avatarPicker != 0 || parentAlert.storyMediaPicker) { return; } boolean hasVideo = false; @@ -2367,7 +2370,7 @@ public void loadGalleryPhotos() { } private boolean shouldLoadAllMedia() { - return !parentAlert.isPhotoPicker && (parentAlert.baseFragment instanceof ChatActivity || parentAlert.avatarPicker == 2); + return !parentAlert.isPhotoPicker && (parentAlert.baseFragment instanceof ChatActivity || parentAlert.storyMediaPicker || parentAlert.avatarPicker == 2); } public void showCamera() { @@ -4261,7 +4264,7 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { } else { cell.setIsVertical(cameraPhotoLayoutManager.getOrientation() == LinearLayoutManager.VERTICAL); } - if (parentAlert.avatarPicker != 0) { + if (parentAlert.avatarPicker != 0 || parentAlert.storyMediaPicker) { cell.getCheckBox().setVisibility(GONE); } else { cell.getCheckBox().setVisibility(VISIBLE); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAvatarContainer.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAvatarContainer.java index c3e244de793..aba9f5093ab 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAvatarContainer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAvatarContainer.java @@ -55,7 +55,6 @@ import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Business.BusinessLinksController; import org.telegram.ui.ChatActivity; -import org.telegram.ui.LaunchActivity; import org.telegram.ui.ProfileActivity; import org.telegram.ui.Stories.StoriesUtilities; import org.telegram.ui.TopicsFragment; @@ -73,6 +72,7 @@ public class ChatAvatarContainer extends FrameLayout implements NotificationCent private AnimatedTextView animatedSubtitleTextView; private AtomicReference<SimpleTextView> subtitleTextLargerCopyView = new AtomicReference<>(); private ImageView timeItem; + private ImageView starBgItem, starFgItem; private TimerDrawable timerDrawable; private ChatActivity parentFragment; private StatusDrawable[] statusDrawables = new StatusDrawable[6]; @@ -307,6 +307,21 @@ public boolean onTouchEvent(MotionEvent event) { } else { timeItem.setContentDescription(LocaleController.getString("AccAutoDeleteTimer", R.string.AccAutoDeleteTimer)); } + + starBgItem = new ImageView(context); + starBgItem.setImageResource(R.drawable.star_small_outline); + starBgItem.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_actionBarDefault), PorterDuff.Mode.SRC_IN)); + starBgItem.setAlpha(0.0f); + starBgItem.setScaleY(0.0f); + starBgItem.setScaleX(0.0f); + addView(starBgItem); + + starFgItem = new ImageView(context); + starFgItem.setImageResource(R.drawable.star_small_inner); + starFgItem.setAlpha(0.0f); + starFgItem.setScaleY(0.0f); + starFgItem.setScaleX(0.0f); + addView(starFgItem); } if (parentFragment != null && (parentFragment.getChatMode() == 0 || parentFragment.getChatMode() == ChatActivity.MODE_SAVED)) { @@ -572,6 +587,12 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (timeItem != null) { timeItem.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(34), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(34), MeasureSpec.EXACTLY)); } + if (starBgItem != null) { + starBgItem.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(20), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(20), MeasureSpec.EXACTLY)); + } + if (starFgItem != null) { + starFgItem.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(20), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(20), MeasureSpec.EXACTLY)); + } setMeasuredDimension(width, MeasureSpec.getSize(heightMeasureSpec)); if (lastWidth != -1 && lastWidth != width && lastWidth > width) { fadeOutToLessWidth(lastWidth); @@ -662,6 +683,12 @@ protected void onLayout(boolean changed, int left, int top, int right, int botto if (timeItem != null) { timeItem.layout(leftPadding + AndroidUtilities.dp(16), viewTop + AndroidUtilities.dp(15), leftPadding + AndroidUtilities.dp(16 + 34), viewTop + AndroidUtilities.dp(15 + 34)); } + if (starBgItem != null) { + starBgItem.layout(leftPadding + AndroidUtilities.dp(28), viewTop + AndroidUtilities.dp(24), leftPadding + AndroidUtilities.dp(28) + starBgItem.getMeasuredWidth(), viewTop + AndroidUtilities.dp(24) + starBgItem.getMeasuredHeight()); + } + if (starFgItem != null) { + starFgItem.layout(leftPadding + AndroidUtilities.dp(28), viewTop + AndroidUtilities.dp(24), leftPadding + AndroidUtilities.dp(28) + starFgItem.getMeasuredWidth(), viewTop + AndroidUtilities.dp(24) + starFgItem.getMeasuredHeight()); + } if (subtitleTextView != null) { subtitleTextView.layout(l, viewTop + AndroidUtilities.dp(24), l + subtitleTextView.getMeasuredWidth(), viewTop + subtitleTextView.getTextHeight() + AndroidUtilities.dp(24)); } else if (animatedSubtitleTextView != null) { @@ -723,7 +750,7 @@ public void setTime(int value, boolean animated) { if (timerDrawable == null) { return; } - boolean show = true; + boolean show = !stars; if (value == 0 && !secretChatTimer) { show = false; return; @@ -736,6 +763,23 @@ public void setTime(int value, boolean animated) { } } + public boolean stars; + public void setStars(boolean stars, boolean animated) { + if (starBgItem == null || starFgItem == null) return; + this.stars = stars; + if (!animated) { + starBgItem.setAlpha(stars ? 1f : 0f); + starBgItem.setScaleX(stars ? 1.1f : 0f); + starBgItem.setScaleY(stars ? 1.1f : 0f); + starFgItem.setAlpha(stars ? 1f : 0f); + starFgItem.setScaleX(stars ? 1f : 0f); + starFgItem.setScaleY(stars ? 1f : 0f); + } else { + starBgItem.animate().alpha(stars ? 1f : 0f).scaleX(stars ? 1.1f : 0f).scaleY(stars ? 1.1f : 0f).start(); + starFgItem.animate().alpha(stars ? 1f : 0f).scaleX(stars ? 1f : 0f).scaleY(stars ? 1f : 0f).start(); + } + } + private boolean rightDrawableIsScamOrVerified = false; private String rightDrawableContentDescription = null; private String rightDrawable2ContentDescription = null; @@ -979,6 +1023,8 @@ public void onAnimationEnd(Animator animation) { newStatus = LocaleController.getString("ServiceNotifications", R.string.ServiceNotifications); } else if (MessagesController.isSupportUser(user)) { newStatus = LocaleController.getString("SupportStatus", R.string.SupportStatus); + } else if (user.bot && user.bot_active_users != 0) { + newStatus = LocaleController.formatPluralStringComma("BotUsers", user.bot_active_users, ','); } else if (user.bot) { newStatus = LocaleController.getString("Bot", R.string.Bot); } else { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/CheckBoxBase.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/CheckBoxBase.java index 635a0c567d9..a81d0b67392 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/CheckBoxBase.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/CheckBoxBase.java @@ -64,6 +64,8 @@ public void setAlpha(float alpha) { private int backgroundColorKey = Theme.key_chat_serviceBackground; private int background2ColorKey = Theme.key_chat_serviceBackground; + private int backgroundColor; + private boolean useDefaultCheck; private boolean drawUnchecked = true; @@ -223,6 +225,11 @@ public void setColor(int background, int background2, int check) { invalidate(); } + public void setBackgroundColor(int backgroundColor) { + this.backgroundColor = backgroundColor; + invalidate(); + } + public void setBackgroundDrawable(Theme.MessageDrawable drawable) { messageDrawable = drawable; } @@ -309,6 +316,8 @@ public void draw(Canvas canvas) { } else { backgroundPaint.setColor(AndroidUtilities.getOffsetColor(0xffffffff, getThemedColor(checkColorKey), progress, backgroundAlpha)); } + } else if (backgroundColor != 0) { + backgroundPaint.setColor(0); } else { backgroundPaint.setColor(AndroidUtilities.getOffsetColor(0x00ffffff, getThemedColor(background2ColorKey >= 0 ? background2ColorKey : checkColorKey), progress, backgroundAlpha)); } @@ -385,7 +394,9 @@ public void draw(Canvas canvas) { paint.setColor(getThemedColor(background2ColorKey)); } else if (backgroundType == 11 || backgroundType == 6 || backgroundType == 7 || backgroundType == 10 || !drawUnchecked && backgroundColorKey >= 0 || backgroundType == 14) { paint.setColor(getThemedColor(backgroundColorKey)); - } else { + } else if (backgroundColor != 0) { + paint.setColor(backgroundColor); + } else { paint.setColor(getThemedColor(enabled ? Theme.key_checkbox : Theme.key_checkboxDisabled)); } if (forbidden) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/CombinedDrawable.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/CombinedDrawable.java index f54d5ed23c8..351f0b81f77 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/CombinedDrawable.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/CombinedDrawable.java @@ -32,6 +32,8 @@ public class CombinedDrawable extends Drawable implements Drawable.Callback { private boolean fullSize; private boolean both; + public float translateX, translateY; + public CombinedDrawable(Drawable backgroundDrawable, Drawable iconDrawable, int leftOffset, int topOffset) { background = backgroundDrawable; icon = iconDrawable; @@ -141,6 +143,8 @@ public ConstantState getConstantState() { @Override public void draw(Canvas canvas) { + canvas.save(); + canvas.translate(translateX, translateY); if (center) { Rect bounds = getBounds(); setBounds( @@ -177,6 +181,7 @@ public void draw(Canvas canvas) { } icon.draw(canvas); } + canvas.restore(); } @Override diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/DialogsBotsAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/DialogsBotsAdapter.java new file mode 100644 index 00000000000..9a93c53d611 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/DialogsBotsAdapter.java @@ -0,0 +1,400 @@ +package org.telegram.ui.Components; + +import static org.telegram.messenger.LocaleController.getString; + +import android.content.Context; +import android.text.TextUtils; +import android.view.View; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.DialogObject; +import org.telegram.messenger.MediaDataController; +import org.telegram.messenger.MessageObject; +import org.telegram.messenger.MessagesController; +import org.telegram.messenger.MessagesStorage; +import org.telegram.messenger.R; +import org.telegram.tgnet.ConnectionsManager; +import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; +import org.telegram.ui.ActionBar.Theme; + +import java.util.ArrayList; +import java.util.HashSet; + +public class DialogsBotsAdapter extends UniversalAdapter { + + private final Context context; + private final int currentAccount; + private final int folderId; + private final boolean showOnlyPopular; + private final Theme.ResourcesProvider resourcesProvider; + + private String popularBotsNextOffset; + private boolean popularBotsLoaded, popularBotsLoading; + public final ArrayList<TLRPC.User> popularBots = new ArrayList<>(); + + public final ArrayList<TLRPC.User> searchMine = new ArrayList<>(); + public final ArrayList<TLRPC.User> searchGlobal = new ArrayList<>(); + public final ArrayList<MessageObject> searchMessages = new ArrayList<>(); + + public boolean expandedMyBots; + public boolean expandedSearchBots; + + public DialogsBotsAdapter(RecyclerListView listView, Context context, int currentAccount, int folderId, boolean showOnlyPopular, Theme.ResourcesProvider resourcesProvider) { + super(listView, context, currentAccount, 0, null, resourcesProvider); + super.fillItems = this::fillItems; + this.context = context; + this.currentAccount = currentAccount; + this.folderId = folderId; + this.resourcesProvider = resourcesProvider; + this.showOnlyPopular = showOnlyPopular; + update(false); + MediaDataController.getInstance(currentAccount).loadHints(true); + loadPopularBots(); + } + + private int topPeersStart, topPeersEnd; + public void fillItems(ArrayList<UItem> items, UniversalAdapter adapter) { + HashSet<Long> uids = new HashSet<>(); + + if (!TextUtils.isEmpty(query)) { + ArrayList<TLRPC.User> foundChannels = new ArrayList<>(); + foundChannels.addAll(searchMine); + foundChannels.addAll(searchGlobal); + if (!foundChannels.isEmpty()) { + if (foundChannels.size() > 5 && (!searchMessages.isEmpty() && !showOnlyPopular)) { + items.add(UItem.asGraySection(getString(R.string.SearchApps), getString(expandedSearchBots ? R.string.ShowLess : R.string.ShowMore), this::toggleExpandedSearchBots)); + } else { + items.add(UItem.asGraySection(getString(R.string.SearchApps))); + } + int count = foundChannels.size(); + if (!expandedSearchBots && (!searchMessages.isEmpty() && !showOnlyPopular)) + count = Math.min(5, count); + for (int i = 0; i < count; ++i) { + items.add(UItem.asProfileCell(foundChannels.get(i))); + } + } + if (!searchMessages.isEmpty() && !showOnlyPopular) { + items.add(UItem.asGraySection(getString(R.string.SearchMessages))); + for (MessageObject message : searchMessages) { + items.add(UItem.asSearchMessage(message)); + } + if (hasMore) { + items.add(UItem.asFlicker(FlickerLoadingView.DIALOG_TYPE)); + } + } + } else { + ArrayList<TLRPC.TL_topPeer> top_peers = MediaDataController.getInstance(currentAccount).webapps; + ArrayList<TLRPC.User> top_peers_bots = new ArrayList<>(); + if (top_peers != null) { + for (int i = 0; i < top_peers.size(); ++i) { + TLRPC.TL_topPeer peer = top_peers.get(i); + long dialogId = DialogObject.getPeerDialogId(peer.peer); + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(dialogId); + if (user == null || !user.bot) continue; + top_peers_bots.add(user); + } + } + topPeersStart = items.size(); + if (!top_peers_bots.isEmpty() && !showOnlyPopular) { + if (top_peers_bots.size() > 5) { + items.add(UItem.asGraySection(getString(R.string.SearchAppsMine), getString(expandedMyBots ? R.string.ShowLess : R.string.ShowMore), this::toggleExpandedMyBots)); + } else { + items.add(UItem.asGraySection(getString(R.string.SearchAppsMine))); + } + for (int i = 0; i < top_peers_bots.size(); ++i) { + if (i >= 5 && !expandedMyBots) break; + final TLRPC.User user = top_peers_bots.get(i); + if (uids.contains(user.id)) continue; + uids.add(user.id); + items.add(UItem.asProfileCell(user).accent()); + } + } + topPeersEnd = items.size(); + if (!popularBots.isEmpty()) { + if (!showOnlyPopular) items.add(UItem.asGraySection(getString(R.string.SearchAppsPopular))); + for (int i = 0; i < popularBots.size(); ++i) { + final TLRPC.User user = popularBots.get(i); + if (uids.contains(user.id)) continue; + uids.add(user.id); + items.add(UItem.asProfileCell(user).accent()); + } + if (popularBotsNextOffset != null || popularBotsLoading) { + items.add(UItem.asFlicker(FlickerLoadingView.PROFILE_SEARCH_CELL)); + items.add(UItem.asFlicker(FlickerLoadingView.PROFILE_SEARCH_CELL)); + items.add(UItem.asFlicker(FlickerLoadingView.PROFILE_SEARCH_CELL)); + } + } else if (popularBotsNextOffset != null || popularBotsLoading) { + if (!showOnlyPopular) items.add(UItem.asFlicker(FlickerLoadingView.GRAY_SECTION)); + items.add(UItem.asFlicker(FlickerLoadingView.PROFILE_SEARCH_CELL)); + items.add(UItem.asFlicker(FlickerLoadingView.PROFILE_SEARCH_CELL)); + items.add(UItem.asFlicker(FlickerLoadingView.PROFILE_SEARCH_CELL)); + items.add(UItem.asFlicker(FlickerLoadingView.PROFILE_SEARCH_CELL)); + } + } + } + + private void toggleExpandedMyBots(View view) { + expandedMyBots = !expandedMyBots; + update(true); + } + + private void toggleExpandedSearchBots(View view) { + expandedSearchBots = !expandedSearchBots; + update(true); + } + + + protected void hideKeyboard() { + + } + + public Object getTopPeerObject(int position) { + if (position < topPeersStart || position >= topPeersEnd) { + return false; + } + return getObject(position); + } + + public Object getObject(int position) { + UItem item = getItem(position); + return item != null ? item.object : null; + } + + public boolean loadingMessages; + public boolean loadingBots; + + private boolean hasMore; + private int allCount; + private int nextRate; + private int searchBotsId; + public String query; + private void searchMessages(boolean next) { + loadingMessages = true; + final int searchId = ++searchBotsId; + TLRPC.TL_messages_searchGlobal req = new TLRPC.TL_messages_searchGlobal(); + req.broadcasts_only = false; + if (folderId != 0) { + req.flags |= 1; + req.folder_id = folderId; + } + req.q = this.query; + req.limit = 25; + req.filter = new TLRPC.TL_inputMessagesFilterEmpty(); + if (next && !searchMessages.isEmpty()) { + MessageObject lastMessage = searchMessages.get(searchMessages.size() - 1); + req.offset_rate = nextRate; + req.offset_id = lastMessage.getId(); + if (lastMessage.messageOwner.peer_id == null) { + req.offset_peer = new TLRPC.TL_inputPeerEmpty(); + } else { + req.offset_peer = MessagesController.getInstance(currentAccount).getInputPeer(lastMessage.messageOwner.peer_id); + } + } else { + req.offset_rate = 0; + req.offset_id = 0; + req.offset_peer = new TLRPC.TL_inputPeerEmpty(); + } + AndroidUtilities.runOnUIThread(() -> { + if (searchId != searchBotsId || !TextUtils.equals(req.q, this.query)) return; + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + if (searchId != searchBotsId || !TextUtils.equals(req.q, this.query)) return; + loadingMessages = false; + if (!next) { + searchMessages.clear(); + } + if (res instanceof TLRPC.messages_Messages) { + TLRPC.messages_Messages response = (TLRPC.messages_Messages) res; + MessagesStorage.getInstance(currentAccount).putUsersAndChats(response.users, response.chats, true, true); + MessagesController.getInstance(currentAccount).putUsers(response.users, false); + MessagesController.getInstance(currentAccount).putChats(response.chats, false); + + for (TLRPC.Message message : response.messages) { + MessageObject messageObject = new MessageObject(currentAccount, message, false, true); + messageObject.setQuery(query); + searchMessages.add(messageObject); + } + + hasMore = response instanceof TLRPC.TL_messages_messagesSlice; + allCount = Math.max(searchMessages.size(), response.count); + nextRate = response.next_rate; + } + update(true); + })); + }, next ? 800 : 0); + + if (!next) { + loadingBots = true; + TLRPC.TL_contacts_search req2 = new TLRPC.TL_contacts_search(); + req2.limit = 30; + req2.q = this.query; + ConnectionsManager.getInstance(currentAccount).sendRequest(req2, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + if (!TextUtils.equals(req2.q, this.query) || TextUtils.isEmpty(this.query)) return; + + loadingBots = false; + TLRPC.TL_contacts_found response = null; + if (res instanceof TLRPC.TL_contacts_found) { + response = (TLRPC.TL_contacts_found) res; + MessagesStorage.getInstance(currentAccount).putUsersAndChats(response.users, response.chats, true, true); + MessagesController.getInstance(currentAccount).putUsers(response.users, false); + MessagesController.getInstance(currentAccount).putChats(response.chats, false); + } + + HashSet<Long> userIds = new HashSet<>(); + + searchMine.clear(); + if (response != null) { + for (TLRPC.Peer peer : response.my_results) { + if (!(peer instanceof TLRPC.TL_peerUser)) continue; + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(peer.user_id); + if (user == null || !user.bot) continue; + if (userIds.contains(user.id)) + continue; + userIds.add(user.id); + searchMine.add(user); + } + } + +// searchRecommendedChannels.clear(); +// String q = this.query.toLowerCase(), qT = AndroidUtilities.translitSafe(q); +// MessagesController.ChannelRecommendations recommendations = MessagesController.getInstance(currentAccount).getCachedChannelRecommendations(0); +// if (recommendations != null && !recommendations.chats.isEmpty()) { +// for (TLRPC.Chat chat : recommendations.chats) { +// if (chat == null) +// continue; +// if (!ChatObject.isChannelAndNotMegaGroup(chat)) +// continue; +// TLRPC.Chat localChat = MessagesController.getInstance(currentAccount).getChat(chat.id); +// if (!(ChatObject.isNotInChat(chat) && (localChat == null || ChatObject.isNotInChat(localChat)))) +// continue; +// String t = chat.title.toLowerCase(), tT = AndroidUtilities.translitSafe(t); +// if ( +// t.startsWith(q) || t.contains(" " + q) || +// tT.startsWith(qT) || tT.contains(" " + qT) +// ) { +// if (chatIds.contains(chat.id)) +// continue; +// chatIds.add(chat.id); +// searchRecommendedChannels.add(chat); +// } +// } +// } + + searchGlobal.clear(); + if (response != null) { + for (TLRPC.Peer peer : response.results) { + if (!(peer instanceof TLRPC.TL_peerUser)) continue; + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(peer.user_id); + if (user == null || !user.bot) continue; + if (userIds.contains(user.id)) + continue; + userIds.add(user.id); + searchGlobal.add(user); + } + } + + if (listView != null) { + listView.scrollToPosition(0); + } + update(true); + })); + } + } + + private Runnable searchMessagesRunnable = () -> searchMessages(false); + public void search(String query) { + if (TextUtils.equals(query, this.query)) return; + this.query = query; + AndroidUtilities.cancelRunOnUIThread(searchMessagesRunnable); + if (TextUtils.isEmpty(this.query)) { + searchMessages.clear(); + update(true); + searchBotsId++; + loadingMessages = false; + loadingBots = false; + hasMore = false; + nextRate = 0; + if (listView != null) { + listView.scrollToPosition(0); + } + return; + } + + searchMessages.clear(); + + AndroidUtilities.runOnUIThread(searchMessagesRunnable, 1000); + loadingMessages = true; + loadingBots = true; + + update(true); + + if (listView != null) { + listView.scrollToPosition(0); + } + } + + public void searchMore() { + if (!hasMore || loadingMessages || TextUtils.isEmpty(this.query)) { + return; + } + searchMessages(true); + } + + public void checkBottom() { + if (!TextUtils.isEmpty(this.query)) { + if (hasMore && !loadingMessages && seesLoading()) { + searchMore(); + } + } else { + if (!popularBotsLoading && !TextUtils.isEmpty(popularBotsNextOffset) && seesLoading()) { + loadPopularBots(); + } + } + } + + public boolean seesLoading() { + if (listView == null) return false; + for (int i = 0; i < listView.getChildCount(); ++i) { + View child = listView.getChildAt(i); + if (child instanceof FlickerLoadingView) { + return true; + } + } + return false; + } + + public boolean atTop() { + if (listView == null) return false; + for (int i = 0; i < listView.getChildCount(); ++i) { + View child = listView.getChildAt(i); + if (listView.getChildAdapterPosition(child) == 0) + return true; + } + return false; + } + + public void loadPopularBots() { + if (popularBotsLoading || popularBotsLoaded && popularBotsNextOffset == null) return; + + popularBotsLoading = true; + TL_bots.getPopularAppBots req = new TL_bots.getPopularAppBots(); + req.offset = popularBotsNextOffset == null ? "" : popularBotsNextOffset; + req.limit = 20; + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + popularBotsLoading = false; + popularBotsLoaded = true; + if (res instanceof TL_bots.popularAppBots) { + TL_bots.popularAppBots r = (TL_bots.popularAppBots) res; + MessagesController.getInstance(currentAccount).putUsers(r.users, false); + popularBots.addAll(r.users); + popularBotsNextOffset = r.next_offset; + } else { + popularBotsNextOffset = null; + } + update(true); + })); + } + + + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterTabsView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterTabsView.java index ec6475ac974..d9b6011e43d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterTabsView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterTabsView.java @@ -1352,23 +1352,25 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (!tabs.isEmpty()) { int width = MeasureSpec.getSize(widthMeasureSpec) - AndroidUtilities.dp(7) - AndroidUtilities.dp(7); Tab firstTab = findDefaultTab(); - firstTab.setTitle(LocaleController.getString("FilterAllChats", R.string.FilterAllChats)); - int tabWith = firstTab.getWidth(false); - firstTab.setTitle(allTabsWidth > width ? LocaleController.getString("FilterAllChatsShort", R.string.FilterAllChatsShort) : LocaleController.getString("FilterAllChats", R.string.FilterAllChats)); - int trueTabsWidth = allTabsWidth - tabWith; - trueTabsWidth += firstTab.getWidth(false); - int prevWidth = additionalTabWidth; - additionalTabWidth = trueTabsWidth < width ? (width - trueTabsWidth) / tabs.size() : 0; - if (prevWidth != additionalTabWidth) { - ignoreLayout = true; - RecyclerView.ItemAnimator animator = listView.getItemAnimator(); - listView.setItemAnimator(null); - adapter.notifyDataSetChanged(); - listView.setItemAnimator(animator); - ignoreLayout = false; + if (firstTab != null) { + firstTab.setTitle(LocaleController.getString(R.string.FilterAllChats)); + int tabWidth = firstTab.getWidth(false); + firstTab.setTitle(allTabsWidth > width ? LocaleController.getString("FilterAllChatsShort", R.string.FilterAllChatsShort) : LocaleController.getString("FilterAllChats", R.string.FilterAllChats)); + int trueTabsWidth = allTabsWidth - tabWidth; + trueTabsWidth += firstTab.getWidth(false); + int prevWidth = additionalTabWidth; + additionalTabWidth = trueTabsWidth < width ? (width - trueTabsWidth) / tabs.size() : 0; + if (prevWidth != additionalTabWidth) { + ignoreLayout = true; + RecyclerView.ItemAnimator animator = listView.getItemAnimator(); + listView.setItemAnimator(null); + adapter.notifyDataSetChanged(); + listView.setItemAnimator(animator); + ignoreLayout = false; + } + updateTabsWidths(); + invalidated = false; } - updateTabsWidths(); - invalidated = false; } super.onMeasure(widthMeasureSpec, heightMeasureSpec); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/FlickerLoadingView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/FlickerLoadingView.java index 94630d13bb1..87539e6f56a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/FlickerLoadingView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/FlickerLoadingView.java @@ -21,7 +21,7 @@ import java.util.Random; -public class FlickerLoadingView extends View { +public class FlickerLoadingView extends View implements Theme.Colorable { public final static int DIALOG_TYPE = 1; public final static int PHOTOS_TYPE = 2; @@ -53,6 +53,8 @@ public class FlickerLoadingView extends View { public static final int PROFILE_SEARCH_CELL = 29; public static final int GRAY_SECTION = 30; public static final int STAR_TIER = 31; + public static final int BROWSER_BOOKMARK = 32; + public static final int STAR_SUBSCRIPTION = 33; private int gradientWidth; private LinearGradient gradient; @@ -459,6 +461,26 @@ protected void onDraw(Canvas canvas) { checkRtl(rectF); canvas.drawRoundRect(rectF, dp(4), dp(4), paint); + h += getCellHeight(getMeasuredWidth()); + k++; + if (isSingleCell && k >= itemsCount) { + break; + } + } + } else if (getViewType() == STAR_SUBSCRIPTION) { + int k = 0; + while (h <= getMeasuredHeight()) { + int r = dp(23); + canvas.drawCircle(checkRtl(paddingLeft + dp(13) + r), h + (dp(58) >> 1), r, paint); + + rectF.set(paddingLeft + dp(13+46+13), h + dp(17), paddingLeft + dp(260), h + dp(25)); + checkRtl(rectF); + canvas.drawRoundRect(rectF, dp(4), dp(4), paint); + + rectF.set(paddingLeft + dp(13+46+13), h + dp(39), paddingLeft + dp(140), h + dp(47)); + checkRtl(rectF); + canvas.drawRoundRect(rectF, dp(4), dp(4), paint); + h += getCellHeight(getMeasuredWidth()); k++; if (isSingleCell && k >= itemsCount) { @@ -799,6 +821,29 @@ protected void onDraw(Canvas canvas) { checkRtl(rectF); canvas.drawRoundRect(rectF, dp(4), dp(4), paint); + h += cellHeight; + k++; + if (isSingleCell && k >= itemsCount) { + break; + } + } + } else if (getViewType() == BROWSER_BOOKMARK) { + int k = 0; + while (h <= getMeasuredHeight()) { + int cellHeight = getCellHeight(getMeasuredWidth()); + + rectF.set(paddingLeft + dp(10), h + (cellHeight - dp(32)) / 2f, paddingLeft + dp(10 + 32), h + (cellHeight + dp(32)) / 2f); + checkRtl(rectF); + canvas.drawRoundRect(rectF, dp(6), dp(6), paint); + + rectF.set(paddingLeft + dp(64), h + (cellHeight - dp(14) - dp(10)) / 2f, Math.min(paddingLeft + dp(64 + 54), getMeasuredWidth() - dp(19)), h + (cellHeight - dp(14) + dp(10)) / 2f); + checkRtl(rectF); + canvas.drawRoundRect(rectF, dp(4), dp(4), paint); + + rectF.set(paddingLeft + dp(64), h + (cellHeight + dp(14) - dp(8)) / 2f, Math.min(paddingLeft + dp(64 + 80), getMeasuredWidth() - dp(19)), h + (cellHeight + dp(14) + dp(8)) / 2f); + checkRtl(rectF); + canvas.drawRoundRect(rectF, dp(4), dp(4), paint); + h += cellHeight; k++; if (isSingleCell && k >= itemsCount) { @@ -849,6 +894,7 @@ public void updateGradient() { } } + @Override public void updateColors() { if (globalGradientView != null) { globalGradientView.updateColors(); @@ -930,10 +976,14 @@ private int getCellHeight(int width) { return dp(58); case PROFILE_SEARCH_CELL: return dp(60) + 1; + case STAR_SUBSCRIPTION: + return dp(58); case GRAY_SECTION: return dp(32); case STAR_TIER: return dp(48) + 1; + case BROWSER_BOOKMARK: + return dp(56) + 1; } return 0; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/InstantCameraView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/InstantCameraView.java index 5b64c652738..a9e9539439f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/InstantCameraView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/InstantCameraView.java @@ -8,6 +8,8 @@ package org.telegram.ui.Components; +import static org.telegram.messenger.AndroidUtilities.dp; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; @@ -23,6 +25,7 @@ import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.ColorSpace; import android.graphics.ImageFormat; import android.graphics.Outline; import android.graphics.Paint; @@ -101,6 +104,7 @@ import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Components.voip.CellFlickerDrawable; import org.telegram.ui.Stories.recorder.DualCameraView; +import org.telegram.ui.Stories.recorder.FlashViews; import org.telegram.ui.Stories.recorder.StoryEntry; import java.io.File; @@ -134,8 +138,11 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter private Delegate delegate; private Paint paint; private RectF rect; - private ImageView switchCameraButton; - AnimatedVectorDrawable switchCameraDrawable = null; + private final FlashViews.ImageViewInvertable switchCameraButton; + private final FlashViews.ImageViewInvertable flashButton; + private final FlashViews flashViews; + private RLottieDrawable flashOnDrawable, flashOffDrawable; + private RLottieDrawable switchCameraDrawable; private ImageView muteImageView; private float progress; private CameraInfo selectedCamera; @@ -276,11 +283,15 @@ public void setAlpha(int a) { }; paint.setStyle(Paint.Style.STROKE); paint.setStrokeCap(Paint.Cap.ROUND); - paint.setStrokeWidth(AndroidUtilities.dp(3)); + paint.setStrokeWidth(dp(3)); paint.setColor(0xffffffff); rect = new RectF(); + flashViews = new FlashViews(getContext(), null, this, null); + flashViews.setWarmth(.5f); + addView(flashViews.backgroundView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL)); + if (Build.VERSION.SDK_INT >= 21) { cameraContainer = new InstantViewCameraContainer(context) { @Override @@ -339,10 +350,11 @@ protected void dispatchDraw(Canvas canvas) { } addView(cameraContainer, new LayoutParams(AndroidUtilities.roundPlayingMessageSize, AndroidUtilities.roundPlayingMessageSize, Gravity.CENTER)); + addView(flashViews.foregroundView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL)); - switchCameraButton = new ImageView(context); + switchCameraButton = new FlashViews.ImageViewInvertable(context); switchCameraButton.setScaleType(ImageView.ScaleType.CENTER); - switchCameraButton.setContentDescription(LocaleController.getString("AccDescrSwitchCamera", R.string.AccDescrSwitchCamera)); + switchCameraButton.setContentDescription(LocaleController.getString(R.string.AccDescrSwitchCamera)); addView(switchCameraButton, LayoutHelper.createFrame(62, 62, Gravity.LEFT | Gravity.BOTTOM, 8, 0, 0, 0)); switchCameraButton.setOnClickListener(v -> { if (!cameraReady || !isCameraSessionInitiated() || cameraThread == null) { @@ -352,6 +364,7 @@ protected void dispatchDraw(Canvas canvas) { switchCamera(); } if (switchCameraDrawable != null) { + switchCameraDrawable.setCurrentFrame(0); switchCameraDrawable.start(); } flipAnimationInProgress = true; @@ -397,6 +410,18 @@ public void onAnimationEnd(Animator animation) { valueAnimator.start(); }); + flashButton = new FlashViews.ImageViewInvertable(context); + flashButton.setScaleType(ImageView.ScaleType.CENTER); + addView(flashButton, LayoutHelper.createFrame(62, 62, Gravity.LEFT | Gravity.BOTTOM, 62 - 4, 0, 0, 0)); + flashButton.setOnClickListener(v -> { + flashing = !flashing; + updateFlash(); + }); + updateFlash(); + + flashViews.add(switchCameraButton); + flashViews.add(flashButton); + muteImageView = new ImageView(context); muteImageView.setScaleType(ImageView.ScaleType.CENTER); muteImageView.setImageResource(R.drawable.video_mute); @@ -417,7 +442,7 @@ protected void onDraw(Canvas canvas) { AndroidUtilities.rectTmp.set(0, 0, textureViewSize, textureViewSize); float rad = AndroidUtilities.rectTmp.width() / 2f; canvas.drawRoundRect(AndroidUtilities.rectTmp, rad, rad, blackoutPaint); - AndroidUtilities.rectTmp.inset(AndroidUtilities.dp(1), AndroidUtilities.dp(1)); + AndroidUtilities.rectTmp.inset(dp(1), dp(1)); flickerDrawable.draw(canvas, AndroidUtilities.rectTmp, rad, null); invalidate(); } @@ -430,6 +455,66 @@ protected void onDraw(Canvas canvas) { blurBehindDrawable = new BlurBehindDrawable(parentView, this, 0, resourcesProvider); } + private Boolean wasFlashing; + private boolean flashing; + private boolean frontFlashing; + private void updateFlash() { + final boolean shouldFrontFlash = flashing && recording && isFrontface; + if (frontFlashing != shouldFrontFlash) { + if (frontFlashing = shouldFrontFlash) { + flashViews.flashIn(null); + } else { + flashViews.flashOut(); + } + } + + if (useCamera2) { + if (camera2Sessions[1] != null) { + camera2Sessions[1].setFlash(flashing && !isFrontface && recording); + } + } else { + if (cameraSession != null) { +// final String mode = ( +// (flashing && !isFrontface && recording) ? +// (cameraSession.availableFlashModes != null && cameraSession.availableFlashModes.contains(Camera.Parameters.FLASH_MODE_TORCH) ? Camera.Parameters.FLASH_MODE_TORCH : Camera.Parameters.FLASH_MODE_ON) : +// Camera.Parameters.FLASH_MODE_OFF +// ); +// cameraSession.setCurrentFlashMode(mode); + cameraSession.setTorchEnabled(flashing && !isFrontface && recording); + } + } + + if (flashButton != null && (wasFlashing == null || wasFlashing != flashing)) { + flashButton.setContentDescription(LocaleController.getString(flashing ? R.string.AccDescrCameraFlashOff : R.string.AccDescrCameraFlashOn)); + if (!flashing) { + if (flashOnDrawable == null) { + flashOnDrawable = new RLottieDrawable(R.raw.roundcamera_flash_on, "roundcamera_flash_on", dp(28), dp(28)); + flashOnDrawable.setCallback(flashButton); + } + flashButton.setImageDrawable(flashOnDrawable); + if (wasFlashing == null) { + flashOnDrawable.setCurrentFrame(flashOnDrawable.getFramesCount() - 1); + } else { + flashOnDrawable.setCurrentFrame(0); + flashOnDrawable.start(); + } + } else { + if (flashOffDrawable == null) { + flashOffDrawable = new RLottieDrawable(R.raw.roundcamera_flash_off, "roundcamera_flash_off", dp(28), dp(28)); + flashOffDrawable.setCallback(flashButton); + } + flashButton.setImageDrawable(flashOffDrawable); + if (wasFlashing == null) { + flashOffDrawable.setCurrentFrame(flashOffDrawable.getFramesCount() - 1); + } else { + flashOffDrawable.setCurrentFrame(0); + flashOffDrawable.start(); + } + } + wasFlashing = flashing; + } + } + @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (updateTextureViewSize) { @@ -443,7 +528,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { textureViewSize = newSize; textureOverlayView.getLayoutParams().width = textureOverlayView.getLayoutParams().height = textureViewSize; cameraContainer.getLayoutParams().width = cameraContainer.getLayoutParams().height = textureViewSize; - ((LayoutParams) muteImageView.getLayoutParams()).topMargin = textureViewSize / 2 - AndroidUtilities.dp(24); + ((LayoutParams) muteImageView.getLayoutParams()).topMargin = textureViewSize / 2 - dp(24); textureOverlayView.setRoundRadius(textureViewSize / 2); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { cameraContainer.invalidateOutline(); @@ -494,6 +579,9 @@ protected void onAttachedToWindow() { protected void onDetachedFromWindow() { super.onDetachedFromWindow(); NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.fileUploaded); + if (flashViews != null) { + flashViews.flashOut(); + } } @Override @@ -543,7 +631,7 @@ protected void onDraw(Canvas canvas) { float x = cameraContainer.getX(); float y = cameraContainer.getY(); - rect.set(x - AndroidUtilities.dp(8), y - AndroidUtilities.dp(8), x + cameraContainer.getMeasuredWidth() + AndroidUtilities.dp(8), y + cameraContainer.getMeasuredHeight() + AndroidUtilities.dp(8)); + rect.set(x - dp(8), y - dp(8), x + cameraContainer.getMeasuredWidth() + dp(8), y + cameraContainer.getMeasuredHeight() + dp(8)); if (recording) { recordedTime = System.currentTimeMillis() - recordStartTime + recordPlusTime; progress = Math.min(1f, recordedTime / 60000.0f); @@ -568,6 +656,7 @@ public void setVisibility(int visibility) { blurBehindDrawable.clear(); } switchCameraButton.setAlpha(0.0f); + flashButton.setAlpha(0.0f); cameraContainer.setAlpha(0.0f); textureOverlayView.setAlpha(0.0f); muteImageView.setAlpha(0.0f); @@ -598,6 +687,7 @@ public void togglePause() { if (recording) { cancelled = recordedTime < 800; recording = false; + updateFlash(); if (cameraThread != null) { NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.recordStopped, recordingGuid, cancelled ? 4 : 2); saveLastCameraBitmap(); @@ -633,13 +723,12 @@ public void showCamera(boolean fromPaused) { return; } - - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { - switchCameraDrawable = (AnimatedVectorDrawable) ContextCompat.getDrawable(getContext(), R.drawable.avd_flip); - switchCameraButton.setImageDrawable(switchCameraDrawable); - } else { - switchCameraButton.setImageResource(R.drawable.vd_flip); + if (switchCameraDrawable == null) { + switchCameraDrawable = new RLottieDrawable(R.raw.roundcamera_flip, "roundcamera_flip", dp(28), dp(28)); + switchCameraDrawable.setCurrentFrame(0); + switchCameraDrawable.setCallback(switchCameraButton); } + switchCameraButton.setImageDrawable(switchCameraDrawable); textureOverlayView.setAlpha(1.0f); textureOverlayView.invalidate(); @@ -659,7 +748,10 @@ public void showCamera(boolean fromPaused) { cameraReady = false; selectedCamera = null; if (!fromPaused) { - isFrontface = true; + if (!useCamera2) { + isFrontface = true; + } + updateFlash(); recordedTime = 0; progress = 0; } @@ -712,6 +804,7 @@ public boolean delete() { } } } + updateFlash(); camera2SessionCurrent = camera2Sessions[isFrontface ? 0 : 1]; if (camera2SessionCurrent != null && camera2Sessions[isFrontface ? 1 : 0] == null) { bothCameras = false; @@ -815,7 +908,7 @@ public void startAnimation(boolean open, boolean fromPaused) { animatorSet = new AnimatorSet(); float toX = 0; if (!open) { - toX = recordedTime > 300 ? AndroidUtilities.dp(24) - getMeasuredWidth() / 2f : 0; + toX = recordedTime > 300 ? dp(24) - getMeasuredWidth() / 2f : 0; } ValueAnimator translationYAnimator = ValueAnimator.ofFloat(open ? 1f : 0f, open ? 0 : 1f); translationYAnimator.addUpdateListener(animation -> { @@ -824,6 +917,7 @@ public void startAnimation(boolean open, boolean fromPaused) { }); animatorSet.playTogether( ObjectAnimator.ofFloat(switchCameraButton, View.ALPHA, open ? 1.0f : 0.0f), + ObjectAnimator.ofFloat(flashButton, View.ALPHA, open ? 1.0f : 0.0f), ObjectAnimator.ofFloat(muteImageView, View.ALPHA, 0.0f), ObjectAnimator.ofInt(paint, AnimationProperties.PAINT_ALPHA, open ? 255 : 0), ObjectAnimator.ofFloat(cameraContainer, View.ALPHA, open ? 1.0f : 0.0f), @@ -933,6 +1027,8 @@ public void send(int state, boolean notify, int scheduleDate, int ttl, long effe } else { cancelled = recordedTime < 800; recording = false; + flashing = false; + updateFlash(); int reason; if (cancelled) { reason = 4; @@ -990,6 +1086,8 @@ public void cancel(boolean byGesture) { } cancelled = true; recording = false; + flashing = false; + updateFlash(); NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.recordStopped, recordingGuid, byGesture ? 0 : 6); if (cameraThread != null) { saveLastCameraBitmap(); @@ -1016,6 +1114,10 @@ public View getSwitchButtonView() { return switchCameraButton; } + public View getFlashButtonView() { + return flashButton; + } + public View getMuteImageView() { return muteImageView; } @@ -1052,6 +1154,7 @@ private void switchCamera() { } } isFrontface = !isFrontface; + updateFlash(); if (useCamera2) { if (bothCameras) { camera2SessionCurrent = camera2Sessions[isFrontface ? 0 : 1]; @@ -1257,9 +1360,12 @@ private void createCamera(final int index, final SurfaceTexture surfaceTexture) if (index == 1) return; surfaceTexture.setDefaultBufferSize(previewSize[0].getWidth(), previewSize[0].getHeight()); cameraSession = new CameraSession(selectedCamera, previewSize[0], pictureSize, ImageFormat.JPEG, true); + updateFlash(); cameraThread.setCurrentSession(cameraSession); CameraController.getInstance().openRound(cameraSession, surfaceTexture, () -> { if (cameraSession != null) { + updateFlash(); + boolean updateScale = false; try { Camera.Size size = cameraSession.getCurrentPreviewSize(); @@ -1747,6 +1853,7 @@ private void onDraw(Integer cameraId, boolean updateTexImage1, boolean updateTex scaleY = temp; } recording = true; + updateFlash(); } if (videoEncoder != null && (surfaceIndex == 0 && updateTexImage1 || surfaceIndex == 1 && updateTexImage2)) { @@ -2618,7 +2725,7 @@ public void run() { final TextureView textureView = InstantCameraView.this.textureView; if (textureView != null) { try { - final Bitmap bitmap = textureView.getBitmap(AndroidUtilities.dp(56), AndroidUtilities.dp(56)); + final Bitmap bitmap = textureView.getBitmap(dp(56), dp(56)); AndroidUtilities.runOnUIThread(() -> { if ((bitmap == null || bitmap.getPixel(0, 0) == 0) && keyframeThumbs.size() > 1) { keyframeThumbs.add(keyframeThumbs.get(keyframeThumbs.size() - 1)); @@ -2763,6 +2870,7 @@ public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) { AnimatorSet animatorSet = new AnimatorSet(); animatorSet.playTogether( ObjectAnimator.ofFloat(switchCameraButton, View.ALPHA, 0.0f), + ObjectAnimator.ofFloat(flashButton, View.ALPHA, 0.0f), ObjectAnimator.ofInt(paint, AnimationProperties.PAINT_ALPHA, 0), ObjectAnimator.ofFloat(muteImageView, View.ALPHA, 1.0f)); animatorSet.setDuration(180); @@ -3159,6 +3267,7 @@ private void prepareEncoder(boolean fromPause) { recordPlusTime = fromPause ? recordedTime : 0; recordStartTime = System.currentTimeMillis(); recording = true; + updateFlash(); invalidate(); NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.recordStarted, recordingGuid, false); }); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/InviteLinkBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/InviteLinkBottomSheet.java index aaf299382c3..92447ca8846 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/InviteLinkBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/InviteLinkBottomSheet.java @@ -1,52 +1,79 @@ package org.telegram.ui.Components; +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.LocaleController.formatString; +import static org.telegram.messenger.LocaleController.getString; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.content.Context; import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; import android.graphics.RectF; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; import android.text.SpannableStringBuilder; +import android.text.Spanned; +import android.text.TextPaint; import android.text.TextUtils; +import android.text.style.ClickableSpan; import android.util.TypedValue; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import org.checkerframework.checker.units.qual.A; import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.BillingController; +import org.telegram.messenger.DialogObject; import org.telegram.messenger.Emoji; import org.telegram.messenger.LocaleController; import org.telegram.messenger.MessagesController; import org.telegram.messenger.MessagesStorage; import org.telegram.messenger.R; import org.telegram.messenger.UserConfig; +import org.telegram.messenger.UserObject; +import org.telegram.messenger.browser.Browser; import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.BottomSheet; import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.AvatarSpan; +import org.telegram.ui.Cells.GraySectionCell; import org.telegram.ui.Cells.HeaderCell; import org.telegram.ui.Cells.ShadowSectionCell; import org.telegram.ui.Cells.TextInfoPrivacyCell; import org.telegram.ui.Cells.UserCell; +import org.telegram.ui.ChatActivity; +import org.telegram.ui.LaunchActivity; import org.telegram.ui.LinkEditActivity; import org.telegram.ui.ManageLinksActivity; import org.telegram.ui.ProfileActivity; +import org.telegram.ui.Stars.StarsController; +import org.telegram.ui.Stars.StarsIntroActivity; +import org.telegram.ui.Stories.recorder.ButtonWithCounterView; +import org.telegram.ui.Stories.recorder.HintView2; import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -57,6 +84,8 @@ public class InviteLinkBottomSheet extends BottomSheet { HashMap<Long, TLRPC.User> users; TLRPC.ChatFull info; + int revenueHeaderRow; + int revenueRow; int creatorHeaderRow; int creatorRow; int dividerRow; @@ -65,6 +94,9 @@ public class InviteLinkBottomSheet extends BottomSheet { int joinedHeaderRow; int joinedStartRow; int joinedEndRow; + int expiredHeaderRow; + int expiredStartRow; + int expiredEndRow; int linkActionRow; int linkInfoRow; int loadingRow; @@ -94,6 +126,7 @@ public class InviteLinkBottomSheet extends BottomSheet { private boolean titleVisible; ArrayList<TLRPC.TL_chatInviteImporter> joinedUsers = new ArrayList<>(); + ArrayList<TLRPC.TL_chatInviteImporter> expiredUsers = new ArrayList<>(); ArrayList<TLRPC.TL_chatInviteImporter> requestedUsers = new ArrayList<>(); private long chatId; @@ -169,8 +202,8 @@ public void requestLayout() { @Override protected void onDraw(Canvas canvas) { - int top = scrollOffsetY - backgroundPaddingTop - AndroidUtilities.dp(8); - int height = getMeasuredHeight() + AndroidUtilities.dp(36) + backgroundPaddingTop; + int top = scrollOffsetY - backgroundPaddingTop - dp(8); + int height = getMeasuredHeight() + dp(36) + backgroundPaddingTop; int statusBarHeight = 0; float radProgress = 1.0f; if (Build.VERSION.SDK_INT >= 21) { @@ -195,8 +228,8 @@ protected void onDraw(Canvas canvas) { if (radProgress != 1.0f) { Theme.dialogs_onlineCirclePaint.setColor(Theme.getColor(Theme.key_dialogBackground)); - rect.set(backgroundPaddingLeft, backgroundPaddingTop + top, getMeasuredWidth() - backgroundPaddingLeft, backgroundPaddingTop + top + AndroidUtilities.dp(24)); - canvas.drawRoundRect(rect, AndroidUtilities.dp(12) * radProgress, AndroidUtilities.dp(12) * radProgress, Theme.dialogs_onlineCirclePaint); + rect.set(backgroundPaddingLeft, backgroundPaddingTop + top, getMeasuredWidth() - backgroundPaddingLeft, backgroundPaddingTop + top + dp(24)); + canvas.drawRoundRect(rect, dp(12) * radProgress, dp(12) * radProgress, Theme.dialogs_onlineCirclePaint); } if (statusBarHeight > 0) { @@ -220,7 +253,7 @@ private void updateLightStatusBar(boolean open) { containerView.setWillNotDraw(false); FrameLayout.LayoutParams frameLayoutParams = new FrameLayout.LayoutParams(LayoutHelper.MATCH_PARENT, AndroidUtilities.getShadowHeight(), Gravity.TOP | Gravity.LEFT); - frameLayoutParams.topMargin = AndroidUtilities.dp(48); + frameLayoutParams.topMargin = dp(48); shadow = new View(context); shadow.setAlpha(0.0f); shadow.setVisibility(View.INVISIBLE); @@ -251,7 +284,7 @@ protected void onMeasure(int widthSpec, int heightSpec) { int contentSize = getMeasuredHeight(); int padding = (int) (lastH / 5f * 2f); - if (padding < lastH - contentSize + AndroidUtilities.dp(60)) { + if (padding < lastH - contentSize + dp(60)) { padding = lastH - contentSize; } ignoreLayout = true; @@ -288,25 +321,67 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) { return; } boolean isJoinedUserRow = position >= joinedStartRow && position < joinedEndRow; + boolean isExpiredUserRow = position >= expiredStartRow && position < expiredEndRow; boolean isRequestedUserRow = position >= requestedStartRow && position < requestedEndRow; if ((position == creatorRow || isJoinedUserRow || isRequestedUserRow) && users != null) { long userId = invite.admin_id; + TLRPC.TL_chatInviteImporter importer = null; if (isJoinedUserRow) { - userId = joinedUsers.get(position - joinedStartRow).user_id; + importer = joinedUsers.get(position - joinedStartRow); + userId = importer.user_id; + } else if (isExpiredUserRow) { + importer = expiredUsers.get(position - expiredStartRow); + userId = importer.user_id; } else if (isRequestedUserRow) { - userId = requestedUsers.get(position - requestedStartRow).user_id; + importer = requestedUsers.get(position - requestedStartRow); + userId = importer.user_id; } TLRPC.User user = users.get(userId); if (user != null) { MessagesController.getInstance(UserConfig.selectedAccount).putUser(user, false); - AndroidUtilities.runOnUIThread(() -> { - Bundle bundle = new Bundle(); - bundle.putLong("user_id", user.id); - ProfileActivity profileActivity = new ProfileActivity(bundle); - fragment.presentFragment(profileActivity); - isNeedReopen = true; - }, 100); - dismiss(); + if (isJoinedUserRow && invite.subscription_pricing != null) { + TLRPC.ChannelParticipant part = null; + if (info != null && info.participants != null) { + for (int i = 0; i < info.participants.participants.size(); i++) { + if (info.participants.participants.get(i).user_id == userId && info.participants.participants.get(i) instanceof TLRPC.TL_chatChannelParticipant) { + part = ((TLRPC.TL_chatChannelParticipant) info.participants.participants.get(i)).channelParticipant; + break; + } + } + } + if (part == null) { + AlertDialog progressDialog = new AlertDialog(context, AlertDialog.ALERT_TYPE_SPINNER); + progressDialog.showDelayed(120); + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(chatId); + final TLRPC.TL_chatInviteImporter finalImporter = importer; + MessagesController.getInstance(currentAccount).getChannelParticipant(chat, user, participant -> AndroidUtilities.runOnUIThread(() -> { + progressDialog.dismissUnless(400); +// if (participant != null) { + showSubscriptionSheet(context, currentAccount, -chatId, invite.subscription_pricing, finalImporter, participant, resourcesProvider); +// } else { +// AndroidUtilities.runOnUIThread(() -> { +// Bundle bundle = new Bundle(); +// bundle.putLong("user_id", user.id); +// ProfileActivity profileActivity = new ProfileActivity(bundle); +// fragment.presentFragment(profileActivity); +// isNeedReopen = true; +// }, 100); +// dismiss(); +// } + })); + } else { + showSubscriptionSheet(context, currentAccount, -chatId, invite.subscription_pricing, importer, part, resourcesProvider); + } + } else { + AndroidUtilities.runOnUIThread(() -> { + Bundle bundle = new Bundle(); + bundle.putLong("user_id", user.id); + ProfileActivity profileActivity = new ProfileActivity(bundle); + fragment.presentFragment(profileActivity); + isNeedReopen = true; + }, 100); + dismiss(); + } } } }); @@ -316,7 +391,7 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) { titleTextView.setSingleLine(true); titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20); titleTextView.setEllipsize(TextUtils.TruncateAt.END); - titleTextView.setPadding(AndroidUtilities.dp(23), 0, AndroidUtilities.dp(23), 0); + titleTextView.setPadding(dp(23), 0, dp(23), 0); titleTextView.setGravity(Gravity.CENTER_VERTICAL); titleTextView.setTypeface(AndroidUtilities.bold()); if (!permanent) { @@ -462,34 +537,52 @@ private void updateRows() { requestedStartRow = -1; requestedEndRow = -1; loadingRow = -1; + revenueHeaderRow = -1; + revenueRow = -1; + expiredHeaderRow = -1; + expiredStartRow = -1; + expiredEndRow = -1; if (!permanent) { linkActionRow = rowCount++; linkInfoRow = rowCount++; } + if (invite.subscription_pricing != null) { + revenueHeaderRow = rowCount++; + revenueRow = rowCount++; + } creatorHeaderRow = rowCount++; creatorRow = rowCount++; - emptyView = rowCount++; +// emptyView = rowCount++; - boolean needUsers = invite.usage > 0 || invite.usage_limit > 0 || invite.requested > 0; - boolean needLoadUsers = invite.usage > joinedUsers.size() || invite.request_needed && invite.requested > requestedUsers.size(); + boolean needUsers = invite.usage > 0 || invite.usage_limit > 0 || invite.requested > 0 || invite.subscription_expired > 0; + boolean needLoadUsers = invite.usage > joinedUsers.size() || invite.subscription_expired > expiredUsers.size() || invite.request_needed && invite.requested > requestedUsers.size(); boolean usersLoaded = false; if (!joinedUsers.isEmpty()) { - dividerRow = rowCount++; +// dividerRow = rowCount++; joinedHeaderRow = rowCount++; joinedStartRow = rowCount; rowCount += joinedUsers.size(); joinedEndRow = rowCount; - emptyView2 = rowCount++; +// emptyView2 = rowCount++; + usersLoaded = true; + } + if (!expiredUsers.isEmpty()) { +// dividerRow = rowCount++; + expiredHeaderRow = rowCount++; + expiredStartRow = rowCount; + rowCount += expiredUsers.size(); + expiredEndRow = rowCount; +// emptyView2 = rowCount++; usersLoaded = true; } if (!requestedUsers.isEmpty()) { - divider2Row = rowCount++; +// divider2Row = rowCount++; requestedHeaderRow = rowCount++; requestedStartRow = rowCount; rowCount += requestedUsers.size(); requestedEndRow = rowCount; - emptyView3 = rowCount++; +// emptyView3 = rowCount++; usersLoaded = true; } if (needUsers || needLoadUsers) { @@ -500,7 +593,7 @@ private void updateRows() { } } if (emptyHintRow == -1) { - divider3Row = rowCount++; +// divider3Row = rowCount++; } adapter.notifyDataSetChanged(); @@ -510,7 +603,7 @@ private class Adapter extends RecyclerListView.SelectionAdapter { @Override public int getItemViewType(int position) { - if (position == creatorHeaderRow || position == requestedHeaderRow || position == joinedHeaderRow) { + if (position == creatorHeaderRow || position == requestedHeaderRow || position == joinedHeaderRow || position == revenueHeaderRow) { return 0; } else if (position == creatorRow || position >= requestedStartRow && position < requestedEndRow || position >= joinedStartRow && position < joinedEndRow) { return 1; @@ -528,6 +621,8 @@ public int getItemViewType(int position) { return 7; } else if (position == emptyHintRow) { return 8; + } else if (position == revenueRow) { + return 9; } return 0; } @@ -540,20 +635,24 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int switch (viewType) { default: case 0: - HeaderCell headerCell = new HeaderCell(context, Theme.key_windowBackgroundWhiteBlueHeader, 21, 15, true); - headerCell.getTextView2().setTextColor(Theme.getColor(Theme.key_text_RedRegular)); - headerCell.getTextView2().setTextSize(15); - headerCell.getTextView2().setTypeface(AndroidUtilities.bold()); + GraySectionCell headerCell = new GraySectionCell(context, resourcesProvider); view = headerCell; break; case 1: - view = new UserCell(context, 12, 0, true); + view = new RevenueUserCell(context); break; case 2: view = new ShadowSectionCell(context, 12, Theme.getColor(Theme.key_windowBackgroundGray)); break; case 3: - LinkActionView linkActionView = new LinkActionView(context, fragment, InviteLinkBottomSheet.this, chatId, false, isChannel); + LinkActionView linkActionView = new LinkActionView(context, fragment, InviteLinkBottomSheet.this, chatId, false, isChannel) { + @Override + public void showBulletin(int resId, CharSequence str) { + Bulletin b = BulletinFactory.of(container, resourcesProvider).createSimpleBulletin(resId, str); + b.hideAfterBottomSheet = false; + b.show(true); + } + }; view = linkActionView; linkActionView.setDelegate(new LinkActionView.Delegate() { @Override @@ -660,14 +759,14 @@ public void removeLink() { flickerLoadingView.setIsSingleCell(true); flickerLoadingView.setViewType(FlickerLoadingView.USERS2_TYPE); flickerLoadingView.showDate(false); - flickerLoadingView.setPaddingLeft(AndroidUtilities.dp(10)); + flickerLoadingView.setPaddingLeft(dp(10)); view = flickerLoadingView; break; case 6: view = new View(context) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(5), MeasureSpec.EXACTLY)); + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(dp(5), MeasureSpec.EXACTLY)); } }; break; @@ -682,6 +781,9 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { case 8: view = new EmptyHintRow(context); break; + case 9: + view = new RevenueCell(context); + break; } view.setLayoutParams(new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); return new RecyclerListView.Holder(view); @@ -691,81 +793,103 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { switch (holder.getItemViewType()) { case 0: - HeaderCell headerCell = (HeaderCell) holder.itemView; + GraySectionCell headerCell = (GraySectionCell) holder.itemView; if (position == creatorHeaderRow) { - headerCell.setText(LocaleController.getString("LinkCreatedeBy", R.string.LinkCreatedeBy)); - headerCell.setText2(null); + headerCell.setText(LocaleController.getString(R.string.LinkCreatedeBy)); + headerCell.setRightText(null); + } else if (position == revenueHeaderRow) { + headerCell.setText(LocaleController.getString(R.string.LinkRevenue)); + headerCell.setRightText(null); } else if (position == joinedHeaderRow) { if (invite.usage > 0) { headerCell.setText(LocaleController.formatPluralString("PeopleJoined", invite.usage)); } else { - headerCell.setText(LocaleController.getString("NoOneJoined", R.string.NoOneJoined)); + headerCell.setText(LocaleController.getString(invite.subscription_pricing != null ? R.string.NoOneSubscribed : R.string.NoOneJoined)); } if (!invite.expired && !invite.revoked && invite.usage_limit > 0 && invite.usage > 0) { - headerCell.setText2(LocaleController.formatPluralString("PeopleJoinedRemaining", invite.usage_limit - invite.usage)); + headerCell.setRightText(LocaleController.formatPluralString("PeopleJoinedRemaining", invite.usage_limit - invite.usage)); } else { - headerCell.setText2(null); + headerCell.setRightText(null); } + } else if (position == expiredHeaderRow) { + headerCell.setText(LocaleController.formatPluralString("PeopleSubscriptionExpired", invite.subscription_expired)); + headerCell.setRightText(null); } else if (position == requestedHeaderRow) { headerCell.setText(LocaleController.formatPluralString("JoinRequests", invite.requested)); + headerCell.setRightText(null); } break; case 1: - UserCell userCell = (UserCell) holder.itemView; + RevenueUserCell userCell = (RevenueUserCell) holder.itemView; TLRPC.User user; String role = null; String status = null; + TLRPC.ChatParticipant part = null; + TLRPC.TL_chatInviteImporter invitedUser = null; + long userId; if (position == creatorRow) { - user = users.get(invite.admin_id); + userId = invite.admin_id; + } else { + int startRow = joinedStartRow; + List<TLRPC.TL_chatInviteImporter> usersList = joinedUsers; + if (expiredStartRow != -1 && position >= expiredStartRow) { + startRow = expiredStartRow; + usersList = expiredUsers; + } + if (requestedStartRow != -1 && position >= requestedStartRow) { + startRow = requestedStartRow; + usersList = requestedUsers; + } + invitedUser = usersList.get(position - startRow); + userId = invitedUser.user_id; + } + user = users.get(userId); + if (info != null && info.participants != null) { + for (int i = 0; i < info.participants.participants.size(); i++) { + if (info.participants.participants.get(i).user_id == userId) { + part = info.participants.participants.get(i); + break; + } + } + } + if (position == creatorRow) { + user = users.get(userId); if (user == null) { user = MessagesController.getInstance(currentAccount).getUser(invite.admin_id); } if (user != null) { status = LocaleController.formatDateAudio(invite.date, false); } - if (info != null && user != null && info.participants != null) { - for (int i = 0; i < info.participants.participants.size(); i++) { - if (info.participants.participants.get(i).user_id == user.id) { - TLRPC.ChatParticipant part = info.participants.participants.get(i); - - if (part instanceof TLRPC.TL_chatChannelParticipant) { - TLRPC.ChannelParticipant channelParticipant = ((TLRPC.TL_chatChannelParticipant) part).channelParticipant; - if (!TextUtils.isEmpty(channelParticipant.rank)) { - role = channelParticipant.rank; - } else { - if (channelParticipant instanceof TLRPC.TL_channelParticipantCreator) { - role = LocaleController.getString("ChannelCreator", R.string.ChannelCreator); - } else if (channelParticipant instanceof TLRPC.TL_channelParticipantAdmin) { - role = LocaleController.getString("ChannelAdmin", R.string.ChannelAdmin); - } else { - role = null; - } - } - } else { - if (part instanceof TLRPC.TL_chatParticipantCreator) { - role = LocaleController.getString("ChannelCreator", R.string.ChannelCreator); - } else if (part instanceof TLRPC.TL_chatParticipantAdmin) { - role = LocaleController.getString("ChannelAdmin", R.string.ChannelAdmin); - } else { - role = null; - } - } - break; + } + if (position == creatorRow && part != null) { + if (part instanceof TLRPC.TL_chatChannelParticipant) { + TLRPC.ChannelParticipant channelParticipant = ((TLRPC.TL_chatChannelParticipant) part).channelParticipant; + if (!TextUtils.isEmpty(channelParticipant.rank)) { + role = channelParticipant.rank; + } else { + if (channelParticipant instanceof TLRPC.TL_channelParticipantCreator) { + role = LocaleController.getString("ChannelCreator", R.string.ChannelCreator); + } else if (channelParticipant instanceof TLRPC.TL_channelParticipantAdmin) { + role = LocaleController.getString("ChannelAdmin", R.string.ChannelAdmin); + } else { + role = null; } } + } else { + if (part instanceof TLRPC.TL_chatParticipantCreator) { + role = LocaleController.getString("ChannelCreator", R.string.ChannelCreator); + } else if (part instanceof TLRPC.TL_chatParticipantAdmin) { + role = LocaleController.getString("ChannelAdmin", R.string.ChannelAdmin); + } else { + role = null; + } } - } else { - int startRow = joinedStartRow; - List<TLRPC.TL_chatInviteImporter> usersList = joinedUsers; - if (requestedStartRow != -1 && position >= requestedStartRow) { - startRow = requestedStartRow; - usersList = requestedUsers; - } - TLRPC.TL_chatInviteImporter invitedUser = usersList.get(position - startRow); - user = users.get(invitedUser.user_id); } userCell.setAdminRole(role); userCell.setData(user, null, status, 0, false); + if (position != creatorRow && invite.subscription_pricing != null && invitedUser != null) { + userCell.setRevenue(invite.subscription_pricing, invitedUser.date); + } break; case 3: LinkActionView actionView = (LinkActionView) holder.itemView; @@ -791,7 +915,6 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi privacyCell.setText(LocaleController.getString("LinkIsExpired", R.string.LinkIsExpired)); privacyCell.setTextColor(Theme.getColor(Theme.key_text_RedRegular)); } - } else if (invite.expire_date > 0) { long currentTime = System.currentTimeMillis() + timeDif * 1000L; long expireTime = invite.expire_date * 1000L; @@ -814,7 +937,7 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi privacyCell.setText(LocaleController.formatString("LinkExpiresInTime", R.string.LinkExpiresInTime, time)); } } else { - privacyCell.setFixedSize(12); + privacyCell.setFixedSize(-1); privacyCell.setText(null); } break; @@ -827,6 +950,9 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi emptyHintRow.textView.setVisibility(View.GONE); } break; + case 9: + ((RevenueCell) holder.itemView).set(invite.subscription_pricing, invite.usage); + break; } } @@ -922,22 +1048,30 @@ public void loadUsers() { } boolean hasMoreJoinedUsers = invite.usage > joinedUsers.size(); + boolean hasMoreExpiredUsers = invite.subscription_expired > expiredUsers.size(); boolean hasMoreRequestedUsers = invite.request_needed && invite.requested > requestedUsers.size(); boolean loadRequestedUsers; + boolean loadExpiredUsers; if (hasMoreJoinedUsers) { loadRequestedUsers = false; + loadExpiredUsers = false; + } else if (hasMoreExpiredUsers) { + loadRequestedUsers = false; + loadExpiredUsers = true; } else if (hasMoreRequestedUsers) { loadRequestedUsers = true; + loadExpiredUsers = false; } else { return; } - final List<TLRPC.TL_chatInviteImporter> importersList = loadRequestedUsers ? requestedUsers : joinedUsers; + final List<TLRPC.TL_chatInviteImporter> importersList = loadRequestedUsers ? requestedUsers : loadExpiredUsers ? expiredUsers : joinedUsers; TLRPC.TL_messages_getChatInviteImporters req = new TLRPC.TL_messages_getChatInviteImporters(); req.flags |= 2; req.link = invite.link; req.peer = MessagesController.getInstance(UserConfig.selectedAccount).getInputPeer(-chatId); req.requested = loadRequestedUsers; + req.subscription_expired = loadExpiredUsers; if (importersList.isEmpty()) { req.offset_user = new TLRPC.TL_inputUserEmpty(); } else { @@ -958,7 +1092,9 @@ public void loadUsers() { } hasMore = loadRequestedUsers ? importersList.size() < inviteImporters.count - : importersList.size() < inviteImporters.count || hasMoreRequestedUsers; + : loadExpiredUsers + ? importersList.size() < inviteImporters.count || hasMoreRequestedUsers + : importersList.size() < inviteImporters.count || hasMoreRequestedUsers || hasMoreExpiredUsers; updateRows(); } usersLoading = false; @@ -1029,7 +1165,7 @@ public EmptyHintRow(@NonNull Context context) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(84), MeasureSpec.EXACTLY)); + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(dp(84), MeasureSpec.EXACTLY)); } } @@ -1043,4 +1179,262 @@ public interface InviteDelegate { void onLinkDeleted(TLRPC.TL_chatInviteExported invite); void onLinkEdited(TLRPC.TL_chatInviteExported invite); } + + private class RevenueUserCell extends UserCell { + + public final LinearLayout layout; + public final TextView priceView; + public final TextView periodView; + + public RevenueUserCell(Context context) { + super(context, 6, 0, true); + + layout = new LinearLayout(context); + layout.setOrientation(LinearLayout.VERTICAL); + + priceView = new TextView(context); + priceView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + priceView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + priceView.setTypeface(AndroidUtilities.bold()); + layout.addView(priceView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.RIGHT)); + + periodView = new TextView(context); + periodView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2)); + periodView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + layout.addView(periodView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.RIGHT, 0, 1, 0, 0)); + + addView(layout, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL | (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT), 18, 0, 18, 0)); + } + + public void setRevenue(TLRPC.TL_starsSubscriptionPricing pricing, int joined_date) { + if (pricing == null) { + priceView.setText(null); + periodView.setText(null); + setRightPadding(0, true, true); + } else { + final CharSequence amountText = StarsIntroActivity.replaceStarsWithPlain("⭐️" + pricing.amount, .7f); + final CharSequence periodText = pricing.period == StarsController.PERIOD_MONTHLY ? LocaleController.getString(R.string.StarsParticipantSubscriptionPerMonth) : (pricing.period == StarsController.PERIOD_5MINUTES ? "per 5 minutes" : "per each minute"); + priceView.setText(amountText); + periodView.setText(periodText); + setRightPadding( + (int) Math.max(HintView2.measureCorrectly(amountText, priceView.getPaint()), HintView2.measureCorrectly(periodText, periodView.getPaint())), + true, true + ); + statusTextView.setText(LocaleController.formatJoined(joined_date)); + } + } + + } + + private class RevenueCell extends FrameLayout { + + public final ImageView imageView; + public final TextView titleView; + public final TextView subtitleView; + + public RevenueCell(Context context) { + super(context); + + imageView = new ImageView(context); + imageView.setBackground(Theme.createCircleDrawable(46, Theme.getColor(Theme.key_avatar_backgroundGreen), Theme.getColor(Theme.key_avatar_background2Green))); + imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); + imageView.setImageResource(R.drawable.large_income); + imageView.setColorFilter(new PorterDuffColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN)); + addView(imageView, LayoutHelper.createFrame(46, 46, Gravity.LEFT | Gravity.CENTER_VERTICAL, 13, 0, 0, 0)); + + titleView = new TextView(context); + titleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + titleView.setTypeface(AndroidUtilities.bold()); + titleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + addView(titleView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 72, 9, 0, 0)); + + subtitleView = new TextView(context); + subtitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + subtitleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText)); + addView(subtitleView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 72, 32, 0, 0)); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure( + MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(dp(58), MeasureSpec.EXACTLY) + ); + } + + public void set(TLRPC.TL_starsSubscriptionPricing pricing, int count) { + if (pricing == null) return; + if (pricing.period == StarsController.PERIOD_MONTHLY) { + titleView.setText(StarsIntroActivity.replaceStarsWithPlain(LocaleController.formatString(R.string.LinkRevenuePrice, pricing.amount) + (count > 0 ? " x " + count : ""), .8f)); + subtitleView.setText(count == 0 ? getString(R.string.NoOneSubscribed) : LocaleController.formatString(R.string.LinkRevenuePriceInfo, BillingController.getInstance().formatCurrency((long) (pricing.amount / 1000.0 * MessagesController.getInstance(currentAccount).starsUsdWithdrawRate1000 * count), "USD"))); + } else { + final String period = pricing.period == StarsController.PERIOD_5MINUTES ? "5min" : "min"; + titleView.setText(StarsIntroActivity.replaceStarsWithPlain(String.format(Locale.US, "⭐%1$d/%2$s", pricing.amount, period) + (count > 0 ? " x " + count : ""), .8f)); + subtitleView.setText(count == 0 ? getString(R.string.NoOneSubscribed) : String.format(Locale.US, "you get approximately %1$s %2$s", BillingController.getInstance().formatCurrency((long) (pricing.amount / 1000.0 * MessagesController.getInstance(currentAccount).starsUsdWithdrawRate1000 * count), "USD"), "for " + period)); + } + } + + } + + public static BottomSheet showSubscriptionSheet( + Context context, + int currentAccount, + long dialogId, + TLRPC.TL_starsSubscriptionPricing pricing, + TLRPC.TL_chatInviteImporter importer, + TLRPC.ChannelParticipant participant, + Theme.ResourcesProvider resourcesProvider + ) { + final BottomSheet.Builder b = new BottomSheet.Builder(context, false, resourcesProvider); + final BottomSheet[] sheet = new BottomSheet[1]; + + LinearLayout linearLayout = new LinearLayout(context); + linearLayout.setOrientation(LinearLayout.VERTICAL); + linearLayout.setPadding(dp(16), dp(20), dp(16), dp(4)); + linearLayout.setClipChildren(false); + linearLayout.setClipToPadding(false); + + FrameLayout topView = new FrameLayout(context); + linearLayout.addView(topView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.FILL_HORIZONTAL, 0, 0, 0, 10)); + + BackupImageView imageView = new BackupImageView(context); + imageView.setRoundRadius(dp(50)); + AvatarDrawable avatarDrawable = new AvatarDrawable(); + if (dialogId >= 0) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(dialogId); + avatarDrawable.setInfo(user); + imageView.setForUserOrChat(user, avatarDrawable); + } else { + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-dialogId); + avatarDrawable.setInfo(chat); + imageView.setForUserOrChat(chat, avatarDrawable); + } + topView.addView(imageView, LayoutHelper.createFrame(100, 100, Gravity.CENTER)); + + Drawable starBg = context.getResources().getDrawable(R.drawable.star_small_outline); + starBg.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_dialogBackground, resourcesProvider), PorterDuff.Mode.SRC_IN)); + Drawable starFg = context.getResources().getDrawable(R.drawable.star_small_inner); + + ImageView starBgView = new ImageView(context); + starBgView.setImageDrawable(starBg); + topView.addView(starBgView, LayoutHelper.createFrame(28, 28, Gravity.CENTER)); + starBgView.setTranslationX(dp(34)); + starBgView.setTranslationY(dp(35)); + starBgView.setScaleX(1.1f); + starBgView.setScaleY(1.1f); + + ImageView starFgView = new ImageView(context); + starFgView.setImageDrawable(starFg); + topView.addView(starFgView, LayoutHelper.createFrame(28, 28, Gravity.CENTER)); + starFgView.setTranslationX(dp(34)); + starFgView.setTranslationY(dp(35)); + + TextView textView = new TextView(context); + textView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20); + textView.setTypeface(AndroidUtilities.bold()); + textView.setGravity(Gravity.CENTER); + textView.setText(getString(R.string.StarsSubscriptionTitle)); + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 20, 0, 20, 4)); + + textView = new TextView(context); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setGravity(Gravity.CENTER); + textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText4, resourcesProvider)); + if (pricing.period == StarsController.PERIOD_MONTHLY) { + textView.setText(StarsIntroActivity.replaceStarsWithPlain(formatString(R.string.StarsSubscriptionPrice, pricing.amount), .8f)); + } else { + final String period = pricing.period == StarsController.PERIOD_5MINUTES ? "5min" : "min"; + textView.setText(StarsIntroActivity.replaceStarsWithPlain(String.format(Locale.US, "⭐%1$d/%2$s", pricing.amount, period), .8f)); + } + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 20, 0, 20, 4)); + + textView = new TextView(context); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setGravity(Gravity.CENTER); + textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText4, resourcesProvider)); + if (pricing.period == StarsController.PERIOD_MONTHLY) { + textView.setText(formatString(R.string.StarsParticipantSubscriptionApproxMonth, BillingController.getInstance().formatCurrency((int) (pricing.amount / 1000.0 * MessagesController.getInstance(currentAccount).starsUsdWithdrawRate1000), "USD"))); + } else { + final String period = pricing.period == StarsController.PERIOD_5MINUTES ? "5min" : "min"; + textView.setText(String.format(Locale.US, "appx. %1$s per %2$s", BillingController.getInstance().formatCurrency((int) (pricing.amount / 1000.0 * MessagesController.getInstance(currentAccount).starsUsdWithdrawRate1000), "USD"), period)); + } + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 20, 0, 20, 4)); + + TableView tableView = new TableView(context, resourcesProvider); + textView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + textView.setPadding(dp(12.66f), dp(9.33f), dp(12.66f), dp(9.33f)); + textView.setEllipsize(TextUtils.TruncateAt.END); + textView.setTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setSingleLine(true); + ((LinkSpanDrawable.LinksTextView) textView).setDisablePaddingsOffsetY(true); + AvatarSpan avatarSpan = new AvatarSpan(textView, currentAccount, 24); + CharSequence username; + boolean deleted = false; + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(importer.user_id); + deleted = user == null; + username = UserObject.getUserName(user); + avatarSpan.setUser(user); + SpannableStringBuilder ssb = new SpannableStringBuilder("x " + username); + ssb.setSpan(avatarSpan, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ssb.setSpan(new ClickableSpan() { + @Override + public void onClick(@NonNull View widget) { + sheet[0].dismiss(); + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment != null) { + lastFragment.presentFragment(ProfileActivity.of(importer.user_id)); + } + } + + @Override + public void updateDrawState(@NonNull TextPaint ds) { + ds.setUnderlineText(false); + } + }, 3, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + textView.setText(ssb); + if (!deleted) { + tableView.addRowUnpadded(getString(R.string.StarsParticipantSubscription), textView); + } + + tableView.addRow( + getString(R.string.StarsParticipantSubscriptionStart), + LocaleController.formatString(R.string.formatDateAtTime, LocaleController.getInstance().getFormatterGiveawayCard().format(new Date(importer.date * 1000L)), LocaleController.getInstance().getFormatterDay().format(new Date(importer.date * 1000L))) + ); + final int now = ConnectionsManager.getInstance(currentAccount).getCurrentTime(); + if (participant != null) { + tableView.addRow( + getString(participant.subscription_until_date > now ? R.string.StarsParticipantSubscriptionRenews : R.string.StarsParticipantSubscriptionExpired), + LocaleController.formatString(R.string.formatDateAtTime, LocaleController.getInstance().getFormatterGiveawayCard().format(new Date(participant.subscription_until_date * 1000L)), LocaleController.getInstance().getFormatterDay().format(new Date(participant.subscription_until_date * 1000L))) + ); + } + linearLayout.addView(tableView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 17, 0, 0)); + + textView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2, resourcesProvider)); + textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setText(AndroidUtilities.replaceSingleTag(getString(R.string.StarsTransactionTOS), () -> { + Browser.openUrl(context, getString(R.string.StarsTOSLink)); + })); + textView.setGravity(Gravity.CENTER); + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 14, 15, 14, 15)); + + ButtonWithCounterView button = new ButtonWithCounterView(context, true, resourcesProvider); + button.setText(getString(R.string.OK), false); + linearLayout.addView(button, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48)); + button.setOnClickListener(v -> { + sheet[0].dismiss(); + }); + + b.setCustomView(linearLayout); + sheet[0] = b.create(); + sheet[0].useBackgroundTopPadding = false; + + sheet[0].fixNavigationBar(); + sheet[0].show(); + return sheet[0]; + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ItemOptions.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ItemOptions.java index c29f27b10b9..298faf726ba 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ItemOptions.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ItemOptions.java @@ -14,6 +14,7 @@ import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.text.TextUtils; import android.util.TypedValue; import android.view.Gravity; import android.view.KeyEvent; @@ -38,6 +39,7 @@ import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.R; import org.telegram.messenger.UserObject; +import org.telegram.messenger.Utilities; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.ActionBarMenuSubItem; @@ -235,8 +237,8 @@ public ItemOptions add(int iconResId, Drawable iconDrawable, CharSequence text, subItem.setText(text); } - subItem.setColors(Theme.getColor(textColorKey, resourcesProvider), Theme.getColor(iconColorKey, resourcesProvider)); - subItem.setSelectorColor(Theme.multAlpha(Theme.getColor(textColorKey, resourcesProvider), .12f)); + subItem.setColors(textColor != null ? textColor : Theme.getColor(textColorKey, resourcesProvider), iconColor != null ? iconColor : Theme.getColor(iconColorKey, resourcesProvider)); + subItem.setSelectorColor(selectorColor != null ? selectorColor : Theme.multAlpha(Theme.getColor(textColorKey, resourcesProvider), .12f)); subItem.setOnClickListener(view1 -> { if (onClickListener != null) { @@ -323,6 +325,9 @@ public ItemOptions putCheck() { public ItemOptions addGap() { ActionBarPopupWindow.GapView gap = new ActionBarPopupWindow.GapView(context, resourcesProvider); gap.setTag(R.id.fit_width_tag, 1); + if (gapBackgroundColor != null) { + gap.setColor(gapBackgroundColor); + } addView(gap, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 8)); return this; } @@ -378,6 +383,8 @@ public ItemOptions addProfile(TLObject obj, CharSequence subtitle, Runnable onCl final TextView titleText = new TextView(context); titleText.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, resourcesProvider)); titleText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + titleText.setEllipsize(TextUtils.TruncateAt.END); + titleText.setSingleLine(true); if (obj instanceof TLRPC.User) { titleText.setText(UserObject.getUserName((TLRPC.User) obj)); } else if (obj instanceof TLRPC.Chat) { @@ -648,7 +655,7 @@ public void onDismiss() { } int Y; if (scrimView != null) { - if (forceTop || y + layout.getMeasuredHeight() + dp(16) > AndroidUtilities.displaySize.y) { + if (forceTop || y + layout.getMeasuredHeight() + dp(16) > AndroidUtilities.displaySize.y - AndroidUtilities.navigationBarHeight) { // put above scrimView y -= scrimView.getMeasuredHeight(); y -= layout.getMeasuredHeight(); @@ -684,6 +691,67 @@ public ItemOptions setBackgroundColor(int color) { return this; } + private Integer gapBackgroundColor; + public ItemOptions setGapBackgroundColor(int color) { + gapBackgroundColor = color; + for (int j = 0; j < layout.getChildCount(); ++j) { + View child = j == layout.getChildCount() - 1 ? lastLayout : layout.getChildAt(j); + if (child instanceof ActionBarPopupWindow.ActionBarPopupWindowLayout) { + ActionBarPopupWindow.ActionBarPopupWindowLayout l = (ActionBarPopupWindow.ActionBarPopupWindowLayout) child; + for (int i = 0; i < l.getItemsCount(); ++i) { + View child2 = l.getItemAt(i); + if (child2 instanceof ActionBarPopupWindow.GapView) { + ((ActionBarPopupWindow.GapView) child2).setColor(color); + } + } + } else if (child instanceof ActionBarPopupWindow.GapView) { + ((ActionBarPopupWindow.GapView) child).setColor(color); + } + } + return this; + } + + private Integer textColor, iconColor; + public ItemOptions setColors(int textColor, int iconColor) { + this.textColor = textColor; + this.iconColor = iconColor; + for (int j = 0; j < layout.getChildCount(); ++j) { + View child = j == layout.getChildCount() - 1 ? lastLayout : layout.getChildAt(j); + if (child instanceof ActionBarPopupWindow.ActionBarPopupWindowLayout) { + ActionBarPopupWindow.ActionBarPopupWindowLayout l = (ActionBarPopupWindow.ActionBarPopupWindowLayout) child; + for (int i = 0; i < l.getItemsCount(); ++i) { + View child2 = l.getItemAt(i); + if (child2 instanceof ActionBarMenuSubItem) { + ((ActionBarMenuSubItem) child2).setColors(textColor, iconColor); + } + } + } else if (child instanceof ActionBarMenuSubItem) { + ((ActionBarMenuSubItem) child).setColors(textColor, iconColor); + } + } + return this; + } + + private Integer selectorColor; + public ItemOptions setSelectorColor(int selectorColor) { + this.selectorColor = selectorColor; + for (int j = 0; j < layout.getChildCount(); ++j) { + View child = j == layout.getChildCount() - 1 ? lastLayout : layout.getChildAt(j); + if (child instanceof ActionBarPopupWindow.ActionBarPopupWindowLayout) { + ActionBarPopupWindow.ActionBarPopupWindowLayout l = (ActionBarPopupWindow.ActionBarPopupWindowLayout) child; + for (int i = 0; i < l.getItemsCount(); ++i) { + View child2 = l.getItemAt(i); + if (child2 instanceof ActionBarMenuSubItem) { + ((ActionBarMenuSubItem) child2).setSelectorColor(selectorColor); + } + } + } else if (child instanceof ActionBarMenuSubItem) { + ((ActionBarMenuSubItem) child).setSelectorColor(selectorColor); + } + } + return this; + } + public float getOffsetX() { return offsetX; } @@ -810,7 +878,21 @@ protected void onDraw(Canvas canvas) { canvas.translate(point[0], point[1]); if (scrimViewBackground != null) { - scrimViewBackground.setBounds( -viewAdditionalOffsets.left, -viewAdditionalOffsets.top, scrimView.getWidth() + viewAdditionalOffsets.right, scrimView.getHeight() + viewAdditionalOffsets.bottom); + if (scrimViewBackground.getIntrinsicWidth() > 0 && scrimViewBackground.getIntrinsicHeight() > 0) { + scrimViewBackground.setBounds( + -viewAdditionalOffsets.left + (scrimView.getWidth() + viewAdditionalOffsets.right - scrimViewBackground.getIntrinsicWidth()) / 2, + -viewAdditionalOffsets.top + (scrimView.getHeight() + viewAdditionalOffsets.bottom - scrimViewBackground.getIntrinsicHeight()) / 2, + -viewAdditionalOffsets.left + (scrimView.getWidth() + viewAdditionalOffsets.right + scrimViewBackground.getIntrinsicWidth()) / 2, + -viewAdditionalOffsets.top + (scrimView.getHeight() + viewAdditionalOffsets.bottom + scrimViewBackground.getIntrinsicHeight()) / 2 + ); + } else { + scrimViewBackground.setBounds( + -viewAdditionalOffsets.left, + -viewAdditionalOffsets.top, + scrimView.getWidth() + viewAdditionalOffsets.right, + scrimView.getHeight() + viewAdditionalOffsets.bottom + ); + } scrimViewBackground.draw(canvas); } canvas.drawBitmap(cachedBitmap, -viewAdditionalOffsets.left, -viewAdditionalOffsets.top, cachedBitmapPaint); @@ -823,7 +905,21 @@ protected void onDraw(Canvas canvas) { canvas.translate(point[0], point[1]); if (scrimViewBackground != null) { - scrimViewBackground.setBounds( -viewAdditionalOffsets.left, -viewAdditionalOffsets.top, scrimView.getWidth() + viewAdditionalOffsets.right, scrimView.getHeight() + viewAdditionalOffsets.bottom); + if (scrimViewBackground.getIntrinsicWidth() > 0 && scrimViewBackground.getIntrinsicHeight() > 0) { + scrimViewBackground.setBounds( + -viewAdditionalOffsets.left + (scrimView.getWidth() + viewAdditionalOffsets.right - scrimViewBackground.getIntrinsicWidth()) / 2, + -viewAdditionalOffsets.top + (scrimView.getHeight() + viewAdditionalOffsets.bottom - scrimViewBackground.getIntrinsicHeight()) / 2, + -viewAdditionalOffsets.left + (scrimView.getWidth() + viewAdditionalOffsets.right + scrimViewBackground.getIntrinsicWidth()) / 2, + -viewAdditionalOffsets.top + (scrimView.getHeight() + viewAdditionalOffsets.bottom + scrimViewBackground.getIntrinsicHeight()) / 2 + ); + } else { + scrimViewBackground.setBounds( + -viewAdditionalOffsets.left, + -viewAdditionalOffsets.top, + scrimView.getWidth() + viewAdditionalOffsets.right, + scrimView.getHeight() + viewAdditionalOffsets.bottom + ); + } scrimViewBackground.draw(canvas); } scrimView.draw(canvas); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/LineProgressView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/LineProgressView.java index ba839a9d3e7..dab9fcaf45d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/LineProgressView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/LineProgressView.java @@ -12,6 +12,7 @@ import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.RectF; +import android.util.Log; import android.view.View; import android.view.animation.DecelerateInterpolator; @@ -128,6 +129,7 @@ public void onDraw(Canvas canvas) { } cellFlickerDrawable.setParentWidth(getMeasuredWidth()); cellFlickerDrawable.draw(canvas, rect, getHeight() / 2f, null); + invalidate(); } updateAnimation(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/LinkActionView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/LinkActionView.java index b96b155740a..30d78de2e33 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/LinkActionView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/LinkActionView.java @@ -1,5 +1,8 @@ package org.telegram.ui.Components; +import static org.telegram.messenger.LocaleController.formatString; +import static org.telegram.messenger.LocaleController.getString; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.content.Context; @@ -25,11 +28,13 @@ import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.collection.LongSparseArray; import androidx.core.content.ContextCompat; import androidx.core.graphics.ColorUtils; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ApplicationLoader; +import org.telegram.messenger.DialogObject; import org.telegram.messenger.FileLog; import org.telegram.messenger.LocaleController; import org.telegram.messenger.MessagesController; @@ -44,6 +49,7 @@ import org.telegram.ui.ActionBar.BottomSheet; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Cells.DialogCell; +import org.telegram.ui.ManageLinksActivity; import java.util.ArrayList; @@ -177,10 +183,23 @@ public LinkActionView(Context context, BaseFragment fragment, BottomSheet bottom if (link == null) { return; } - Intent intent = new Intent(Intent.ACTION_SEND); - intent.setType("text/plain"); - intent.putExtra(Intent.EXTRA_TEXT, link); - fragment.startActivityForResult(Intent.createChooser(intent, LocaleController.getString("InviteToGroupByLink", R.string.InviteToGroupByLink)), 500); + fragment.showDialog(new ShareAlert(getContext(), null, link, false, link, false, fragment.getResourceProvider()) { + @Override + protected void onSend(LongSparseArray<TLRPC.Dialog> dids, int count, TLRPC.TL_forumTopic topic) { + final String str; + if (dids != null && dids.size() == 1) { + long did = dids.valueAt(0).id; + if (did == 0 || did == UserConfig.getInstance(currentAccount).getClientUserId()) { + str = getString(R.string.InvLinkToSavedMessages); + } else { + str = formatString(R.string.InvLinkToUser, MessagesController.getInstance(currentAccount).getPeerName(did, true)); + } + } else { + str = formatString(R.string.InvLinkToChats, LocaleController.formatPluralString("Chats", count)); + } + showBulletin(R.raw.forward, AndroidUtilities.replaceTags(str)); + } + }); } catch (Exception e) { FileLog.e(e); } @@ -333,6 +352,12 @@ public void onClick(View view) { updateColors(); } + public void showBulletin(int resId, CharSequence str) { + Bulletin b = BulletinFactory.of(fragment).createSimpleBulletin(resId, str); + b.hideAfterBottomSheet = false; + b.show(true); + } + private void getPointOnScreen(FrameLayout frameLayout, FrameLayout finalContainer, float[] point) { float x = 0; float y = 0; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/LinkPath.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/LinkPath.java index f9629debf5a..3c8eb258a6d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/LinkPath.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/LinkPath.java @@ -151,7 +151,7 @@ public void addRect(float left, float top, float right, float bottom, @NonNull D } centerX = (right + left) / 2; centerY = (y2 + y) / 2; - if (useRoundRect && LiteMode.isEnabled(LiteMode.FLAGS_CHAT)) { + if (useRoundRect) { // final CharSequence text = currentLayout.getText(); // int startOffset = currentLayout.getOffsetForHorizontal(currentLine, left), endOffset = currentLayout.getOffsetForHorizontal(currentLine, right) + 1; boolean startsWithWhitespace = false; // startOffset >= 0 && startOffset < text.length() && text.charAt(startOffset) == ' '; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/MediaActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/MediaActivity.java index cec1bfac69d..dee2fe6cb4e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/MediaActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/MediaActivity.java @@ -344,7 +344,7 @@ protected void drawList(Canvas blurCanvas, boolean top, ArrayList<IViewWithInval boolean hasAvatar = type == TYPE_MEDIA; if (type == TYPE_STORIES_SEARCH) { - actionBar.setTitle("#" + hashtag); + actionBar.setTitle(hashtag); } else { titlesContainer = new FrameLayout(context); avatarContainer.addView(titlesContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/MessagePreviewView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/MessagePreviewView.java index f574222780a..4fead7e1e44 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/MessagePreviewView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/MessagePreviewView.java @@ -382,7 +382,7 @@ public boolean drawChild(Canvas canvas, View child, long drawingTime) { cell.drawMessageText(canvas); if ((cell.getCurrentMessagesGroup() == null || cell.getCurrentPosition() != null && ((cell.getCurrentPosition().flags & cell.captionFlag()) != 0 && (cell.getCurrentPosition().flags & MessageObject.POSITION_FLAG_LEFT) != 0 || cell.getCurrentMessagesGroup() != null && cell.getCurrentMessagesGroup().isDocuments)) || cell.getTransitionParams().animateBackgroundBoundsInner) { cell.drawCaptionLayout(canvas, false, cell.getAlpha()); - cell.drawReactionsLayout(canvas, cell.getAlpha()); + cell.drawReactionsLayout(canvas, cell.getAlpha(), null); } if (cell.getCurrentMessagesGroup() != null || cell.getTransitionParams().animateBackgroundBoundsInner) { cell.drawNamesLayout(canvas, cell.getAlpha()); @@ -1471,11 +1471,11 @@ private void setOffset(float yOffset, int chatTopOffset) { chatPreviewContainer.setTranslationY(0); menu.setTranslationY(0); } else { - actionBar.setTranslationY(chatTopOffset); + actionBar.setTranslationY(Math.max(0, chatTopOffset)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { chatPreviewContainer.invalidateOutline(); } - chatPreviewContainer.setTranslationY(yOffset); + chatPreviewContainer.setTranslationY(Math.max(0, yOffset)); menu.setTranslationY(yOffset + chatPreviewContainer.getMeasuredHeight() - dp(2)); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/EntityView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/EntityView.java index dad03d4d349..aaf119272cd 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/EntityView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/EntityView.java @@ -138,6 +138,8 @@ public void setPosition(Point value) { updatePosition(); } + public void setIsVideo(boolean isVideo) {} + protected float getMaxScale() { return 100f; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LinkPreview.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LinkPreview.java index acbf2bbc3df..7797322ffb1 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LinkPreview.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LinkPreview.java @@ -105,17 +105,17 @@ public void setVideoTexture() { public int type, color; private WebPagePreview webpage; - private float w, h; + public float w, h; private float previewHeight; private float photoHeight; - private void setupLayout() { + public void setupLayout() { if (!relayout || webpage == null) { return; } - final String text = TextUtils.isEmpty(webpage.name) ? fromUrl(webpage.url) : webpage.name; if (withPreview()) { + final String text = TextUtils.isEmpty(webpage.name) ? fromUrl(webpage.url) : webpage.name; final TLRPC.WebPage preview = this.webpage.webpage; float maxWidth = this.maxWidth - padx - padx; @@ -213,7 +213,7 @@ private void setupLayout() { h += 11 * density; } else { - + final String text = TextUtils.isEmpty(webpage.name) ? fromUrlWithoutSchema(webpage.url).toUpperCase() : webpage.name; float maxWidth = this.maxWidth - padx - padx - (padding.left + iconSize + iconPadding + padding.right) * density; textScale = 1f; layout = new StaticLayout(TextUtils.ellipsize(text, layoutPaint, (int) Math.ceil(maxWidth), TextUtils.TruncateAt.END), layoutPaint, (int) Math.ceil(maxWidth), Layout.Alignment.ALIGN_NORMAL, 1f, 0f, false); @@ -303,6 +303,13 @@ public static String fromUrl(String url) { return url; } + public static String fromUrlWithoutSchema(String url) { + if (url.startsWith("https://")) { + return url.substring(8); + } + return url; + } + private final RectF bounds = new RectF(); private final RectF rect = new RectF(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LinkView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LinkView.java index ed9e0176e42..525a35c3f87 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LinkView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LinkView.java @@ -10,7 +10,6 @@ import android.view.ViewGroup; import org.telegram.messenger.AndroidUtilities; -import org.telegram.tgnet.TLRPC; import org.telegram.tgnet.tl.TL_stories; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.Point; @@ -21,6 +20,7 @@ public class LinkView extends EntityView { public final LinkPreview marker; private int currentColor; private int currentType; + private boolean hasColor; public LinkPreview.WebPagePreview link; public TL_stories.MediaArea mediaArea; @@ -45,13 +45,13 @@ protected float getStickyPaddingBottom() { return marker.pady; } - public LinkView(Context context, Point position, int currentAccount, LinkPreview.WebPagePreview link, TL_stories.MediaArea mediaArea, float density, int maxWidth, int type, int color) { + public LinkView(Context context, Point position, int currentAccount, LinkPreview.WebPagePreview link, TL_stories.MediaArea mediaArea, float density, int maxWidth, int type) { super(context, position); marker = new LinkPreview(context, density); marker.setMaxWidth(maxWidth); setLink(currentAccount, link, mediaArea); - marker.setType(currentType = type, currentColor = color); + marker.setType(currentType = type, currentColor); addView(marker, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP)); setClipChildren(false); @@ -87,12 +87,14 @@ public void setType(int type) { marker.setType(currentType = type, currentColor); } - public void setType(int type, int color) { - marker.setType(currentType = type, currentColor = color); - } public void setColor(int color) { - setType(currentType, color); + hasColor = true; + currentColor = color; + } + + public boolean hasColor() { + return hasColor; } public int getColor() { @@ -103,6 +105,14 @@ public int getType() { return currentType; } + public int getNextType() { + int nextType = currentType + 1; + if (nextType == 4) { + return hasColor ? 0 : 1; + } + return nextType; + } + @Override protected float getMaxScale() { return 1.5f; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LocationMarker.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LocationMarker.java index e6bc6c97f61..7b82f8ff5ca 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LocationMarker.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LocationMarker.java @@ -4,16 +4,12 @@ import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; -import android.graphics.LinearGradient; -import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; -import android.graphics.PixelFormat; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.Rect; import android.graphics.RectF; -import android.graphics.Shader; import android.graphics.drawable.Drawable; import android.text.Layout; import android.text.StaticLayout; @@ -24,25 +20,27 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import org.checkerframework.checker.units.qual.A; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.Emoji; -import org.telegram.messenger.FileLoader; import org.telegram.messenger.ImageLocation; import org.telegram.messenger.ImageReceiver; import org.telegram.messenger.MediaDataController; +import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.R; import org.telegram.tgnet.TLRPC; -import org.telegram.ui.Components.AnimatedEmojiDrawable; import org.telegram.ui.Components.AnimatedFloat; import org.telegram.ui.Components.CubicBezierInterpolator; -import org.telegram.ui.Components.Paint.PaintTypeface; import org.telegram.ui.Stories.recorder.HintView2; -import java.util.concurrent.CountDownLatch; +import java.util.ArrayList; public class LocationMarker extends View { + public static final int VARIANT_LOCATION = 0; + public static final int VARIANT_WEATHER = 1; + + public final int variant; + private int maxWidth; private String text = ""; private boolean relayout; @@ -55,12 +53,14 @@ public class LocationMarker extends View { private final float iconSize = 21.33f; private final TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); - private final Paint outlinePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + public final Paint outlinePaint = new Paint(Paint.ANTI_ALIAS_FLAG); private final Drawable icon; private boolean hasFlag; private final ImageReceiver flagImageReceiver = new ImageReceiver(this); + private final ImageReceiver flagAnimatedImageReceiver = new ImageReceiver(this); private TLRPC.Document flagDocument; + private TLRPC.Document flagAnimatedDocument; private boolean forceEmoji; public final float density; @@ -71,19 +71,27 @@ public class LocationMarker extends View { public final int type; public final int padx, pady; - public LocationMarker(Context context, float density, int type) { + public LocationMarker(Context context, int variant, float density, int type) { super(context); + + this.variant = variant; this.density = density; flagImageReceiver.setCrossfadeWithOldImage(true); + flagImageReceiver.setInvalidateAll(true); + flagAnimatedImageReceiver.setCrossfadeWithOldImage(true); + flagAnimatedImageReceiver.setInvalidateAll(true); padx = (int) (3 * density); pady = (int) (1 * density); + setPadding(padx, pady, padx, pady); this.type = type; icon = context.getResources().getDrawable(R.drawable.map_pin3).mutate(); textPaint.setTextSize(24 * density); textPaint.setTypeface(AndroidUtilities.getTypeface("fonts/rcondensedbold.ttf")); + + NotificationCenter.listenEmojiLoading(this); } public void setMaxWidth(int maxWidth) { @@ -99,83 +107,110 @@ public void forceEmoji() { private Drawable getEmojiThumb(String emoji) { Drawable drawable = Emoji.getEmojiBigDrawable(emoji); + if (drawable instanceof Emoji.SimpleEmojiDrawable) { + ((Emoji.SimpleEmojiDrawable) drawable).fullSize = false; + } if (drawable == null) { return null; } + final Drawable emojiDrawable = drawable; return new Drawable() { @Override public void draw(@NonNull Canvas canvas) { canvas.save(); - if (drawable.getBounds() != null) { - canvas.scale(1f / SCALE, 1f / SCALE, drawable.getBounds().centerX(), drawable.getBounds().centerY()); + if (emojiDrawable.getBounds() != null) { + canvas.scale(1f / SCALE, 1f / SCALE, emojiDrawable.getBounds().centerX(), emojiDrawable.getBounds().centerY()); } - drawable.draw(canvas); + emojiDrawable.draw(canvas); canvas.restore(); } @Override public void setAlpha(int alpha) { - drawable.setAlpha(alpha); + emojiDrawable.setAlpha(alpha); } @Override public void setColorFilter(@Nullable ColorFilter colorFilter) { - drawable.setColorFilter(colorFilter); + emojiDrawable.setColorFilter(colorFilter); } @Override public void setBounds(@NonNull Rect bounds) { - drawable.setBounds(bounds); + emojiDrawable.setBounds(bounds); } @Override public void setBounds(int left, int top, int right, int bottom) { - drawable.setBounds(left, top, right, bottom); + emojiDrawable.setBounds(left, top, right, bottom); } @Override public int getOpacity() { - return drawable.getOpacity(); + return emojiDrawable.getOpacity(); } }; } - public void setCountryCodeEmoji(int currentAccount, String emoji) { + public void setCodeEmoji(int currentAccount, String emoji) { if (TextUtils.isEmpty(emoji)) { hasFlag = false; + flagDocument = null; + flagAnimatedDocument = null; flagImageReceiver.clearImage(); + flagAnimatedImageReceiver.clearImage(); } else { hasFlag = true; flagDocument = null; -// TLRPC.TL_inputStickerSetShortName inputStickerSetShortName = new TLRPC.TL_inputStickerSetShortName(); -// inputStickerSetShortName.short_name = "RestrictedEmoji"; -// TLRPC.TL_messages_stickerSet instantSet = MediaDataController.getInstance(currentAccount).getStickerSet(inputStickerSetShortName, 0, false, set -> { -// flagDocument = findDocument(set, emoji); -// if (flagDocument == null) { - TLRPC.TL_inputStickerSetShortName inputStickerSetShortName2 = new TLRPC.TL_inputStickerSetShortName(); - inputStickerSetShortName2.short_name = "StaticEmoji"; - MediaDataController.getInstance(currentAccount).getStickerSet(inputStickerSetShortName2, 0, false, set2 -> { - flagDocument = findDocument(set2, emoji); - flagImageReceiver.setImage( - ImageLocation.getForDocument(flagDocument), "80_80", - getEmojiThumb(emoji), - null, null, 0 - ); - }); -// return; -// } -// flagImageReceiver.setImage( -// ImageLocation.getForDocument(flagDocument), "80_80", -// getEmojiThumb(emoji), -// null, null, 0 -// ); -// }); -// flagDocument = findDocument(instantSet, emoji); + flagAnimatedDocument = null; + + TLRPC.TL_inputStickerSetShortName inputStickerSetShortName2 = new TLRPC.TL_inputStickerSetShortName(); + inputStickerSetShortName2.short_name = "StaticEmoji"; + MediaDataController.getInstance(currentAccount).getStickerSet(inputStickerSetShortName2, 0, false, set2 -> { + flagDocument = findDocument(set2, emoji); + flagImageReceiver.setImage( + ImageLocation.getForDocument(flagDocument), "80_80", + getEmojiThumb(emoji), + null, null, 0 + ); + flagAnimatedImageReceiver.setImage( + ImageLocation.getForDocument(flagAnimatedDocument), "80_80", + ImageLocation.getForDocument(flagDocument), "80_80", + null, null, + getEmojiThumb(emoji), + 0, null, null, 0 + ); + }); + + TLRPC.TL_inputStickerSetShortName inputStickerSetShortName = new TLRPC.TL_inputStickerSetShortName(); + inputStickerSetShortName.short_name = "RestrictedEmoji"; + TLRPC.TL_messages_stickerSet instantSet = MediaDataController.getInstance(currentAccount).getStickerSet(inputStickerSetShortName, 0, false, set -> { + flagAnimatedDocument = findDocument(set, emoji); + if (flagAnimatedDocument == null) { + return; + } + flagAnimatedImageReceiver.setImage( + ImageLocation.getForDocument(flagAnimatedDocument), "80_80", + ImageLocation.getForDocument(flagDocument), "80_80", + null, null, + getEmojiThumb(emoji), + 0, null, null, 0 + ); + }); + flagImageReceiver.setImage( ImageLocation.getForDocument(flagDocument), "80_80", getEmojiThumb(emoji), null, null, 0 ); + + flagAnimatedImageReceiver.setImage( + ImageLocation.getForDocument(flagAnimatedDocument), "80_80", + ImageLocation.getForDocument(flagDocument), "80_80", + null, null, + getEmojiThumb(emoji), + 0, null, null, 0 + ); } this.relayout = true; requestLayout(); @@ -187,7 +222,8 @@ private TLRPC.Document findDocument(TLRPC.TL_messages_stickerSet set, String emo } for (int i = 0; i < set.packs.size(); ++i) { TLRPC.TL_stickerPack pack = set.packs.get(i); - if (pack.emoticon.contains(emoji) && !pack.documents.isEmpty()) { + + if (containsEmoji(pack.emoticon, emoji) && !pack.documents.isEmpty()) { long documentId = pack.documents.get(0); for (int j = 0; j < set.documents.size(); ++j) { if (set.documents.get(j).id == documentId) { @@ -199,20 +235,47 @@ private TLRPC.Document findDocument(TLRPC.TL_messages_stickerSet set, String emo return null; } - public TLRPC.Document getCountryCodeEmojiDocument() { - return flagDocument; + private boolean containsEmoji(String emojiString, String emoji) { + if (emojiString == null || emoji == null) return false; + ArrayList<Emoji.EmojiSpanRange> emojis = Emoji.parseEmojis(emojiString); + for (int i = 0; i < emojis.size(); ++i) { + if (TextUtils.equals(emojis.get(i).code, emoji)) { + return true; + } + } + return false; + } + + public TLRPC.Document getCodeEmojiDocument() { + return isVideo && flagAnimatedDocument != null ? flagAnimatedDocument : flagDocument; } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); - flagImageReceiver.onAttachedToWindow(); + attachInternal(); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); + detachInternal(); + } + + private boolean attachedToWindow; + public void attachInternal() { + attachedToWindow = true; + if (isVideo) { + flagAnimatedImageReceiver.onAttachedToWindow(); + } else { + flagImageReceiver.onAttachedToWindow(); + } + } + + public void detachInternal() { + attachedToWindow = false; flagImageReceiver.onDetachedFromWindow(); + flagAnimatedImageReceiver.onDetachedFromWindow(); } public void setText(String text) { @@ -226,31 +289,49 @@ public String getText() { } public void setType(int type, int color) { - if (this.type == 1) return; if (type == 0) { - outlinePaint.setColor(color); - final int textColor = AndroidUtilities.computePerceivedBrightness(color) >= .721f ? Color.BLACK : Color.WHITE; - textPaint.setColor(textColor); - icon.setColorFilter(new PorterDuffColorFilter(textColor, PorterDuff.Mode.SRC_IN)); - } else if (type == 1) { outlinePaint.setColor(0xFF000000); textPaint.setColor(0xFFFFFFFF); icon.setColorFilter(new PorterDuffColorFilter(0xFFFFFFFF, PorterDuff.Mode.SRC_IN)); - } else if (type == 2) { + } else if (type == 1) { outlinePaint.setColor(0x4C000000); textPaint.setColor(0xFFFFFFFF); icon.setColorFilter(null); - } else { + } else if (type == 2) { outlinePaint.setColor(0xFFFFFFFF); textPaint.setColor(0xFF000000); icon.setColorFilter(null); + } else { + outlinePaint.setColor(color); + final int textColor = AndroidUtilities.computePerceivedBrightness(color) >= .721f ? Color.BLACK : Color.WHITE; + textPaint.setColor(textColor); + icon.setColorFilter(new PorterDuffColorFilter(textColor, PorterDuff.Mode.SRC_IN)); } invalidate(); } + private boolean isVideo; + public void setIsVideo(boolean isVideo) { + if (this.isVideo != isVideo && attachedToWindow) { + if (isVideo) { + flagImageReceiver.onDetachedFromWindow(); + flagAnimatedImageReceiver.onAttachedToWindow(); + } else { + flagImageReceiver.onAttachedToWindow(); + flagAnimatedImageReceiver.onDetachedFromWindow(); + } + } + this.isVideo = isVideo; + invalidate(); + } + + public int getTypesCount() { + return 4; + } + private float w, h; - private void setupLayout() { + public void setupLayout() { if (!relayout) { return; } @@ -285,7 +366,15 @@ private void setupLayout() { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setupLayout(); - setMeasuredDimension(padx + (int) Math.round(w) + padx, pady + (int) Math.round(h) + pady); + setMeasuredDimension(getWidthInternal(), getHeightInternal()); + } + + public int getWidthInternal() { + return padx + (int) Math.round(w) + padx; + } + + public int getHeightInternal() { + return pady + (int) Math.round(h) + pady; } private final RectF bounds = new RectF(); @@ -297,6 +386,12 @@ public float getRadius() { @Override protected void dispatchDraw(Canvas canvas) { + drawInternal(canvas); + } + + private AnimatedFloat animatedVideo = new AnimatedFloat(this, 350, CubicBezierInterpolator.EASE_OUT_QUINT); + + public void drawInternal(Canvas canvas) { setupLayout(); if (layout == null) { return; @@ -306,22 +401,38 @@ protected void dispatchDraw(Canvas canvas) { canvas.drawRoundRect(bounds, .2f * h, .2f * h, outlinePaint); if (hasFlag) { - flagImageReceiver.setImageCoords( - padx + (padding.left + flagIconPadding) * density, pady + (h - iconSize * density) / 2, - iconSize * density, iconSize * density - ); - canvas.save(); - canvas.scale(SCALE, SCALE, flagImageReceiver.getCenterX(), flagImageReceiver.getCenterY()); - flagImageReceiver.draw(canvas); - canvas.restore(); + float video = animatedVideo.set(isVideo); + + if (video > 0) { + flagAnimatedImageReceiver.setImageCoords( + padx + (padding.left + flagIconPadding) * density, pady + (h - iconSize * density) / 2, + iconSize * density, iconSize * density + ); + canvas.save(); + canvas.scale(SCALE, SCALE, flagAnimatedImageReceiver.getCenterX(), flagAnimatedImageReceiver.getCenterY()); + flagAnimatedImageReceiver.setAlpha(video); + flagAnimatedImageReceiver.draw(canvas); + canvas.restore(); + } + if (video < 1) { + flagImageReceiver.setImageCoords( + padx + (padding.left + flagIconPadding) * density, pady + (h - iconSize * density) / 2, + iconSize * density, iconSize * density + ); + canvas.save(); + canvas.scale(SCALE, SCALE, flagImageReceiver.getCenterX(), flagImageReceiver.getCenterY()); + flagImageReceiver.setAlpha(1f - video); + flagImageReceiver.draw(canvas); + canvas.restore(); + } } else if (forceEmoji) { } else { icon.setBounds( - padx + (int) (padding.left * density), - pady + (int) ((h - iconSize * density) / 2), - padx + (int) ((padding.left + iconSize) * density), - pady + (int) ((h + iconSize * density) / 2) + padx + (int) (padding.left * density), + pady + (int) ((h - iconSize * density) / 2), + padx + (int) ((padding.left + iconSize) * density), + pady + (int) ((h + iconSize * density) / 2) ); icon.draw(canvas); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LocationView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LocationView.java index b5cffa37d67..22ca4454a4f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LocationView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/LocationView.java @@ -19,6 +19,8 @@ public class LocationView extends EntityView { public final LocationMarker marker; + + private boolean hasColor; private int currentColor; private int currentType; @@ -68,13 +70,13 @@ public static String geo(double Lat, double Long) { return deg(Lat) + (Lat > 0 ? "N" : "S") + " " + deg(Long) + (Long > 0 ? "E" : "W"); } - public LocationView(Context context, Point position, int currentAccount, TLRPC.MessageMedia location, TL_stories.MediaArea mediaArea, float density, int maxWidth, int type, int color) { + public LocationView(Context context, Point position, int currentAccount, TLRPC.MessageMedia location, TL_stories.MediaArea mediaArea, float density, int maxWidth) { super(context, position); - marker = new LocationMarker(context, density, 0); + marker = new LocationMarker(context, LocationMarker.VARIANT_LOCATION, density, 0); marker.setMaxWidth(maxWidth); setLocation(currentAccount, location, mediaArea); - marker.setType(currentType = type, currentColor = color); + marker.setType(0, currentColor); addView(marker, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP)); setClipChildren(false); @@ -97,7 +99,7 @@ public void setLocation(int currentAccount, TLRPC.MessageMedia location, TL_stor } else { title = ""; } - marker.setCountryCodeEmoji(currentAccount, countryCodeEmoji); + marker.setCodeEmoji(currentAccount, countryCodeEmoji); marker.setText(title); updateSelectionView(); @@ -119,16 +121,21 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { updatePosition(); } - public void setType(int type) { - marker.setType(currentType = type, currentColor); + public void setColor(int color) { + hasColor = true; + currentColor = color; } - public void setType(int type, int color) { - marker.setType(currentType = type, currentColor = color); + public boolean hasColor() { + return hasColor; } - public void setColor(int color) { - setType(currentType, color); + public void setType(int type) { + marker.setType(currentType = type, currentColor); + } + + public int getTypesCount() { + return marker.getTypesCount() - (hasColor ? 0 : 1); } public int getColor() { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/MessageEntityView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/MessageEntityView.java index 637dceab271..a5d22456fa2 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/MessageEntityView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/MessageEntityView.java @@ -328,7 +328,7 @@ private void drawChatForegroundElements(Canvas canvas) { if (cell.getTransitionParams().wasDraw) { canvas.translate(canvasOffsetX, canvasOffsetY); cell.setInvalidatesParent(true); - cell.drawReactionsLayout(canvas, alpha); + cell.drawReactionsLayout(canvas, alpha, null); cell.setInvalidatesParent(false); canvas.restore(); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/WeatherView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/WeatherView.java new file mode 100644 index 00000000000..c9abdd9bef5 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Paint/Views/WeatherView.java @@ -0,0 +1,237 @@ +package org.telegram.ui.Components.Paint.Views; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; +import android.view.Gravity; +import android.view.ViewGroup; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.BuildVars; +import org.telegram.messenger.UserConfig; +import org.telegram.tgnet.tl.TL_stories; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.Point; +import org.telegram.ui.Components.Rect; +import org.telegram.ui.Stories.recorder.Weather; + +public class WeatherView extends EntityView { + + public final LocationMarker marker; + + private boolean hasColor; + private int currentColor; + private int currentType; + + public Weather.State weather; + + @Override + protected float getStickyPaddingLeft() { + return marker.padx; + } + + @Override + protected float getStickyPaddingTop() { + return marker.pady; + } + + @Override + protected float getStickyPaddingRight() { + return marker.padx; + } + + @Override + protected float getStickyPaddingBottom() { + return marker.pady; + } + + public WeatherView(Context context, Point position, int currentAccount, Weather.State weather, float density, int maxWidth) { + super(context, position); + + marker = new LocationMarker(context, LocationMarker.VARIANT_WEATHER, density, 0); + marker.setMaxWidth(maxWidth); + marker.setType(0, currentColor); + setWeather(currentAccount, weather); + addView(marker, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP)); + + setClipChildren(false); + setClipToPadding(false); + + updatePosition(); + } + + public void setWeather(int currentAccount, Weather.State weather) { + this.weather = weather; + + String countryCodeEmoji = weather.getEmoji(); + String title = weather.getTemperature(); + marker.setCodeEmoji(currentAccount, countryCodeEmoji); + marker.setText(title); + + updateSelectionView(); + } + + public void setMaxWidth(int maxWidth) { + marker.setMaxWidth(maxWidth); + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + updatePosition(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + updatePosition(); + } + + public void setColor(int color) { + hasColor = true; + currentColor = color; + } + + public boolean hasColor() { + return hasColor; + } + + public void setType(int type) { + marker.setType(currentType = type, currentColor); + } + + public int getTypesCount() { + return marker.getTypesCount() - (hasColor ? 0 : 1); + } + + public int getColor() { + return currentColor; + } + + @Override + public void setIsVideo(boolean isVideo) { + marker.setIsVideo(true); + } + + public int getType() { + return currentType; + } + + @Override + protected float getMaxScale() { + return 1.5f; + } + + @Override + public Rect getSelectionBounds() { + ViewGroup parentView = (ViewGroup) getParent(); + if (parentView == null) { + return new Rect(); + } + float scale = parentView.getScaleX(); + float width = getMeasuredWidth() * getScale() + AndroidUtilities.dp(64) / scale; + float height = getMeasuredHeight() * getScale() + AndroidUtilities.dp(64) / scale; + float left = (getPositionX() - width / 2.0f) * scale; + float right = left + width * scale; + return new Rect(left, (getPositionY() - height / 2f) * scale, right - left, height * scale); + } + + protected TextViewSelectionView createSelectionView() { + return new TextViewSelectionView(getContext()); + } + + public class TextViewSelectionView extends SelectionView { + + private final Paint clearPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + + public TextViewSelectionView(Context context) { + super(context); + clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); + } + + @Override + protected int pointInsideHandle(float x, float y) { + float thickness = AndroidUtilities.dp(1.0f); + float radius = AndroidUtilities.dp(19.5f); + + float inset = radius + thickness; + float width = getMeasuredWidth() - inset * 2; + float height = getMeasuredHeight() - inset * 2; + + float middle = inset + height / 2.0f; + + if (x > inset - radius && y > middle - radius && x < inset + radius && y < middle + radius) { + return SELECTION_LEFT_HANDLE; + } else if (x > inset + width - radius && y > middle - radius && x < inset + width + radius && y < middle + radius) { + return SELECTION_RIGHT_HANDLE; + } + + if (x > inset && x < width && y > inset && y < height) { + return 0; + } + + return 0; + } + + private Path path = new Path(); + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + int count = canvas.getSaveCount(); + + float alpha = getShowAlpha(); + if (alpha <= 0) { + return; + } else if (alpha < 1) { + canvas.saveLayerAlpha(0, 0, getWidth(), getHeight(), (int) (0xFF * alpha), Canvas.ALL_SAVE_FLAG); + } + + float thickness = AndroidUtilities.dp(2.0f); + float radius = AndroidUtilities.dpf2(5.66f); + + float inset = radius + thickness + AndroidUtilities.dp(15); + + float width = getMeasuredWidth() - inset * 2; + float height = getMeasuredHeight() - inset * 2; + + AndroidUtilities.rectTmp.set(inset, inset, inset + width, inset + height); + + float R = AndroidUtilities.dp(12); + float rx = Math.min(R, width / 2f), ry = Math.min(R, height / 2f); + + path.rewind(); + AndroidUtilities.rectTmp.set(inset, inset, inset + rx * 2, inset + ry * 2); + path.arcTo(AndroidUtilities.rectTmp, 180, 90); + AndroidUtilities.rectTmp.set(inset + width - rx * 2, inset, inset + width, inset + ry * 2); + path.arcTo(AndroidUtilities.rectTmp, 270, 90); + canvas.drawPath(path, paint); + + path.rewind(); + AndroidUtilities.rectTmp.set(inset, inset + height - ry * 2, inset + rx * 2, inset + height); + path.arcTo(AndroidUtilities.rectTmp, 180, -90); + AndroidUtilities.rectTmp.set(inset + width - rx * 2, inset + height - ry * 2, inset + width, inset + height); + path.arcTo(AndroidUtilities.rectTmp, 90, -90); + canvas.drawPath(path, paint); + + canvas.drawCircle(inset, inset + height / 2.0f, radius, dotStrokePaint); + canvas.drawCircle(inset, inset + height / 2.0f, radius - AndroidUtilities.dp(1) + 1, dotPaint); + + canvas.drawCircle(inset + width, inset + height / 2.0f, radius, dotStrokePaint); + canvas.drawCircle(inset + width, inset + height / 2.0f, radius - AndroidUtilities.dp(1) + 1, dotPaint); + + canvas.saveLayerAlpha(0, 0, getWidth(), getHeight(), 0xFF, Canvas.ALL_SAVE_FLAG); + + canvas.drawLine(inset, inset + ry, inset, inset + height - ry, paint); + canvas.drawLine(inset + width, inset + ry, inset + width, inset + height - ry, paint); + canvas.drawCircle(inset + width, inset + height / 2.0f, radius + AndroidUtilities.dp(1) - 1, clearPaint); + canvas.drawCircle(inset, inset + height / 2.0f, radius + AndroidUtilities.dp(1) - 1, clearPaint); + + canvas.restoreToCount(count); + } + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/PhonebookShareAlert.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/PhonebookShareAlert.java index f7ae50a4291..c63cc9941ff 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/PhonebookShareAlert.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/PhonebookShareAlert.java @@ -257,7 +257,7 @@ public PhonebookShareAlert(BaseFragment parent, ContactsController.Contact conta String name = ContactsController.formatName(firstName, lastName); ArrayList<TLRPC.User> result = null; ArrayList<AndroidUtilities.VcardItem> items = new ArrayList<>(); - ArrayList<TLRPC.TL_restrictionReason> vcard = null; + ArrayList<TLRPC.RestrictionReason> vcard = null; if (uri != null) { result = AndroidUtilities.loadVCardFromStream(uri, currentAccount, false, items, name); } else if (file != null) { @@ -920,7 +920,7 @@ public void onClick(DialogInterface dialog, int which) { } } currentUser.restriction_reason.clear(); - TLRPC.TL_restrictionReason reason = new TLRPC.TL_restrictionReason(); + TLRPC.RestrictionReason reason = new TLRPC.RestrictionReason(); reason.text = builder.toString(); reason.reason = ""; reason.platform = ""; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/GLIconRenderer.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/GLIconRenderer.java index e9292fd3c1c..60ba90c581f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/GLIconRenderer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/GLIconRenderer.java @@ -21,6 +21,7 @@ public class GLIconRenderer implements GLSurfaceView.Renderer { public float angleX = 0; public float angleX2 = 0; public float angleY = 0; + public float white = 0; private static final float Z_NEAR = 1f; private static final float Z_FAR = 200f; @@ -127,7 +128,7 @@ public void onDrawFrame(GL10 glUnused) { model.night = night; model.gradientColor1 = color1; model.gradientColor2 = color2; - model.draw(mMVPMatrix, mRotationMatrix, mWidth, mHeight, gradientStartX, gradientScaleX, gradientStartY, gradientScaleY, dt); + model.draw(mMVPMatrix, mRotationMatrix, mWidth, mHeight, gradientStartX, gradientScaleX, gradientStartY, gradientScaleY, white, dt); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/GLIconTextureView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/GLIconTextureView.java index fd77e60c80c..422ca0c40c8 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/GLIconTextureView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/GLIconTextureView.java @@ -244,6 +244,7 @@ public synchronized boolean isPaused() { @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { + ready = false; stopThread(); return false; } @@ -251,11 +252,11 @@ public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { public void stopThread() { if (thread != null) { isRunning = false; - try { - thread.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } +// try { +// thread.join(); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } thread = null; } @@ -269,6 +270,13 @@ public void setBackgroundBitmap(Bitmap gradientTextureBitmap) { mRenderer.setBackground(gradientTextureBitmap); } + private volatile boolean ready; + private volatile Runnable readyListener; + public void whenReady(Runnable whenReady) { + if (ready) whenReady.run(); + else readyListener = whenReady; + } + private class RenderThread extends Thread { @Override @@ -299,6 +307,11 @@ public void run() { float dt = (now - lastFrameTime) / 1000f; lastFrameTime = now; drawSingleFrame(dt); + if (!ready) { + ready = true; + AndroidUtilities.runOnUIThread(readyListener); + readyListener = null; + } } try { @@ -564,7 +577,7 @@ private void scheduleIdleAnimation(long time) { } - private void startIdleAnimation() { + protected void startIdleAnimation() { if (!attached) { return; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/Icon3D.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/Icon3D.java index f4842070cf5..46a0e1e19d2 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/Icon3D.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/GLIcon/Icon3D.java @@ -11,13 +11,11 @@ import android.graphics.Shader; import android.opengl.GLES20; import android.opengl.GLUtils; -import android.util.Log; import org.telegram.messenger.R; import org.telegram.messenger.SvgHelper; import org.telegram.messenger.Utilities; import org.telegram.ui.ActionBar.Theme; -import org.telegram.ui.Components.RLottieDrawable; import java.io.BufferedReader; import java.io.IOException; @@ -46,6 +44,7 @@ public class Icon3D { private int xOffsetHandle; private int alphaHandle; private int mTextureDataHandle; + private int whiteHandle; float xOffset; int[] trianglesCount; @@ -174,6 +173,7 @@ private void init(Context context) { alphaHandle = GLES20.glGetUniformLocation(mProgramObject, "f_alpha"); mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgramObject, "uMVPMatrix"); mWorldMatrixHandle = GLES20.glGetUniformLocation(mProgramObject, "world"); + whiteHandle = GLES20.glGetUniformLocation(mProgramObject, "white"); specHandleTop = GLES20.glGetUniformLocation(mProgramObject, "spec1"); specHandleBottom = GLES20.glGetUniformLocation(mProgramObject, "spec2"); @@ -314,7 +314,7 @@ private void generateTexture() { private float time = 0f; - public void draw(float[] mvpMatrix, float[] worldMatrix, int width, int height, float gradientStartX, float gradientScaleX, float gradientStartY, float gradientScaleY, float dt) { + public void draw(float[] mvpMatrix, float[] worldMatrix, int width, int height, float gradientStartX, float gradientScaleX, float gradientStartY, float gradientScaleY, float white, float dt) { if (backgroundBitmap != null) { GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mBackgroundTextureHandle); GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, backgroundBitmap, 0); @@ -323,6 +323,7 @@ public void draw(float[] mvpMatrix, float[] worldMatrix, int width, int height, GLES20.glUniform1i(mTextureUniformHandle, 0); GLES20.glUniform1f(xOffsetHandle, xOffset); GLES20.glUniform1f(alphaHandle, enterAlpha); + GLES20.glUniform1f(whiteHandle, white); GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0); GLES20.glUniformMatrix4fv(mWorldMatrixHandle, 1, false, worldMatrix, 0); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/LimitReachedBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/LimitReachedBottomSheet.java index 736963c67cd..847d94e1763 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/LimitReachedBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/LimitReachedBottomSheet.java @@ -1489,7 +1489,7 @@ public void setRestrictedUsers( ArrayList<Long> premiumInviteBlockedUsers ) { fromChat = chat; - canSendLink = ChatObject.canUserDoAdminAction(chat, ChatObject.ACTION_INVITE) || true; + canSendLink = ChatObject.canUserDoAdminAction(chat, ChatObject.ACTION_INVITE); restrictedUsers = new ArrayList<>(userRestrictedPrivacy); this.premiumMessagingBlockedUsers = premiumMessagingBlockedUsers; this.premiumInviteBlockedUsers = premiumInviteBlockedUsers; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/PremiumFeatureBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/PremiumFeatureBottomSheet.java index 863b092c012..bcf422c9e4f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/PremiumFeatureBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/PremiumFeatureBottomSheet.java @@ -755,6 +755,9 @@ void setFeatureDate(PremiumPreviewFragment.PremiumFeatureData featureData) { } else if (startType == PremiumPreviewFragment.PREMIUM_FEATURE_TRANSLATIONS) { title.setText(LocaleController.getString(R.string.PremiumPreviewTranslations)); description.setText(AndroidUtilities.replaceTags(LocaleController.getString(R.string.PremiumPreviewTranslationsDescription))); + } else if (startType == PremiumPreviewFragment.PREMIUM_FEATURE_MESSAGE_EFFECTS) { + title.setText(LocaleController.getString(R.string.PremiumPreviewEffects)); + description.setText(AndroidUtilities.replaceTags(LocaleController.getString(R.string.PremiumPreviewEffectsDescription))); } else if (startType == PremiumPreviewFragment.PREMIUM_FEATURE_WALLPAPER) { title.setText(LocaleController.getString(R.string.PremiumPreviewWallpaper)); description.setText(AndroidUtilities.replaceTags(LocaleController.getString(R.string.PremiumPreviewWallpaperDescription))); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/PremiumPreviewBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/PremiumPreviewBottomSheet.java index b810578bd75..f03d62325e8 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/PremiumPreviewBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/PremiumPreviewBottomSheet.java @@ -196,7 +196,8 @@ public PremiumPreviewBottomSheet setAnimateConfettiWithStars(boolean animateConf return this; } - private void showDialog(Dialog dialog) { + @Override + public boolean showDialog(Dialog dialog) { if (iconTextureView != null) { iconTextureView.setDialogVisible(true); } @@ -208,6 +209,7 @@ private void showDialog(Dialog dialog) { starParticlesView.setPaused(false); }); dialog.show(); + return true; } @Override diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/ProfilePremiumCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/ProfilePremiumCell.java index 6f8345f57a4..f189668ddf3 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/ProfilePremiumCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/ProfilePremiumCell.java @@ -1,53 +1,41 @@ package org.telegram.ui.Components.Premium; +import static org.telegram.messenger.AndroidUtilities.dp; + import android.content.Context; import android.graphics.Canvas; import org.telegram.messenger.AndroidUtilities; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Cells.TextCell; +import org.telegram.ui.Stars.StarsReactionsSheet; public class ProfilePremiumCell extends TextCell { - StarParticlesView.Drawable drawable = new StarParticlesView.Drawable(6); + private final StarsReactionsSheet.Particles particles = new StarsReactionsSheet.Particles(StarsReactionsSheet.Particles.TYPE_RADIAL, 30); + private final int colorKey; public ProfilePremiumCell(Context context, int type, Theme.ResourcesProvider resourcesProvider) { super(context, resourcesProvider); - drawable.size1 = 6; - drawable.size2 = 6; - drawable.size3 = 6; - drawable.useGradient = true; - drawable.speedScale = 3f; - drawable.minLifeTime = 600; - drawable.randLifeTime = 500; - drawable.startFromCenter = true; - drawable.useRotate = true; - drawable.type = StarParticlesView.Drawable.TYPE_SETTINGS; - if (type == 1) { - drawable.useGradient = false; - drawable.colorKey = Theme.key_starsGradient1; - } - - drawable.init(); + colorKey = type == 1 ? Theme.key_starsGradient1 : Theme.key_premiumGradient2; } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); float cx = imageView.getX() + imageView.getWidth() / 2f; - float cy = imageView.getPaddingTop() + imageView.getY() + imageView.getHeight() / 2f - AndroidUtilities.dp(3); - drawable.rect.set( - cx - AndroidUtilities.dp(4), cy - AndroidUtilities.dp(4), - cx + AndroidUtilities.dp(4), cy + AndroidUtilities.dp(4) + float cy = imageView.getPaddingTop() + imageView.getY() + imageView.getHeight() / 2f - dp(3); + AndroidUtilities.rectTmp.set( + cx - dp(16), cy - dp(16), + cx + dp(16), cy + dp(16) ); - if (changed) { - drawable.resetPositions(); - } + particles.setBounds(AndroidUtilities.rectTmp); } @Override protected void dispatchDraw(Canvas canvas) { - drawable.onDraw(canvas); + particles.process(); + particles.draw(canvas, Theme.getColor(colorKey)); invalidate(); super.dispatchDraw(canvas); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/ReassignBoostBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/ReassignBoostBottomSheet.java index 545a33d26e9..cb3a7f7d4e4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/ReassignBoostBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/ReassignBoostBottomSheet.java @@ -252,7 +252,7 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int view = new HeaderCell(context, 22); break; case HOLDER_TYPE_USER: - view = new SelectorUserCell(context, resourcesProvider, true); + view = new SelectorUserCell(context, true, resourcesProvider, true); break; default: view = new View(context); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/SelectorBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/SelectorBottomSheet.java index 0ac039d88d0..2f9f67ac316 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/SelectorBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/SelectorBottomSheet.java @@ -683,6 +683,6 @@ protected CharSequence getTitle() { @Override protected RecyclerListView.SelectionAdapter createAdapter(RecyclerListView listView) { - return selectorAdapter = new SelectorAdapter(getContext(), resourcesProvider); + return selectorAdapter = new SelectorAdapter(getContext(), true, resourcesProvider); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/UserSelectorBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/UserSelectorBottomSheet.java index 1693defd091..316d32515aa 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/UserSelectorBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/UserSelectorBottomSheet.java @@ -1,5 +1,6 @@ package org.telegram.ui.Components.Premium.boosts; +import static org.telegram.messenger.AndroidUtilities.checkAndroidTheme; import static org.telegram.messenger.AndroidUtilities.dp; import static org.telegram.messenger.LocaleController.getString; import static org.telegram.ui.Components.Premium.boosts.adapters.SelectorAdapter.VIEW_TYPE_TOP_SECTION; @@ -66,6 +67,7 @@ import org.telegram.ui.LaunchActivity; import org.telegram.ui.PrivacyControlActivity; import org.telegram.ui.ProfileActivity; +import org.telegram.ui.Stars.StarsIntroActivity; import org.telegram.ui.Stories.recorder.ButtonWithCounterView; import java.util.ArrayList; @@ -76,6 +78,12 @@ import java.util.Map; public class UserSelectorBottomSheet extends BottomSheetWithRecyclerListView implements NotificationCenter.NotificationCenterDelegate { + + public int type; + + public static final int TYPE_PREMIUM = 0; + public static final int TYPE_STARS = 1; + private static UserSelectorBottomSheet instance; public static void open() { @@ -83,6 +91,10 @@ public static void open() { } public static void open(long userId, BirthdayController.BirthdayState birthdayState) { + open(TYPE_PREMIUM, userId, birthdayState); + } + + public static void open(int type, long userId, BirthdayController.BirthdayState birthdayState) { BaseFragment fragment = LaunchActivity.getLastFragment(); if (fragment == null) { return; @@ -90,8 +102,17 @@ public static void open(long userId, BirthdayController.BirthdayState birthdaySt if (instance != null) { return; } - UserSelectorBottomSheet sheet = new UserSelectorBottomSheet(fragment, userId, birthdayState, true); + final int finalType = type; + UserSelectorBottomSheet sheet = new UserSelectorBottomSheet(fragment, userId, birthdayState, type, true) { + @Override + protected int getType() { + return finalType; + } + }; if (fragment != null) { + if (!AndroidUtilities.isTablet() && !AndroidUtilities.hasDialogOnTop(fragment)) { + sheet.makeAttached(fragment); + } fragment.showDialog(sheet); } else { sheet.show(); @@ -176,15 +197,15 @@ private void loadData(String query) { } private void checkEditTextHint() { - if (selectedIds.size() > 0) { + if (!selectedIds.isEmpty() || type == TYPE_STARS) { if (!isHintSearchText) { isHintSearchText = true; - AndroidUtilities.runOnUIThread(() -> searchField.setHintText(getString("Search", R.string.Search), true), 10); + AndroidUtilities.runOnUIThread(() -> searchField.setHintText(getString(R.string.Search), true), 10); } } else { if (isHintSearchText) { isHintSearchText = false; - AndroidUtilities.runOnUIThread(() -> searchField.setHintText(getString("GiftPremiumUsersSearchHint", R.string.GiftPremiumUsersSearchHint), true), 10); + AndroidUtilities.runOnUIThread(() -> searchField.setHintText(getString(R.string.GiftPremiumUsersSearchHint), true), 10); } } } @@ -203,11 +224,12 @@ public void draw(@NonNull Canvas canvas, CharSequence text, int start, int end, }; } - public UserSelectorBottomSheet(BaseFragment fragment, long userId, BirthdayController.BirthdayState state, boolean needFocus) { + public UserSelectorBottomSheet(BaseFragment fragment, long userId, BirthdayController.BirthdayState state, int type, boolean needFocus) { super(fragment, needFocus, false, false, fragment.getResourceProvider()); + this.type = type; this.birthdays = state; - if (birthdays != null && !birthdays.today.isEmpty()) { + if (birthdays != null && !birthdays.today.isEmpty() && type == TYPE_PREMIUM) { for (TLRPC.User user : birthdays.today) { selectedIds.add(user.id); allSelectedObjects.put(user.id, user); @@ -255,7 +277,7 @@ protected void onLayout(boolean changed, int l, int t, int r, int b) { }; searchField.setBackgroundColor(getThemedColor(Theme.key_dialogBackground)); searchField.setOnSearchTextChange(this::onSearch); - searchField.setHintText(getString(!selectedIds.isEmpty() ? R.string.Search : R.string.GiftPremiumUsersSearchHint), false); + searchField.setHintText(getString(!selectedIds.isEmpty() || type == TYPE_STARS ? R.string.Search : R.string.GiftPremiumUsersSearchHint), false); sectionCell = new View(getContext()) { @Override @@ -287,13 +309,15 @@ protected float calculateCounterWidth(float width, float percent) { }; actionButton.setOnClickListener(v -> next()); buttonContainer.addView(actionButton, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48, Gravity.BOTTOM | Gravity.FILL_HORIZONTAL)); - containerView.addView(buttonContainer, LayoutHelper.createFrameMarginPx(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.BOTTOM | Gravity.FILL_HORIZONTAL, backgroundPaddingLeft, 0, backgroundPaddingLeft, 0)); + if (type != TYPE_STARS) { + containerView.addView(buttonContainer, LayoutHelper.createFrameMarginPx(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.BOTTOM | Gravity.FILL_HORIZONTAL, backgroundPaddingLeft, 0, backgroundPaddingLeft, 0)); + } bulletinContainer = new FrameLayout(getContext()); containerView.addView(bulletinContainer, LayoutHelper.createFrameMarginPx(LayoutHelper.MATCH_PARENT, 300, Gravity.BOTTOM | Gravity.FILL_HORIZONTAL, backgroundPaddingLeft, 0, backgroundPaddingLeft, dp(68))); selectorAdapter.setData(items, recyclerListView); - recyclerListView.setPadding(backgroundPaddingLeft, 0, backgroundPaddingLeft, dp(BOTTOM_HEIGHT_DP)); + recyclerListView.setPadding(backgroundPaddingLeft, 0, backgroundPaddingLeft, dp(type != TYPE_STARS ? BOTTOM_HEIGHT_DP : 0)); recyclerListView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { @@ -309,6 +333,17 @@ public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newStat } if (view instanceof SelectorUserCell) { TLRPC.User user = ((SelectorUserCell) view).getUser(); + if (type == TYPE_STARS) { + if (searchField != null) { + AndroidUtilities.hideKeyboard(searchField.getEditText()); + } + StarsIntroActivity.GiftStarsSheet sheet = new StarsIntroActivity.GiftStarsSheet(getContext(), resourcesProvider, user, this::dismiss); + if (!AndroidUtilities.isTablet()) { + sheet.makeAttached(attachedFragment); + } + sheet.show(); + return; + } long id = user.id; if (selectedIds.contains(id)) { selectedIds.remove(id); @@ -359,10 +394,12 @@ public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull R initHints(false); updateList(false, true); fixNavigationBar(); - BoostRepository.loadGiftOptions(null, arg -> { - paymentOptions.clear(); - paymentOptions.addAll(arg); - }); + if (type == TYPE_PREMIUM) { + BoostRepository.loadGiftOptions(null, arg -> { + paymentOptions.clear(); + paymentOptions.addAll(arg); + }); + } } private void initContacts(boolean needUpdate) { @@ -406,9 +443,13 @@ private void next() { } } AndroidUtilities.hideKeyboard(searchField.getEditText()); - List<TLRPC.TL_premiumGiftCodeOption> options = BoostRepository.filterGiftOptions(paymentOptions, selectedUsers.size()); - options = BoostRepository.filterGiftOptionsByBilling(options); - PremiumPreviewGiftToUsersBottomSheet.show(selectedUsers, options); + if (type == TYPE_STARS) { + + } else { + List<TLRPC.TL_premiumGiftCodeOption> options = BoostRepository.filterGiftOptions(paymentOptions, selectedUsers.size()); + options = BoostRepository.filterGiftOptionsByBilling(options); + PremiumPreviewGiftToUsersBottomSheet.show(selectedUsers, options); + } } public void scrollToTop(boolean animate) { @@ -539,6 +580,7 @@ private int addSection(ArrayList<SelectorAdapter.Item> items, CharSequence title int count = 0; boolean allSelected = true; for (TLRPC.User user : users) { + if (user == null || user.bot || UserObject.isService(user.id)) continue; if (user.id == userId) { continue; } @@ -593,6 +635,7 @@ public void updateItems(boolean animated, boolean notify) { int h = 0; if (isSearching()) { for (TLRPC.User foundedUser : foundedUsers) { + if (foundedUser == null || foundedUser.bot || UserObject.isService(foundedUser.id)) continue; h += dp(56); items.add(Item.asUser(foundedUser, selectedIds.contains(foundedUser.id)).withOptions(openOptions(foundedUser))); } @@ -649,8 +692,9 @@ public void updateItems(boolean animated, boolean notify) { if (birthdays != null && birthdays.contains(contact.user_id)) { continue; } - h += dp(56); TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(contact.user_id); + if (user == null || user.bot || UserObject.isService(user.id)) continue; + h += dp(56); if (selectedIds.contains(user.id)) selected.add(user.id); userItems.add(Item.asUser(user, selectedIds.contains(user.id)).withOptions(openOptions(user))); } @@ -700,22 +744,24 @@ public View.OnClickListener openOptions(TLRPC.User user) { .add(R.drawable.profile_discuss, LocaleController.getString(R.string.SendMessage), () -> { BaseFragment fragment = getBaseFragment(); if (user == null || fragment == null) return; - BaseFragment.BottomSheetParams bottomSheetParams = new BaseFragment.BottomSheetParams(); - bottomSheetParams.transitionFromLeft = true; - bottomSheetParams.allowNestedScroll = false; +// BaseFragment.BottomSheetParams bottomSheetParams = new BaseFragment.BottomSheetParams(); +// bottomSheetParams.transitionFromLeft = true; +// bottomSheetParams.allowNestedScroll = false; Bundle args = new Bundle(); args.putLong("user_id", user.id); - fragment.showAsSheet(new ChatActivity(args), bottomSheetParams); +// fragment.showAsSheet(new ChatActivity(args), bottomSheetParams); + fragment.presentFragment(new ChatActivity(args)); }) .add(R.drawable.msg_openprofile, LocaleController.getString(R.string.OpenProfile), () -> { BaseFragment fragment = getBaseFragment(); if (user == null || fragment == null) return; - BaseFragment.BottomSheetParams bottomSheetParams = new BaseFragment.BottomSheetParams(); - bottomSheetParams.transitionFromLeft = true; - bottomSheetParams.allowNestedScroll = false; +// BaseFragment.BottomSheetParams bottomSheetParams = new BaseFragment.BottomSheetParams(); +// bottomSheetParams.transitionFromLeft = true; +// bottomSheetParams.allowNestedScroll = false; Bundle args = new Bundle(); args.putLong("user_id", user.id); - fragment.showAsSheet(new ProfileActivity(args), bottomSheetParams); +// fragment.showAsSheet(new ProfileActivity(args), bottomSheetParams); + fragment.presentFragment(new ProfileActivity(args)); }) .show(); }; @@ -729,16 +775,23 @@ public void onConfigurationChanged(Configuration newConfig) { @Override protected CharSequence getTitle() { - return getString("GiftTelegramPremiumTitle", R.string.GiftTelegramPremiumTitle); + if (getType() == TYPE_STARS) { + return getString(R.string.GiftStarsTitle); + } + return getString(R.string.GiftTelegramPremiumTitle); } @Override protected RecyclerListView.SelectionAdapter createAdapter(RecyclerListView listView) { - selectorAdapter = new SelectorAdapter(getContext(), resourcesProvider); + selectorAdapter = new SelectorAdapter(getContext(), getType() != TYPE_STARS, resourcesProvider); selectorAdapter.setGreenSelector(true); return selectorAdapter; } + protected int getType() { + return TYPE_PREMIUM; + } + @Override public void dismiss() { AndroidUtilities.hideKeyboard(searchField.getEditText()); @@ -801,6 +854,7 @@ private void openBirthdaySetup() { } }), ConnectionsManager.RequestFlagDoNotWaitFloodWait); + MessagesController.getInstance(currentAccount).invalidateContentSettings(); MessagesController.getInstance(currentAccount).removeSuggestion(0, "BIRTHDAY_SETUP"); NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.newSuggestionsAvailable); updateItems(true, true); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/adapters/SelectorAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/adapters/SelectorAdapter.java index 733087fd760..acf4e02d26a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/adapters/SelectorAdapter.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/adapters/SelectorAdapter.java @@ -53,8 +53,11 @@ public class SelectorAdapter extends AdapterWithDiffUtils { private boolean isGreenSelector; private GraySectionCell topSectionCell; - public SelectorAdapter(Context context, Theme.ResourcesProvider resourcesProvider) { + public boolean needChecks; + + public SelectorAdapter(Context context, boolean needChecks, Theme.ResourcesProvider resourcesProvider) { this.context = context; + this.needChecks = needChecks; this.resourcesProvider = resourcesProvider; BoostRepository.loadParticipantsCount(result -> { chatsParticipantsCount.clear(); @@ -94,7 +97,7 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int if (viewType == VIEW_TYPE_PAD) { view = new View(context); } else if (viewType == VIEW_TYPE_USER) { - view = new SelectorUserCell(context, resourcesProvider, isGreenSelector); + view = new SelectorUserCell(context, needChecks, resourcesProvider, isGreenSelector); } else if (viewType == VIEW_TYPE_NO_USERS) { StickerEmptyView searchEmptyView = new StickerEmptyView(context, null, StickerEmptyView.STICKER_TYPE_SEARCH, resourcesProvider); searchEmptyView.title.setText(LocaleController.getString("NoResult", R.string.NoResult)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/cells/selector/SelectorUserCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/cells/selector/SelectorUserCell.java index c6dc58f115c..33ac8d5d04d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/cells/selector/SelectorUserCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Premium/boosts/cells/selector/SelectorUserCell.java @@ -10,6 +10,8 @@ import android.view.View; import android.widget.ImageView; +import androidx.annotation.Nullable; + import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ChatObject; import org.telegram.messenger.DialogObject; @@ -32,6 +34,7 @@ public class SelectorUserCell extends BaseCell { private final boolean[] isOnline = new boolean[1]; + @Nullable private final CheckBox2 checkBox; private final ImageView optionsView; private TLRPC.User user; @@ -39,22 +42,28 @@ public class SelectorUserCell extends BaseCell { private TL_stories.TL_myBoost boost; StatusBadgeComponent statusBadgeComponent; - public SelectorUserCell(Context context, Theme.ResourcesProvider resourcesProvider, boolean isGreen) { + public SelectorUserCell(Context context, boolean needCheck, Theme.ResourcesProvider resourcesProvider, boolean isGreen) { super(context, resourcesProvider); statusBadgeComponent = new StatusBadgeComponent(this); titleTextView.setTypeface(AndroidUtilities.bold()); + radioButton.setVisibility(View.GONE); - checkBox = new CheckBox2(context, 21, resourcesProvider); - if (isGreen) { - checkBox.setColor(Theme.key_checkbox, Theme.key_checkboxDisabled, Theme.key_dialogRoundCheckBoxCheck); + if (needCheck) { + checkBox = new CheckBox2(context, 21, resourcesProvider); + if (isGreen) { + checkBox.setColor(Theme.key_checkbox, Theme.key_checkboxDisabled, Theme.key_dialogRoundCheckBoxCheck); + } else { + checkBox.setColor(Theme.key_dialogRoundCheckBox, Theme.key_checkboxDisabled, Theme.key_dialogRoundCheckBoxCheck); + } + checkBox.setDrawUnchecked(true); + checkBox.setDrawBackgroundAsArc(10); + addView(checkBox); + checkBox.setChecked(false, false); + checkBox.setLayoutParams(LayoutHelper.createFrame(24, 24, Gravity.CENTER_VERTICAL | (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT), 13, 0, 14, 0)); + updateLayouts(); } else { - checkBox.setColor(Theme.key_dialogRoundCheckBox, Theme.key_checkboxDisabled, Theme.key_dialogRoundCheckBoxCheck); + checkBox = null; } - checkBox.setDrawUnchecked(true); - checkBox.setDrawBackgroundAsArc(10); - addView(checkBox); - checkBox.setChecked(false, false); - checkBox.setLayoutParams(LayoutHelper.createFrame(24, 24, Gravity.CENTER_VERTICAL | (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT), 13, 0, 14, 0)); optionsView = new ImageView(context); optionsView.setScaleType(ImageView.ScaleType.CENTER); @@ -97,12 +106,14 @@ public TL_stories.TL_myBoost getBoost() { } public void setChecked(boolean checked, boolean animated) { + if (checkBox == null) return; if (checkBox.getVisibility() == View.VISIBLE) { checkBox.setChecked(checked, animated); } } public void setCheckboxAlpha(float alpha, boolean animated) { + if (checkBox == null) return; if (animated) { if (Math.abs(checkBox.getAlpha() - alpha) > .1) { checkBox.animate().cancel(); @@ -125,7 +136,9 @@ public void setUser(TLRPC.User user) { isOnline[0] = false; setSubtitle(LocaleController.formatUserStatus(UserConfig.selectedAccount, user, isOnline)); subtitleTextView.setTextColor(Theme.getColor(isOnline[0] ? Theme.key_dialogTextBlue2 : Theme.key_dialogTextGray3, resourcesProvider)); - checkBox.setAlpha(1f); + if (checkBox != null) { + checkBox.setAlpha(1f); + } titleTextView.setRightDrawable(statusBadgeComponent.updateDrawable(user, Theme.getColor(Theme.key_chats_verifiedBackground), false)); } @@ -225,6 +238,6 @@ private String buildCountDownTime(long diff) { @Override protected boolean needCheck() { - return true; + return checkBox != null; } } \ No newline at end of file diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ProfileGalleryView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ProfileGalleryView.java index 16e9c0f9a5f..f398e6e297f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ProfileGalleryView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ProfileGalleryView.java @@ -446,10 +446,7 @@ public boolean onTouchEvent(MotionEvent ev) { isDownReleased = false; } else if (action == MotionEvent.ACTION_UP) { if (!isDownReleased) { - int itemsCount = dialogPhotos == null ? 0 : dialogPhotos.getCount(); - if (currentUploadingImageLocation != null) { - itemsCount++; - } + int itemsCount = getRealCount(); int currentItem = getCurrentItem(); if (itemsCount > 1) { if (ev.getX() > getWidth() / 3f) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/RLottieDrawable.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/RLottieDrawable.java index 94f437981e4..ae598fe55a1 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/RLottieDrawable.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/RLottieDrawable.java @@ -15,10 +15,8 @@ import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.RectF; -import android.graphics.RenderNode; import android.graphics.drawable.Animatable; import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Handler; import android.os.Looper; @@ -26,19 +24,8 @@ import android.view.HapticFeedbackConstants; import android.view.View; -import androidx.annotation.NonNull; - -import com.airbnb.lottie.LottieAnimationView; -import com.airbnb.lottie.LottieComposition; -import com.airbnb.lottie.LottieCompositionFactory; -import com.airbnb.lottie.LottieDrawable; -import com.airbnb.lottie.LottieListener; -import com.airbnb.lottie.LottieTask; -import com.airbnb.lottie.model.layer.CompositionLayer; -import com.google.android.exoplayer2.util.Log; import com.google.gson.Gson; -import org.checkerframework.checker.units.qual.A; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.DispatchQueue; @@ -49,7 +36,6 @@ import org.telegram.messenger.R; import org.telegram.messenger.Utilities; import org.telegram.messenger.utils.BitmapsCache; -import org.telegram.ui.ActionBar.Theme; import java.io.ByteArrayInputStream; import java.io.File; @@ -57,11 +43,9 @@ import java.io.FileNotFoundException; import java.io.FileReader; import java.io.InputStream; -import java.io.InputStreamReader; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.HashMap; -import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteger; @@ -145,8 +129,6 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma protected static final Handler uiHandler = new Handler(Looper.getMainLooper()); protected volatile boolean isRunning; protected volatile boolean isRecycled; - protected volatile LottieDrawable canvasDrawable; - protected volatile RenderNode[] canvasNodes; protected volatile AtomicInteger readyNodeIndex; protected volatile long nativePtr; protected volatile long secondNativePtr; @@ -270,7 +252,7 @@ protected void decodeFrameFinishedInternal() { recycleNativePtr(true); } } - if ((nativePtr == 0 || fallbackCache) && secondNativePtr == 0 && bitmapsCache == null && canvasDrawable == null) { + if ((nativePtr == 0 || fallbackCache) && secondNativePtr == 0 && bitmapsCache == null) { recycleResources(); return; } @@ -361,18 +343,6 @@ public void run() { FileLog.e(e); } } - if (airbnb) { - if (canvasNodes == null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - canvasNodes = new RenderNode[2]; - canvasNodes[0] = new RenderNode("rlottie1"); - canvasNodes[0].setClipToBounds(false); - canvasNodes[1] = new RenderNode("rlottie2"); - canvasNodes[1].setClipToBounds(false); - } - if (readyNodeIndex == null) { - readyNodeIndex = new AtomicInteger(0); - } - } if (backgroundBitmap != null) { try { if (!pendingColorUpdates.isEmpty()) { @@ -403,13 +373,6 @@ public void run() { int result = 0; int framesPerUpdates = shouldLimitFps ? 2 : 1; final long start = System.currentTimeMillis(); - if (airbnb) { - final long now = System.currentTimeMillis(); - if (lastDrawnTime > 0) { - framesPerUpdates = (int) Utilities.clamp((now - lastDrawnTime) / 16.0f, 10, 1); - } - lastDrawnTime = now; - } if (precache && bitmapsCache != null) { try { result = bitmapsCache.getFrame(currentFrame / framesPerUpdates, backgroundBitmap); @@ -421,20 +384,7 @@ public void run() { FileLog.e(e); } } else { - if (canvasDrawable != null) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - final int i = readyNodeIndex.get(); - canvasNodes[1 - i].setPosition(0, 0, backgroundBitmap.getWidth(), backgroundBitmap.getHeight()); - Canvas c = canvasNodes[1 - i].beginRecording(); - canvasDrawable.setBounds(0, 0, backgroundBitmap.getWidth(), backgroundBitmap.getHeight()); - canvasDrawable.setFrame(currentFrame - (int) canvasDrawable.getMinFrame()); - canvasDrawable.draw(c); - canvasNodes[1 - i].endRecording(); - readyNodeIndex.set(1 - i); - } - } else { - result = getFrame(ptrToUse, currentFrame, backgroundBitmap, width, height, backgroundBitmap.getRowBytes(), true); - } + result = getFrame(ptrToUse, currentFrame, backgroundBitmap, width, height, backgroundBitmap.getRowBytes(), true); } if (bitmapsCache != null && bitmapsCache.needGenCache()) { if (!genCacheSend) { @@ -442,23 +392,10 @@ public void run() { uiHandler.post(uiRunnableGenerateCache); } if (allowDrawFramesWhileCacheGenerating) { - if (canvasDrawable != null) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - final int i = readyNodeIndex.get(); - canvasNodes[1 - i].setPosition(0, 0, backgroundBitmap.getWidth(), backgroundBitmap.getHeight()); - Canvas c = canvasNodes[1 - i].beginRecording(); - canvasDrawable.setBounds(0, 0, backgroundBitmap.getWidth(), backgroundBitmap.getHeight()); - canvasDrawable.setFrame(currentFrame - (int) canvasDrawable.getMinFrame()); - canvasDrawable.draw(c); - canvasNodes[1 - i].endRecording(); - readyNodeIndex.set(1 - i); - } - } else { - if (nativePtr == 0) { - nativePtr = create(args.file.toString(), args.json, width, height, new int[3], false, args.colorReplacement, false, args.fitzModifier); - } - result = getFrame(nativePtr, currentFrame, backgroundBitmap, width, height, backgroundBitmap.getRowBytes(), true); + if (nativePtr == 0) { + nativePtr = create(args.file.toString(), args.json, width, height, new int[3], false, args.colorReplacement, false, args.fitzModifier); } + result = getFrame(nativePtr, currentFrame, backgroundBitmap, width, height, backgroundBitmap.getRowBytes(), true); } else { result = -1; } @@ -558,10 +495,10 @@ public void run() { }; public RLottieDrawable(File file, int w, int h, BitmapsCache.CacheOptions cacheOptions, boolean limitFps) { - this(file, w, h, cacheOptions, limitFps, null, 0, false); + this(file, w, h, cacheOptions, limitFps, null, 0); } - public RLottieDrawable(File file, int w, int h, BitmapsCache.CacheOptions cacheOptions, boolean limitFps, int[] colorReplacement, int fitzModifier, boolean airbnb) { + public RLottieDrawable(File file, int w, int h, BitmapsCache.CacheOptions cacheOptions, boolean limitFps, int[] colorReplacement, int fitzModifier) { width = w; height = h; shouldLimitFps = limitFps; @@ -569,7 +506,6 @@ public RLottieDrawable(File file, int w, int h, BitmapsCache.CacheOptions cacheO this.fallbackCache = cacheOptions != null && cacheOptions.fallback; this.createdForFirstFrame = cacheOptions != null && cacheOptions.firstFrame; getPaint().setFlags(Paint.FILTER_BITMAP_FLAG); - this.airbnb = airbnb; this.file = file; if (precache && lottieCacheGenerateQueue == null) { @@ -589,8 +525,6 @@ public RLottieDrawable(File file, int w, int h, BitmapsCache.CacheOptions cacheO shouldLimitFps = false; } bitmapsCache = new BitmapsCache(file, this, cacheOptions, w, h, !limitFps); - } else if (airbnb) { - canvasDrawable = setupCanvasLottie(file, null); } else { nativePtr = create(file.getAbsolutePath(), null, w, h, metaData, precache, colorReplacement, shouldLimitFps, fitzModifier); if (nativePtr == 0) { @@ -605,13 +539,12 @@ public RLottieDrawable(File file, int w, int h, BitmapsCache.CacheOptions cacheO timeBetweenFrames = Math.max(shouldLimitFps ? 33 : 16, (int) (1000.0f / metaData[1])); } - public RLottieDrawable(File file, String json, int w, int h, BitmapsCache.CacheOptions options, boolean limitFps, int[] colorReplacement, int fitzModifier, boolean airbnb) { + public RLottieDrawable(File file, String json, int w, int h, BitmapsCache.CacheOptions options, boolean limitFps, int[] colorReplacement, int fitzModifier) { width = w; height = h; shouldLimitFps = limitFps; this.precache = options != null; this.createdForFirstFrame = options != null && options.firstFrame; - this.airbnb = airbnb; getPaint().setFlags(Paint.FILTER_BITMAP_FLAG); if (precache && lottieCacheGenerateQueue == null) { createCacheGenQueue(); @@ -630,8 +563,6 @@ public RLottieDrawable(File file, String json, int w, int h, BitmapsCache.CacheO shouldLimitFps = false; } bitmapsCache = new BitmapsCache(file, this, options, w, h, !limitFps); - } else if (airbnb) { - canvasDrawable = setupCanvasLottie(file, json); } else { nativePtr = create(file.getAbsolutePath(), json, w, h, metaData, precache, colorReplacement, shouldLimitFps, fitzModifier); if (nativePtr == 0) { @@ -647,37 +578,6 @@ public RLottieDrawable(File file, String json, int w, int h, BitmapsCache.CacheO timeBetweenFrames = Math.max(shouldLimitFps ? 33 : 16, (int) (1000.0f / metaData[1])); } - private LottieComposition c; - private LottieDrawable setupCanvasLottie(File file, String json) { - CountDownLatch latch = new CountDownLatch(1); - LottieDrawable canvasDrawable = new LottieDrawable(); - canvasDrawable.setCallback(new View(ApplicationLoader.applicationContext)); - LottieListener<LottieComposition> whenSet = c -> { - canvasDrawable.setComposition(c); - metaData[0] = (int) (canvasDrawable.getMaxFrame() - canvasDrawable.getMinFrame()); - metaData[1] = 30; // todo - metaData[2] = 0; - latch.countDown(); - }; - if (json != null) { - LottieCompositionFactory.fromJsonInputStream(new ByteArrayInputStream(json.getBytes()), null) - .addListener(whenSet); - } else if (file != null) { - try { - LottieCompositionFactory.fromJsonInputStream(new FileInputStream(file), null) - .addListener(whenSet); - } catch (FileNotFoundException e) { - FileLog.e(e); - } - } - try { - latch.await(); - } catch (Exception e) { - FileLog.e(e); - } - return canvasDrawable; - } - private void parseLottieMetadata(File file, String json, int[] metaData) { if (gson == null) { gson = new Gson(); @@ -1358,11 +1258,7 @@ public void drawInternal(Canvas canvas, Paint overridePaint, boolean drawInBackg canvas.save(); canvas.translate(rect.left, rect.top); canvas.scale(scaleX, scaleY); - if (canvasNodes != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - canvas.drawRenderNode(canvasNodes[readyNodeIndex.get()]); - } else { - canvas.drawBitmap(renderingBitmap, 0, 0, paint); - } + canvas.drawBitmap(renderingBitmap, 0, 0, paint); canvas.restore(); } } @@ -1466,20 +1362,13 @@ public boolean isLastFrame() { return currentFrame == getFramesCount() - 1; } - boolean airbnb; - long generateCacheNativePtr; - protected volatile LottieDrawable cacheCanvasDrawable; @Override public void prepareForGenerateCache() { - if (airbnb) { - cacheCanvasDrawable = setupCanvasLottie(args.file, args.json); - } else { - generateCacheNativePtr = create(args.file.toString(), args.json, width, height, createdForFirstFrame ? metaData : new int[3], false, args.colorReplacement, false, args.fitzModifier); - if (generateCacheNativePtr == 0 && file != null) { - file.delete(); - } + generateCacheNativePtr = create(args.file.toString(), args.json, width, height, createdForFirstFrame ? metaData : new int[3], false, args.colorReplacement, false, args.fitzModifier); + if (generateCacheNativePtr == 0 && file != null) { + file.delete(); } } @@ -1489,17 +1378,6 @@ public void setGeneratingFrame(int i) { @Override public int getNextFrame(Bitmap bitmap) { - if (cacheCanvasDrawable != null) { - int framesPerUpdates = shouldLimitFps ? 2 : 1; - cacheCanvasDrawable.setFrame(generateCacheFramePointer); - cacheCanvasDrawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight()); - cacheCanvasDrawable.draw(new Canvas(bitmap)); - generateCacheFramePointer += framesPerUpdates; - if (generateCacheFramePointer > metaData[0]) { - return 0; - } - return 1; - } if (generateCacheNativePtr == 0) { return -1; } @@ -1546,17 +1424,10 @@ public void releaseForGenerateCache() { destroy(generateCacheNativePtr); generateCacheNativePtr = 0; } - cacheCanvasDrawable = null; } @Override public Bitmap getFirstFrame(Bitmap bitmap) { - if (canvasDrawable != null) { - canvasDrawable.setFrame((int) canvasDrawable.getMinFrame()); - canvasDrawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight()); - canvasDrawable.draw(new Canvas(bitmap)); - return bitmap; - } long nativePtr = create(args.file.toString(), args.json, width, height, new int[3], false, args.colorReplacement, false, args.fitzModifier); if (nativePtr == 0) { return bitmap; @@ -1571,9 +1442,7 @@ public void setMasterParent(View parent) { } public boolean canLoadFrames() { - if (airbnb) { - return canvasDrawable != null; - } else if (precache) { + if (precache) { return bitmapsCache != null || fallbackCache; } else { return nativePtr != 0; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ChatCustomReactionsEditActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ChatCustomReactionsEditActivity.java index 7e8fbdee28d..0ea984f0fe3 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ChatCustomReactionsEditActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ChatCustomReactionsEditActivity.java @@ -1,5 +1,6 @@ package org.telegram.ui.Components.Reactions; +import static org.telegram.messenger.AndroidUtilities.dp; import static org.telegram.messenger.AndroidUtilities.replaceTags; import static org.telegram.messenger.LocaleController.formatPluralString; import static org.telegram.messenger.LocaleController.getString; @@ -11,6 +12,10 @@ import android.animation.LayoutTransition; import android.annotation.SuppressLint; import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.drawable.Drawable; import android.os.Build; import android.text.Editable; import android.text.Layout; @@ -25,6 +30,9 @@ import android.widget.LinearLayout; import android.widget.ScrollView; +import androidx.annotation.NonNull; + +import org.checkerframework.checker.units.qual.A; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.FileLog; import org.telegram.messenger.LocaleController; @@ -60,6 +68,8 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not SELECT_TYPE_SOME = 1, SELECT_TYPE_ALL = 0; + private boolean paid; + private SelectAnimatedEmojiDialog selectAnimatedEmojiDialog; private FrameLayout bottomDialogLayout; private BackSpaceButtonView backSpaceButtonView; @@ -68,6 +78,7 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not private LinearLayout contentLayout; private CustomReactionEditText editText; private SlideIntChooseView slideView; + private TextCheckCell paidCheckCell; private UpdateReactionsButton actionButton; private ScrollView scrollView; @@ -75,6 +86,7 @@ public class ChatCustomReactionsEditActivity extends BaseFragment implements Not private final List<Long> selectedEmojisIds = new ArrayList<>(); private final HashMap<Long, AnimatedEmojiSpan> initialSelectedEmojis = new LinkedHashMap<>(); private final List<TLRPC.TL_availableReaction> allAvailableReactions = new ArrayList<>(); + private boolean initialPaid; private final int maxReactionsCount = getMessagesController().boostsChannelLevelMax; private boolean emojiKeyboardVisible = false; @@ -156,7 +168,10 @@ public void onItemClick(int id) { enableReactionsCell.setTypeface(AndroidUtilities.bold()); enableReactionsCell.setColors(Theme.key_windowBackgroundCheckText, Theme.key_switchTrackBlue, Theme.key_switchTrackBlueChecked, Theme.key_switchTrackBlueThumb, Theme.key_switchTrackBlueThumbChecked); enableReactionsCell.setOnClickListener(v -> { - setCheckedEnableReactionCell(enableReactionsCell.isChecked() ? SELECT_TYPE_NONE : SELECT_TYPE_SOME, true); + if (enableReactionsCell.isChecked() && paidCheckCell != null && paidCheckCell.isChecked()) { + toggleStarsEnabled(); + } + setCheckedEnableReactionCell(enableReactionsCell.isChecked() ? SELECT_TYPE_NONE : SELECT_TYPE_SOME, enableReactionsCell.isChecked() ? false : paid, true); }); contentLayout.addView(enableReactionsCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); @@ -183,7 +198,7 @@ public void onItemClick(int id) { @Override protected void onLineCountChanged(int oldLineCount, int newLineCount) { if (newLineCount > oldLineCount) { - scrollView.smoothScrollBy(0, AndroidUtilities.dp(30)); + scrollView.smoothScrollBy(0, dp(30)); } } @@ -234,10 +249,31 @@ public boolean onTextContextMenuItem(int id) { switchLayout.addView(slideView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); TextInfoPrivacyCell infoCell3 = new TextInfoPrivacyCell(context); infoCell3.setTopPadding(12); - infoCell3.setBottomPadding(70); + infoCell3.setBottomPadding(16); infoCell3.setText(LocaleController.getString(R.string.MaximumReactionsInfo)); switchLayout.addView(infoCell3, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + if (info.paid_media_allowed) { + paidCheckCell = new TextCheckCell(context); + paidCheckCell.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); + paidCheckCell.setTextAndCheck(LocaleController.getString(R.string.ChannelEnablePaidReactions), false, false); + switchLayout.addView(paidCheckCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + paidCheckCell.setOnClickListener(v -> { + toggleStarsEnabled(); + }); + + infoCell = new TextInfoPrivacyCell(context); + infoCell.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText4)); + infoCell.setTopPadding(12); + infoCell.setBottomPadding(70); + infoCell.setText(AndroidUtilities.withLearnMore(LocaleController.getString(R.string.ChannelEnablePaidReactionsInfo), () -> { + Browser.openUrl(getContext(), LocaleController.getString(R.string.ChannelEnablePaidReactionsInfoLink)); + })); + switchLayout.addView(infoCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + } else { + infoCell3.setBottomPadding(70); + } + actionButton = new UpdateReactionsButton(context, getResourceProvider()); actionButton.setDefaultState(); actionButton.setOnClickListener(v -> { @@ -250,8 +286,13 @@ public boolean onTextContextMenuItem(int id) { return; } + Boolean allowPaid = null; + if (paidCheckCell != null && info.paid_media_allowed) { + allowPaid = paidCheckCell.isChecked(); + } + actionButton.setLoading(true); - getMessagesController().setCustomChatReactions(chatId, selectedType, grabReactions(false), currentReactionsCount = reactionsCount, error -> { + getMessagesController().setCustomChatReactions(chatId, selectedType, grabReactions(false), currentReactionsCount = reactionsCount, allowPaid, error -> { if (isFinishing()) { return; } @@ -305,8 +346,7 @@ protected void onLayout(boolean changed, int left, int top, int right, int botto } } editText.append(editable); - setCheckedEnableReactionCell(SELECT_TYPE_ALL, false); - initialSelectedEmojis.putAll(selectedEmojisMap); + setCheckedEnableReactionCell(SELECT_TYPE_ALL, paid, false); } else if (info.available_reactions instanceof TLRPC.TL_chatReactionsSome) { TLRPC.TL_chatReactionsSome reactionsSome = (TLRPC.TL_chatReactionsSome) info.available_reactions; SpannableStringBuilder editable = new SpannableStringBuilder(); @@ -328,8 +368,9 @@ protected void onLayout(boolean changed, int left, int top, int right, int botto } } editText.append(editable); - setCheckedEnableReactionCell(SELECT_TYPE_SOME, false); - initialSelectedEmojis.putAll(selectedEmojisMap); + setCheckedEnableReactionCell(SELECT_TYPE_SOME, paid, false); + } else if (info.available_reactions instanceof TLRPC.TL_chatReactionsNone && (info != null && info.paid_media_allowed && info.paid_reactions_available)) { + setCheckedEnableReactionCell(SELECT_TYPE_NONE, paid, false); } else if (info.available_reactions instanceof TLRPC.TL_chatReactionsNone) { SpannableStringBuilder editable = new SpannableStringBuilder(); for (TLRPC.TL_availableReaction availableReaction : allAvailableReactions) { @@ -340,11 +381,18 @@ protected void onLayout(boolean changed, int left, int top, int right, int botto } } editText.append(editable); - setCheckedEnableReactionCell(SELECT_TYPE_NONE, false); + setCheckedEnableReactionCell(SELECT_TYPE_NONE, paid, false); } - enableReactionsCell.setTextAndCheck(LocaleController.getString("EnableReactions", R.string.EnableReactions), selectedType != SELECT_TYPE_NONE, false); + + enableReactionsCell.setTextAndCheck(LocaleController.getString("EnableReactions", R.string.EnableReactions), selectedType != SELECT_TYPE_NONE || paid, false); editText.addReactionsSpan(); + if (info.paid_media_allowed && info.paid_reactions_available) { + toggleStarsEnabled(); + } + initialSelectedEmojis.putAll(selectedEmojisMap); + initialPaid = paid; + fragmentView = rootLayout; return rootLayout; } @@ -394,7 +442,7 @@ protected void onEmojiSelected(View view, Long documentId, TLRPC.Document docume selectAnimatedEmojiDialog.setMultiSelected(documentId, true); checkMaxCustomReactions(false); } else { - if (selectedEmojisMap.size() >= maxReactionsCount) { + if (selectedEmojisMap.size() - (selectedEmojisMap.containsKey(-1L) ? 1 : 0) >= maxReactionsCount) { BulletinFactory.of(ChatCustomReactionsEditActivity.this).createErrorBulletin(formatPluralString("ReactionMaxCountError", maxReactionsCount)).show(); return; } @@ -438,6 +486,10 @@ protected void onEmojiSelected(View view, Long documentId, TLRPC.Document docume selectedEmojisMap.remove(span.documentId); selectedEmojisIds.remove(span.documentId); selectAnimatedEmojiDialog.unselect(span.documentId); + if (span.documentId == -1 && paidCheckCell != null) { + paidCheckCell.setChecked(false); + editText.setMaxLength(maxReactionsCount); + } if (isFast) { editText.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)); AndroidUtilities.cancelRunOnUIThread(checkAfterFastDeleteRunnable); @@ -519,12 +571,13 @@ public void onTransitionAnimationEnd(boolean isOpen, boolean backward) { } } - private void setCheckedEnableReactionCell(int selectType, boolean animated) { - if (selectedType == selectType) { + private void setCheckedEnableReactionCell(int selectType, boolean paid, boolean animated) { + if (selectedType == selectType && this.paid == paid) { return; } + this.paid = paid; - boolean checked = selectType == SELECT_TYPE_SOME || selectType == SELECT_TYPE_ALL; + boolean checked = selectType == SELECT_TYPE_SOME || selectType == SELECT_TYPE_ALL || paid; enableReactionsCell.setChecked(checked); int clr = Theme.getColor(checked ? Theme.key_windowBackgroundChecked : Theme.key_windowBackgroundUnchecked); if (animated) { @@ -539,7 +592,7 @@ private void setCheckedEnableReactionCell(int selectType, boolean animated) { this.selectedType = selectType; - if (selectType == SELECT_TYPE_SOME || selectType == SELECT_TYPE_ALL) { + if (selectType == SELECT_TYPE_SOME || selectType == SELECT_TYPE_ALL || paid) { switchLayout.setVisibility(View.VISIBLE); actionButton.setVisibility(View.VISIBLE); if (animated) { @@ -600,7 +653,7 @@ public void onFragmentDestroy() { super.onFragmentDestroy(); AndroidUtilities.cancelRunOnUIThread(checkAfterFastDeleteRunnable); if (selectedType == SELECT_TYPE_NONE && reactionsCount != currentReactionsCount) { - getMessagesController().setCustomChatReactions(chatId, selectedType, grabReactions(false), reactionsCount, null, null); + getMessagesController().setCustomChatReactions(chatId, selectedType, grabReactions(false), reactionsCount, null, null, null); } } @@ -641,8 +694,8 @@ private boolean checkChangesBeforeExit() { if (boostsStatus != null && boostsStatus.level < selectedCustomReactions) { hasChanges = false; } - if (selectedType == SELECT_TYPE_NONE) { - hasChanges = false; + if (initialPaid != paid) { + hasChanges = true; } if (hasChanges) { AlertDialog.Builder builder = new AlertDialog.Builder(getContext(), getResourceProvider()); @@ -652,7 +705,7 @@ private boolean checkChangesBeforeExit() { builder.setPositiveButton(getString("ApplyTheme", R.string.ApplyTheme), (dialogInterface, i) -> { actionButton.performClick(); }); - builder.setNegativeButton(getString("Discard", R.string.Discard), (dialogInterface, i) -> finishFragment()); + builder.setNegativeButton(getString(R.string.Discard), (dialogInterface, i) -> finishFragment()); builder.show(); } return hasChanges; @@ -683,6 +736,8 @@ private List<TLRPC.Reaction> grabReactions(boolean onlyCustom) { List<TLRPC.Reaction> reactions = new ArrayList<>(); List<TLRPC.Reaction> customReactions = new ArrayList<>(); for (Long documentId : selectedEmojisIds) { + if (documentId == -1) continue; + boolean isReactionEmoji = false; for (TLRPC.TL_availableReaction availableReaction : allAvailableReactions) { if (documentId == availableReaction.activate_animation.id) { @@ -770,4 +825,74 @@ private void updateScrollViewMarginBottom(int margin) { public void didReceivedNotification(int id, int account, Object... args) { } + + public void toggleStarsEnabled() { + if (paidCheckCell.isChecked()) { + paidCheckCell.setChecked(false); + selectedEmojisIds.remove(-1L); + AnimatedEmojiSpan removedSpan = selectedEmojisMap.remove(-1L); + if (removedSpan != null) { + removedSpan.setRemoved(() -> { + SpannableStringBuilder spanned = new SpannableStringBuilder(editText.getText()); + AnimatedEmojiSpan[] spans = spanned.getSpans(0, spanned.length(), AnimatedEmojiSpan.class); + for (AnimatedEmojiSpan span : spans) { + if (span == removedSpan) { + int selectionEnd = editText.getEditTextSelectionEnd(); + int spanEnd = spanned.getSpanEnd(span); + int spanStart = spanned.getSpanStart(span); + editText.getText().delete(spanStart, spanEnd); + int spanDiff = spanEnd - spanStart; + editText.setSelection(spanEnd <= selectionEnd ? selectionEnd - spanDiff : selectionEnd); + break; + } + } + }); + } + animateChangesInNextRows(removedSpan); + selectAnimatedEmojiDialog.setMultiSelected(-1L, true); + checkMaxCustomReactions(false); + editText.setMaxLength(maxReactionsCount); + setCheckedEnableReactionCell(selectedType, paid, true); + } else { + paidCheckCell.setChecked(true); + try { + editText.setMaxLength(maxReactionsCount + 1); + SpannableString spannable = new SpannableString("b"); + AnimatedEmojiSpan span = new AnimatedEmojiSpan(-1, null) { + private final Bitmap bitmap = Bitmap.createBitmap(dp(24), dp(24), Bitmap.Config.ARGB_8888); + { + final Drawable drawable = getContext().getResources().getDrawable(R.drawable.star_small_inner).mutate(); + drawable.setBounds(0, 0, dp(24), dp(24)); + drawable.draw(new Canvas(bitmap)); + } + @Override + public void draw(@NonNull Canvas canvas, CharSequence charSequence, int start, int end, float x, int top, int y, int bottom, @NonNull Paint paint) { + super.draw(canvas, charSequence, start, end, x, top, y, bottom, paint); + canvas.save(); + canvas.translate(x, (top + bottom) / 2f - dp(12)); + canvas.scale(extraScale, extraScale, x + dp(12), dp(12)); + canvas.drawBitmap(bitmap, 0, 0, null); + canvas.restore(); + } + @Override + public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) { + return super.getSize(paint, text, start, end, fm) + dp(5); + } + }; + span.cacheType = AnimatedEmojiDrawable.getCacheTypeForEnterView(); + span.setAdded(); + selectedEmojisIds.add(0, -1L); + selectedEmojisMap.put(-1L, span); + spannable.setSpan(span, 0, spannable.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + editText.getText().insert(0, spannable); + selectAnimatedEmojiDialog.setMultiSelected(-1L, true); + checkMaxCustomReactions(true); + animateChangesInNextRows(span); + } catch (Exception e) { + FileLog.e(e); + } + setCheckedEnableReactionCell(selectedType, true, true); + } + editText.updateAnimatedEmoji(true); + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ChatSelectionReactionMenuOverlay.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ChatSelectionReactionMenuOverlay.java index b378b15ab77..110bff66919 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ChatSelectionReactionMenuOverlay.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ChatSelectionReactionMenuOverlay.java @@ -112,7 +112,7 @@ public void setVisibility(int visibility) { reactionsContainerLayout.setDelegate(new ReactionsContainerLayout.ReactionsContainerDelegate() { @Override public void onReactionClicked(View view, ReactionsLayoutInBubble.VisibleReaction visibleReaction, boolean longpress, boolean addToRecent) { - parentFragment.selectReaction(currentPrimaryObject, reactionsContainerLayout, view, 0, 0, visibleReaction, false, longpress, addToRecent, false); + parentFragment.selectReaction(null, currentPrimaryObject, reactionsContainerLayout, view, 0, 0, visibleReaction, false, longpress, addToRecent, false); AndroidUtilities.runOnUIThread(() -> { if (reactionsContainerLayout != null) { reactionsContainerLayout.dismissParent(true); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/CustomReactionEditText.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/CustomReactionEditText.java index a9bd07b048c..d63a1d51ba1 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/CustomReactionEditText.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/CustomReactionEditText.java @@ -30,6 +30,16 @@ public class CustomReactionEditText extends EditTextCaption { private final GestureDetectorCompat gestureDetector; private Runnable onFocused; + private int maxLength; + + public void setMaxLength(int maxLength) { + if (this.maxLength != maxLength) { + InputFilter[] inputFilters = new InputFilter[1]; + inputFilters[0] = new InputFilter.LengthFilter(this.maxLength = maxLength); + setFilters(inputFilters); + } + } + public CustomReactionEditText(Context context, Theme.ResourcesProvider resourcesProvider, int maxLength) { super(context, resourcesProvider); this.resourcesProvider = resourcesProvider; @@ -47,7 +57,7 @@ public boolean onDoubleTap(@NonNull MotionEvent e) { setSingleLine(false); setMaxLines(50); InputFilter[] inputFilters = new InputFilter[1]; - inputFilters[0] = new InputFilter.LengthFilter(maxLength); + inputFilters[0] = new InputFilter.LengthFilter(this.maxLength = maxLength); setFilters(inputFilters); setTextSize(TypedValue.COMPLEX_UNIT_DIP, 22); setGravity(Gravity.BOTTOM); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ReactionsEffectOverlay.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ReactionsEffectOverlay.java index 59c923449ba..ea15f3b452e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ReactionsEffectOverlay.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ReactionsEffectOverlay.java @@ -322,7 +322,7 @@ protected void dispatchDraw(Canvas canvas) { toY += reactionButton.drawingImageRect.top; } if (chatActivity != null) { - toY += chatActivity.drawingChatLisViewYoffset; + toY += chatActivity.drawingChatListViewYoffset; } if (drawingCell.drawPinnedBottom && !drawingCell.shouldDrawTimeOnMedia()) { toY += AndroidUtilities.dp(2); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ReactionsLayoutInBubble.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ReactionsLayoutInBubble.java index dd3ca0ad2a0..6afe35560be 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ReactionsLayoutInBubble.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ReactionsLayoutInBubble.java @@ -17,7 +17,6 @@ import android.text.Spanned; import android.text.TextPaint; import android.text.TextUtils; -import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; @@ -37,13 +36,13 @@ import org.telegram.messenger.MediaDataController; import org.telegram.messenger.MessageObject; import org.telegram.messenger.MessagesController; +import org.telegram.messenger.R; import org.telegram.messenger.SvgHelper; import org.telegram.messenger.UserConfig; import org.telegram.messenger.UserObject; import org.telegram.messenger.Utilities; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; -import org.telegram.ui.ActionBar.AdjustPanLayoutHelper; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Cells.ChatMessageCell; import org.telegram.ui.Components.AnimatedEmojiDrawable; @@ -51,9 +50,11 @@ import org.telegram.ui.Components.AnimatedFileDrawable; import org.telegram.ui.Components.AnimatedTextView; import org.telegram.ui.Components.AvatarsDrawable; +import org.telegram.ui.Components.ButtonBounce; import org.telegram.ui.Components.CounterView; import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.RLottieDrawable; +import org.telegram.ui.Stars.StarsReactionsSheet; import java.util.ArrayList; import java.util.Collections; @@ -172,13 +173,13 @@ public void setMessage(MessageObject messageObject, boolean isSmall, boolean isT for (int i = 0; i < messageObject.messageOwner.reactions.results.size(); i++) { TLRPC.ReactionCount reactionCount = messageObject.messageOwner.reactions.results.get(i); ReactionButton old = null; -// for (int j = 0; j < oldButtons.size(); ++j) { -// ReactionButton btn = oldButtons.get(j); -// if (btn.reaction.equals(reactionCount.reaction)) { -// old = btn; -// break; -// } -// } + for (int j = 0; j < oldButtons.size(); ++j) { + ReactionButton btn = oldButtons.get(j); + if (btn.reaction.equals(reactionCount.reaction)) { + old = btn; + break; + } + } ReactionButton button = new ReactionLayoutButton(old, reactionCount, isSmall, isTag); reactionButtons.add(button); if (!isSmall && !isTag && messageObject.messageOwner.reactions.recent_reactions != null) { @@ -403,9 +404,9 @@ public void drawPreview(View view, Canvas canvas, int offset, Integer drawOnlyRe } for (int i = 0; i < reactionButtons.size(); i++) { ReactionButton reactionButton = reactionButtons.get(i); - if (Objects.equals(reactionButton.reaction.hashCode(), scrimViewReaction)) { - continue; - } +// if (Objects.equals(reactionButton.reaction.hashCode(), scrimViewReaction)) { +// continue; +// } if (drawOnlyReaction != null && reactionButton.reaction.hashCode() != drawOnlyReaction) { continue; } @@ -555,7 +556,18 @@ public void resetAnimation() { } public ReactionButton getReactionButton(VisibleReaction visibleReaction) { - String hash = visibleReaction.emojicon != null ? visibleReaction.emojicon : Long.toString(visibleReaction.documentId); + String hash; + if (visibleReaction.isStar) { + hash = "stars"; + } else if (visibleReaction.emojicon != null) { + hash = visibleReaction.emojicon; + } else { + hash = Long.toString(visibleReaction.documentId); + } + return getReactionButton(hash); + } + + public ReactionButton getReactionButton(String hash) { if (isSmall) { ReactionButton button = lastDrawingReactionButtons.get(hash + "_"); if (button != null) { @@ -630,13 +642,14 @@ public static class ReactionButton { public int realCount; public int choosenOrder; public boolean drawImage = true; + public boolean paid; public boolean lastImageDrawn; public boolean wasDrawn; public String key; public boolean choosen; public String countText; - TLRPC.Reaction reaction; + public TLRPC.Reaction reaction; VisibleReaction visibleReaction; android.graphics.Rect drawingImageRect = new Rect(); @@ -671,6 +684,9 @@ public static class ReactionButton { private final View parentView; private final Theme.ResourcesProvider resourcesProvider; + public final ButtonBounce bounce; + private StarsReactionsSheet.Particles particles; + protected int getCacheType() { if (isTag) { return AnimatedEmojiDrawable.CACHE_TYPE_SAVED_REACTION; @@ -681,6 +697,7 @@ protected int getCacheType() { public ReactionButton(ReactionButton reuseFrom, int currentAccount, View parentView, TLRPC.ReactionCount reactionCount, boolean isSmall, boolean isTag, Theme.ResourcesProvider resourcesProvider) { this.currentAccount = currentAccount; this.parentView = parentView; + this.bounce = new ButtonBounce(parentView); this.resourcesProvider = resourcesProvider; this.isTag = isTag; if (reuseFrom != null) { @@ -708,7 +725,9 @@ public ReactionButton(ReactionButton reuseFrom, int currentAccount, View parentV this.realCount = reactionCount.count; this.choosenOrder = reactionCount.chosen_order; this.isSmall = isSmall; - if (this.reaction instanceof TLRPC.TL_reactionEmoji) { + if (this.reaction instanceof TLRPC.TL_reactionPaid) { + this.key = "stars"; + } else if (this.reaction instanceof TLRPC.TL_reactionEmoji) { this.key = ((TLRPC.TL_reactionEmoji) this.reaction).emoticon; } else if (this.reaction instanceof TLRPC.TL_reactionCustomEmoji) { this.key = Long.toString(((TLRPC.TL_reactionCustomEmoji) this.reaction).document_id); @@ -721,7 +740,17 @@ public ReactionButton(ReactionButton reuseFrom, int currentAccount, View parentV counterDrawable.shortFormat = true; if (reaction != null) { - if (visibleReaction.emojicon != null) { + if (visibleReaction.isStar) { + paid = true; + RLottieDrawable drawable = new RLottieDrawable(R.raw.star_reaction_click, "star_reaction_click", dp(40), dp(40)); + imageReceiver.setImageBitmap(drawable); +// if (reuseFrom != null) { +// imageReceiver.setImageBitmap(reuseFrom.imageReceiver.getImageDrawable()); +// } else { +// imageReceiver.setImageBitmap(ApplicationLoader.applicationContext.getResources().getDrawable(R.drawable.star_small_inner)); +// } + particles = reuseFrom != null && reuseFrom.particles != null ? reuseFrom.particles : new StarsReactionsSheet.Particles(StarsReactionsSheet.Particles.TYPE_RADIAL, 30); + } else if (visibleReaction.emojicon != null) { TLRPC.TL_availableReaction r = MediaDataController.getInstance(currentAccount).getReactionsMap().get(visibleReaction.emojicon); if (r != null) { //imageReceiver.setImage(ImageLocation.getForDocument(r.static_icon), "40_40", svgThumb, "webp", r, 1); @@ -798,16 +827,30 @@ public void draw(Canvas canvas, float x, float y, float progress, float alpha, b } if (choosen) { - backgroundColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outReactionButtonBackground : Theme.key_chat_inReactionButtonBackground, resourcesProvider); - textColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outReactionButtonTextSelected : Theme.key_chat_inReactionButtonTextSelected, resourcesProvider); - serviceTextColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outReactionButtonBackground : Theme.key_chat_inReactionButtonBackground, resourcesProvider); - serviceBackgroundColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outBubble : Theme.key_chat_inBubble); + if (paid) { + backgroundColor = 0xFFE8AB02; + textColor = 0xFFFFFFFF; + serviceTextColor = 0xFFFFFFFF; + serviceBackgroundColor = 0xFFE8AB02; + } else { + backgroundColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outReactionButtonBackground : Theme.key_chat_inReactionButtonBackground, resourcesProvider); + textColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outReactionButtonTextSelected : Theme.key_chat_inReactionButtonTextSelected, resourcesProvider); + serviceTextColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outReactionButtonBackground : Theme.key_chat_inReactionButtonBackground, resourcesProvider); + serviceBackgroundColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outBubble : Theme.key_chat_inBubble); + } } else { - textColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outReactionButtonText : Theme.key_chat_inReactionButtonText, resourcesProvider); - backgroundColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outReactionButtonBackground : Theme.key_chat_inReactionButtonBackground, resourcesProvider); - backgroundColor = ColorUtils.setAlphaComponent(backgroundColor, (int) (Color.alpha(backgroundColor) * 0.156f)); - serviceTextColor = Theme.getColor(Theme.key_chat_serviceText, resourcesProvider); - serviceBackgroundColor = Color.TRANSPARENT; + if (paid) { + textColor = 0xFFE8AB02; + backgroundColor = 0x40E8AB02; + serviceTextColor = 0xFFFFFFFF; + serviceBackgroundColor = Color.TRANSPARENT; + } else { + textColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outReactionButtonText : Theme.key_chat_inReactionButtonText, resourcesProvider); + backgroundColor = Theme.getColor(isOutOwner() ? Theme.key_chat_outReactionButtonBackground : Theme.key_chat_inReactionButtonBackground, resourcesProvider); + backgroundColor = ColorUtils.setAlphaComponent(backgroundColor, (int) (Color.alpha(backgroundColor) * 0.156f)); + serviceTextColor = Theme.getColor(Theme.key_chat_serviceText, resourcesProvider); + serviceBackgroundColor = Color.TRANSPARENT; + } } updateColors(progress); textPaint.setColor(lastDrawnTextColor); @@ -825,11 +868,16 @@ public void draw(Canvas canvas, float x, float y, float progress, float alpha, b imageReceiver.setAlpha(alpha); } + final float bounceScale = bounce.getScale(0.1f); int w = width; if (progress != 1f && animationType == ANIMATION_TYPE_MOVE) { w = (int) (width * progress + animateFromWidth * (1f - progress)); } AndroidUtilities.rectTmp.set(x, y, x + w, y + height); + if (bounceScale != 1f) { + canvas.save(); + canvas.scale(bounceScale, bounceScale, x + w / 2f, y + height / 2f); + } float rad = height / 2f; if (getDrawServiceShaderBackground() > 0) { Paint paint1 = Theme.getThemePaint(Theme.key_paint_chatActionBackground, resourcesProvider); @@ -856,7 +904,25 @@ public void draw(Canvas canvas, float x, float y, float progress, float alpha, b canvas.saveLayerAlpha(AndroidUtilities.rectTmp, 0xFF, Canvas.ALL_SAVE_FLAG); AndroidUtilities.rectTmp.right -= dp(4); } + if (particles != null) { + particles.bounds.set(AndroidUtilities.rectTmp); + particles.bounds.inset(-dp(4), -dp(4)); + particles.setBounds(particles.bounds); + particles.process(); + if (parentView != null) { + parentView.invalidate(); + } + particles.draw(canvas, ColorUtils.blendARGB(ColorUtils.setAlphaComponent(backgroundColor, 0xFF), ColorUtils.blendARGB(serviceTextColor, ColorUtils.setAlphaComponent(backgroundColor, 0xFF), .4f), getDrawServiceShaderBackground())); + } drawRoundRect(canvas, AndroidUtilities.rectTmp, rad, paint); + if (particles != null) { + canvas.save(); + tagPath.rewind(); + tagPath.addRoundRect(AndroidUtilities.rectTmp, rad, rad, Path.Direction.CW); + canvas.clipPath(tagPath); + particles.draw(canvas, textColor); + canvas.restore(); + } if (isTag && drawTagDot()) { Paint paint; if (cutTagCircle) { @@ -874,7 +940,10 @@ public void draw(Canvas canvas, float x, float y, float progress, float alpha, b if (imageReceiver != null) { int size, X; - if (animatedEmojiDrawable != null) { + if (paid) { + size = dp(22); + X = dp(4); + } else if (animatedEmojiDrawable != null) { size = dp(24); X = dp(6); imageReceiver.setRoundRadius(dp(6)); @@ -903,7 +972,7 @@ public void draw(Canvas canvas, float x, float y, float progress, float alpha, b } if (counterDrawable != null && drawCounter()) { canvas.save(); - canvas.translate(x + dp(hasName && !drawTagDot() ? 10 : (hasName ? 9 : 8)) + dp(20) + dp(2) + tx, y); + canvas.translate(x + dp(hasName && !drawTagDot() ? 10 : (hasName ? 9 : 8)) + dp(20) + dp(2) + tx + (paid ? -dp(1) : 0), y); counterDrawable.draw(canvas); canvas.restore(); } @@ -918,6 +987,10 @@ public void draw(Canvas canvas, float x, float y, float progress, float alpha, b canvas.restore(); } } + + if (bounceScale != 1f) { + canvas.restore(); + } } protected void updateColors(float progress) { @@ -958,7 +1031,7 @@ private void drawImage(Canvas canvas, Rect bounds, float alpha) { if (animatedEmojiDrawable != null && animatedEmojiDrawableColor != lastDrawnTextColor) { animatedEmojiDrawable.setColorFilter(new PorterDuffColorFilter(animatedEmojiDrawableColor = lastDrawnTextColor, PorterDuff.Mode.SRC_IN)); } - if (drawImage && (realCount > 1 || !isPlaying() || !isSelected)) { + if (drawImage && (paid || realCount > 1 || !isPlaying() || !isSelected)) { ImageReceiver imageReceiver2 = getImageReceiver(); boolean drawStaticImage = true; if (imageReceiver2 != null) { @@ -1053,6 +1126,11 @@ public void detach() { } public void startAnimation() { +// if (paid && imageReceiver.getLottieAnimation() == null) { +// RLottieDrawable drawable = new RLottieDrawable(R.raw.star_reaction_click, "star_reaction_click", dp(40), dp(40)); +// imageReceiver.setImageBitmap(drawable); +// return; +// } ImageReceiver imageReceiver; if (animatedEmojiDrawable != null && animatedEmojiDrawable.getImageReceiver() != null) { imageReceiver = animatedEmojiDrawable.getImageReceiver(); @@ -1080,7 +1158,9 @@ public void attachPreview(View view) { if (previewImageReceiver != null || previewAnimatedEmojiDrawable != null) return; View parent = parentView != null && parentView.getParent() instanceof View ? (View) parentView.getParent() : parentView; if (reaction != null) { - if (visibleReaction.emojicon != null) { + if (visibleReaction.isStar) { + + } else if (visibleReaction.emojicon != null) { TLRPC.TL_availableReaction r = MediaDataController.getInstance(currentAccount).getReactionsMap().get(visibleReaction.emojicon); if (r != null && r.activate_animation != null) { //imageReceiver.setImage(ImageLocation.getForDocument(r.static_icon), "40_40", svgThumb, "webp", r, 1); @@ -1137,7 +1217,7 @@ public void detachPreview() { boolean pressed; Runnable longPressRunnable; - public boolean chekTouchEvent(MotionEvent event) { + public boolean checkTouchEvent(MotionEvent event) { if (isEmpty || isSmall || messageObject == null || messageObject.messageOwner == null || messageObject.messageOwner.reactions == null) { return false; } @@ -1146,7 +1226,7 @@ public boolean chekTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { for (int i = 0, n = reactionButtons.size(); i < n; i++) { if (x > reactionButtons.get(i).x && x < reactionButtons.get(i).x + reactionButtons.get(i).width && - y > reactionButtons.get(i).y && y < reactionButtons.get(i).y + reactionButtons.get(i).height) { + y > reactionButtons.get(i).y && y < reactionButtons.get(i).y + reactionButtons.get(i).height) { lastX = event.getX(); lastY = event.getY(); lastSelectedButton = reactionButtons.get(i); @@ -1154,11 +1234,16 @@ public boolean chekTouchEvent(MotionEvent event) { AndroidUtilities.cancelRunOnUIThread(longPressRunnable); longPressRunnable = null; } + lastSelectedButton.bounce.setPressed(true); final ReactionButton selectedButtonFinal = lastSelectedButton; AndroidUtilities.runOnUIThread(longPressRunnable = () -> { - parentView.getDelegate().didPressReaction(parentView, selectedButtonFinal.reactionCount, true); + parentView.getDelegate().didPressReaction(parentView, selectedButtonFinal.reactionCount, true, 0, 0); + selectedButtonFinal.bounce.setPressed(false); + lastSelectedButton = null; + pressed = false; longPressRunnable = null; + // here }, ViewConfiguration.getLongPressTimeout()); pressed = true; break; @@ -1167,6 +1252,9 @@ public boolean chekTouchEvent(MotionEvent event) { } else if (event.getAction() == MotionEvent.ACTION_MOVE) { if (pressed && Math.abs(event.getX() - lastX) > touchSlop || Math.abs(event.getY() - lastY) > touchSlop) { pressed = false; + if (lastSelectedButton != null) { + lastSelectedButton.bounce.setPressed(false); + } lastSelectedButton = null; if (longPressRunnable != null) { AndroidUtilities.cancelRunOnUIThread(longPressRunnable); @@ -1180,10 +1268,13 @@ public boolean chekTouchEvent(MotionEvent event) { } if (pressed && lastSelectedButton != null && event.getAction() == MotionEvent.ACTION_UP) { if (parentView.getDelegate() != null) { - parentView.getDelegate().didPressReaction(parentView, lastSelectedButton.reactionCount, false); + parentView.getDelegate().didPressReaction(parentView, lastSelectedButton.reactionCount, false, event.getX(), event.getY()); } } pressed = false; + if (lastSelectedButton != null) { + lastSelectedButton.bounce.setPressed(false); + } lastSelectedButton = null; } return pressed; @@ -1220,7 +1311,9 @@ private static class ButtonsComparator implements Comparator<ReactionButton> { @Override public int compare(ReactionButton o1, ReactionButton o2) { if (dialogId >= 0) { - if (o1.isSelected != o2.isSelected) { + if (o1.paid != o2.paid) { + return o1.paid ? -1 : 1; + } else if (o1.isSelected != o2.isSelected) { return o1.isSelected ? -1 : 1; } else if (o1.isSelected) { if (o1.choosenOrder != o2.choosenOrder) { @@ -1229,7 +1322,9 @@ public int compare(ReactionButton o1, ReactionButton o2) { } return o1.reactionCount.lastDrawnPosition - o2.reactionCount.lastDrawnPosition; } else { - if (o1.realCount != o2.realCount) { + if (o1.paid != o2.paid) { + return o1.paid ? -1 : 1; + } else if (o1.realCount != o2.realCount) { return o2.realCount - o1.realCount; } } @@ -1286,6 +1381,7 @@ public void animateReaction(VisibleReaction reaction) { public static class VisibleReaction { + public boolean isStar; public boolean isEffect; public long effectId; public boolean premium; @@ -1296,9 +1392,17 @@ public static class VisibleReaction { public long hash; + public static VisibleReaction asStar() { + VisibleReaction visibleReaction = new VisibleReaction(); + visibleReaction.isStar = true; + return visibleReaction; + } + public static VisibleReaction fromTL(TLRPC.Reaction reaction) { VisibleReaction visibleReaction = new VisibleReaction(); - if (reaction instanceof TLRPC.TL_reactionEmoji) { + if (reaction instanceof TLRPC.TL_reactionPaid) { + visibleReaction.isStar = true; + } else if (reaction instanceof TLRPC.TL_reactionEmoji) { visibleReaction.emojicon = ((TLRPC.TL_reactionEmoji) reaction).emoticon; visibleReaction.hash = visibleReaction.emojicon.hashCode(); } else if (reaction instanceof TLRPC.TL_reactionCustomEmoji) { @@ -1322,6 +1426,9 @@ public static VisibleReaction fromTL(TLRPC.TL_availableEffect effect) { } public TLRPC.Reaction toTLReaction() { + if (isStar) { + return new TLRPC.TL_reactionPaid(); + } if (emojicon != null) { TLRPC.TL_reactionEmoji r = new TLRPC.TL_reactionEmoji(); r.emoticon = emojicon; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ReactionsContainerLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ReactionsContainerLayout.java index d191913a273..1f390737a88 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ReactionsContainerLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ReactionsContainerLayout.java @@ -82,6 +82,7 @@ import org.telegram.ui.Components.Reactions.ReactionsUtils; import org.telegram.ui.PremiumPreviewFragment; import org.telegram.ui.SelectAnimatedEmojiDialog; +import org.telegram.ui.Stars.StarsReactionsSheet; import org.telegram.ui.Stories.recorder.HintView2; import java.util.ArrayList; @@ -626,7 +627,7 @@ protected void dispatchDraw(Canvas canvas) { if (pressedReaction != null && type != TYPE_MESSAGE_EFFECTS) { if (pressedProgress != 1f) { - pressedProgress += 16f / 1500f; + pressedProgress += 16f / (pressedReaction.isStar ? ViewConfiguration.getLongPressTimeout() : 1500f); if (pressedProgress >= 1f) { pressedProgress = 1f; } @@ -635,8 +636,13 @@ protected void dispatchDraw(Canvas canvas) { } - pressedViewScale = 1 + 2 * pressedProgress; - otherViewsScale = 1 - 0.15f * pressedProgress; + if (pressedReaction != null && pressedReaction.isStar) { + pressedViewScale = 1f; + otherViewsScale = 1f; + } else { + pressedViewScale = 1 + 2 * pressedProgress; + otherViewsScale = 1 - 0.15f * pressedProgress; + } int s = canvas.save(); float pivotX = LocaleController.isRTL || mirrorX ? getWidth() * 0.125f : getWidth() * 0.875f; @@ -1013,7 +1019,15 @@ public void setTransitionProgress(float transitionProgress) { public void setMessage(MessageObject message, TLRPC.ChatFull chatFull, boolean animated) { this.messageObject = message; - hitLimit = type == TYPE_DEFAULT && messageObject != null && messageObject.messageOwner != null && messageObject.messageOwner.reactions != null && messageObject.messageOwner.reactions.results.size() >= MessagesController.getInstance(currentAccount).getChatMaxUniqReactions(messageObject.getDialogId()); + int chosenCount = 0; + if (messageObject != null && messageObject.messageOwner != null && messageObject.messageOwner.reactions != null) { + for (TLRPC.ReactionCount reactionCount : messageObject.messageOwner.reactions.results) { + if (!(reactionCount.reaction instanceof TLRPC.TL_reactionPaid)) { + chosenCount++; + } + } + } + hitLimit = type == TYPE_DEFAULT && messageObject != null && chosenCount >= MessagesController.getInstance(currentAccount).getChatMaxUniqReactions(messageObject.getDialogId()); TLRPC.ChatFull reactionsChat = chatFull; List<ReactionsLayoutInBubble.VisibleReaction> visibleReactions = new ArrayList<>(); if (message != null && message.isForwardedChannelPost()) { @@ -1033,10 +1047,16 @@ public void setMessage(MessageObject message, TLRPC.ChatFull chatFull, boolean a fillRecentReactionsList(visibleReactions); } else if (hitLimit) { allReactionsAvailable = false; + if (reactionsChat != null && reactionsChat.paid_reactions_available) { + visibleReactions.add(ReactionsLayoutInBubble.VisibleReaction.asStar()); + } for (TLRPC.ReactionCount result : messageObject.messageOwner.reactions.results) { visibleReactions.add(ReactionsLayoutInBubble.VisibleReaction.fromTL(result.reaction)); } } else if (reactionsChat != null) { + if (reactionsChat != null && reactionsChat.paid_reactions_available) { + visibleReactions.add(ReactionsLayoutInBubble.VisibleReaction.asStar()); + } if (reactionsChat.available_reactions instanceof TLRPC.TL_chatReactionsAll) { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(reactionsChat.id); if (chat != null && !ChatObject.isChannelAndNotMegaGroup(chat)) { @@ -1058,10 +1078,6 @@ public void setMessage(MessageObject message, TLRPC.ChatFull chatFull, boolean a } } } - } else { - if (BuildVars.DEBUG_PRIVATE_VERSION) { - throw new RuntimeException("Unknown chat reactions type: " + reactionsChat.available_reactions); - } } } else { allReactionsAvailable = true; @@ -1710,6 +1726,7 @@ public final class ReactionHolderView extends FrameLayout { public boolean drawSelected = true; public int position; public boolean waitingAnimation; + public StarsReactionsSheet.Particles particles; Runnable playRunnable = new Runnable() { @Override @@ -1925,11 +1942,11 @@ private void setReaction(ReactionsLayoutInBubble.VisibleReaction react, int posi resetAnimation(); currentReaction = react; - hasEnterAnimation = currentReaction.emojicon != null && (showCustomEmojiReaction() || allReactionsIsDefault) && LiteMode.isEnabled(LiteMode.FLAG_ANIMATED_EMOJI_REACTIONS); + hasEnterAnimation = currentReaction.isStar || (currentReaction.emojicon != null && (showCustomEmojiReaction() || allReactionsIsDefault)) && LiteMode.isEnabled(LiteMode.FLAG_ANIMATED_EMOJI_REACTIONS); if (type == TYPE_STICKER_SET_EMOJI || currentReaction.isEffect) { hasEnterAnimation = false; } - if (currentReaction.emojicon != null) { + if (currentReaction.isStar || currentReaction.emojicon != null) { updateImage(react); pressedBackupImageView.setAnimatedEmojiDrawable(null); @@ -1978,7 +1995,13 @@ private void setReaction(ReactionsLayoutInBubble.VisibleReaction react, int posi } private void updateImage(ReactionsLayoutInBubble.VisibleReaction react) { - if (type == TYPE_STICKER_SET_EMOJI && react != null && react.emojicon != null) { + if (react != null && react.isStar) { + enterImageView.getImageReceiver().setImageBitmap(new RLottieDrawable(R.raw.star_reaction, "star_reaction", dp(30), dp(30))); + loopImageView.getImageReceiver().setImageBitmap(getContext().getResources().getDrawable(R.drawable.star_reaction)); + if (particles == null) { + particles = new StarsReactionsSheet.Particles(StarsReactionsSheet.Particles.TYPE_RADIAL, 45); + } + } else if (type == TYPE_STICKER_SET_EMOJI && react != null && react.emojicon != null) { enterImageView.getImageReceiver().setImageBitmap(Emoji.getEmojiDrawable(react.emojicon)); loopImageView.getImageReceiver().setImageBitmap(Emoji.getEmojiDrawable(react.emojicon)); } else if (currentReaction.isEffect) { @@ -2174,6 +2197,17 @@ protected void dispatchDraw(Canvas canvas) { loopImageView.animatedEmojiDrawable.getImageReceiver().setRoundRadius(selected ? dp(6) : 0); } } + if (currentReaction != null && currentReaction.isStar && particles != null) { + final int sz = (int) (getHeight() * .7f); + AndroidUtilities.rectTmp.set(getWidth() / 2f - sz / 2f, getHeight() / 2f - sz / 2f, getWidth() / 2f + sz / 2f, getHeight() / 2f + sz / 2f); + RLottieDrawable lottieDrawable = enterImageView.getImageReceiver().getLottieAnimation(); + final int startframe = 30, dur = 30; + particles.setVisible(lottieDrawable != null && lottieDrawable.getCurrentFrame() > startframe ? Utilities.clamp01((float) (lottieDrawable.getCurrentFrame() - startframe) / dur) : 0f); + particles.setBounds(AndroidUtilities.rectTmp); + particles.process(); + particles.draw(canvas, 0xFFF5B90E); + invalidate(); + } super.dispatchDraw(canvas); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/RecyclerListView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/RecyclerListView.java index 3f212a850a8..f430a467106 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/RecyclerListView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/RecyclerListView.java @@ -44,6 +44,7 @@ import android.widget.FrameLayout; import androidx.annotation.IntDef; +import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.core.graphics.ColorUtils; import androidx.core.util.Consumer; @@ -132,6 +133,7 @@ public class RecyclerListView extends RecyclerView { private boolean drawSelectorBehind; private int selectorType = 2; + @Nullable protected Drawable selectorDrawable; protected int selectorPosition; protected View selectorView; @@ -1454,7 +1456,9 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) { } if (selectorPosition != NO_POSITION) { selectorRect.offset(-dx, -dy); - selectorDrawable.setBounds(selectorRect); + if (selectorDrawable != null) { + selectorDrawable.setBounds(selectorRect); + } invalidate(); } else { selectorRect.setEmpty(); @@ -1644,6 +1648,8 @@ public void setSelectorDrawableColor(int color) { } if (selectorType == 8) { selectorDrawable = Theme.createRadSelectorDrawable(color, selectorRadius, 0); + } else if (selectorType == 9) { + selectorDrawable = null; } else if (topBottomSelectorRadius > 0) { selectorDrawable = Theme.createRadSelectorDrawable(color, topBottomSelectorRadius, topBottomSelectorRadius); } else if (selectorRadius > 0 && selectorType != Theme.RIPPLE_MASK_CIRCLE_20DP) { @@ -1653,7 +1659,9 @@ public void setSelectorDrawableColor(int color) { } else { selectorDrawable = Theme.createSelectorDrawable(color, selectorType, selectorRadius); } - selectorDrawable.setCallback(this); + if (selectorDrawable != null) { + selectorDrawable.setCallback(this); + } } public Drawable getSelectorDrawable() { @@ -1972,7 +1980,11 @@ public View getEmptyView() { public void invalidateViews() { int count = getChildCount(); for (int a = 0; a < count; a++) { - getChildAt(a).invalidate(); + View child = getChildAt(a); + if (child instanceof Theme.Colorable) { + ((Theme.Colorable) child).updateColors(); + } + child.invalidate(); } } @@ -2015,8 +2027,10 @@ public void removeHighlightRow() { pendingHighlightPosition = null; if (selectorView != null && highlightPosition != NO_POSITION) { positionSelector(highlightPosition, selectorView); - selectorDrawable.setState(new int[]{}); - invalidateDrawable(selectorDrawable); + if (selectorDrawable != null) { + selectorDrawable.setState(new int[]{}); + invalidateDrawable(selectorDrawable); + } selectorView = null; highlightPosition = NO_POSITION; } else { @@ -2542,7 +2556,7 @@ protected void dispatchDraw(Canvas canvas) { itemsEnterAnimator.dispatchDraw(); } - if (drawSelection && drawSelectorBehind && !selectorRect.isEmpty()) { + if (drawSelection && drawSelectorBehind && !selectorRect.isEmpty() && selectorDrawable != null) { if ((translateSelector == -2 || translateSelector == selectorPosition) && selectorView != null) { int bottomPadding; if (getAdapter() instanceof SelectionAdapter) { @@ -2566,7 +2580,7 @@ protected void dispatchDraw(Canvas canvas) { canvas.restore(); } super.dispatchDraw(canvas); - if (drawSelection && !drawSelectorBehind && !selectorRect.isEmpty()) { + if (drawSelection && !drawSelectorBehind && !selectorRect.isEmpty() && selectorDrawable != null) { if ((translateSelector == -2 || translateSelector == selectorPosition) && selectorView != null) { int bottomPadding; if (getAdapter() instanceof SelectionAdapter) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ReplyMessageLine.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ReplyMessageLine.java index 33d9ac9638c..f1ead9e8ef5 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ReplyMessageLine.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ReplyMessageLine.java @@ -49,6 +49,7 @@ public class ReplyMessageLine { private Path color3Path = new Path(); private int switchedCount = 0; private float emojiAlpha = 1f; + private boolean sponsored; private AnimatedEmojiDrawable.SwapAnimatedEmojiDrawable emoji; @@ -152,6 +153,7 @@ public int check(MessageObject messageObject, TLRPC.User currentUser, TLRPC.Chat final boolean dark = resourcesProvider != null ? resourcesProvider.isDark() : Theme.isCurrentThemeDark(); reversedOut = false; emojiDocumentId = 0; + sponsored = messageObject != null && messageObject.isSponsored(); if (messageObject == null) { hasColor2 = hasColor3 = false; color1 = color2 = color3 = Theme.getColor(Theme.key_chat_inReplyLine, resourcesProvider); @@ -224,9 +226,26 @@ public int check(MessageObject messageObject, TLRPC.User currentUser, TLRPC.Chat emojiDocumentId = UserObject.getEmojiId(currentUser); } } else if (messageObject.isFromChannel() && currentChat != null) { - colorId = ChatObject.getColorId(currentChat); - if (type == TYPE_LINK) { - emojiDocumentId = ChatObject.getEmojiId(currentChat); + if (currentChat.signature_profiles) { + long did = messageObject.getFromChatId(); + if (did >= 0) { + TLRPC.User user = MessagesController.getInstance(messageObject.currentAccount).getUser(did); + colorId = UserObject.getColorId(user); + if (type == TYPE_LINK) { + emojiDocumentId = UserObject.getEmojiId(user); + } + } else { + TLRPC.Chat chat = MessagesController.getInstance(messageObject.currentAccount).getChat(-did); + colorId = ChatObject.getColorId(chat); + if (type == TYPE_LINK) { + emojiDocumentId = ChatObject.getEmojiId(chat); + } + } + } else { + colorId = ChatObject.getColorId(currentChat); + if (type == TYPE_LINK) { + emojiDocumentId = ChatObject.getEmojiId(currentChat); + } } } else { colorId = 0; @@ -398,7 +417,7 @@ public void drawLine(Canvas canvas, RectF rect, float alpha) { canvas.save(); clipPath.rewind(); - final int rad = (int) Math.floor(SharedConfig.bubbleRadius / 3f); + final int rad = (int) Math.floor(SharedConfig.bubbleRadius / (sponsored ? 2f : 3f)); rectF.set(rect.left, rect.top, rect.left + Math.max(dp(3), dp(2 * rad)), rect.bottom); clipPath.addRoundRect(rectF, dp(rad), dp(rad), Path.Direction.CW); canvas.clipPath(clipPath); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ScrimOptions.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ScrimOptions.java index fcc4bd42664..f16c09bdbb8 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ScrimOptions.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ScrimOptions.java @@ -27,10 +27,13 @@ import android.os.Build; import android.os.Bundle; import android.text.Layout; +import android.text.Spannable; +import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.StaticLayout; import android.text.TextPaint; import android.text.style.CharacterStyle; +import android.text.style.ForegroundColorSpan; import android.view.Gravity; import android.view.KeyEvent; import android.view.View; @@ -373,6 +376,7 @@ public void setScrim(ChatMessageCell cell, CharacterStyle link, CharSequence rep float x = 0, y = 0; float rtloffset = 0; StaticLayout layout = null; + int layoutOriginalWidth = 0; MessageObject messageObject = cell.getMessageObject(); ArrayList<MessageObject.TextLayoutBlock> textblocks = null; @@ -384,7 +388,7 @@ public void setScrim(ChatMessageCell cell, CharacterStyle link, CharSequence rep } if (textblocks == null) { x = cell.getTextX(); - y = cell.getTextY(); + y = cell.getTextY() + cell.transitionYOffsetForDrawables; textblocks = messageObject.textLayoutBlocks; rtloffset = messageObject.textXOffset; } @@ -415,6 +419,8 @@ public void setScrim(ChatMessageCell cell, CharacterStyle link, CharSequence rep x += (textblock.isRtl() ? (int) Math.ceil(rtloffset) : 0); y += textblock.padTop + textblock.textYOffset(textblocks, cell.transitionParams); + + layoutOriginalWidth = textblock.originalWidth; } if (layout == null) return; @@ -432,7 +438,7 @@ public void setScrim(ChatMessageCell cell, CharacterStyle link, CharSequence rep realPathBounds = new RectF(); path.computeBounds(realPathBounds, true); - layout = MessageObject.makeStaticLayout(replaceText, layout.getPaint(), layout.getWidth(), 1f, 0f, true); + layout = MessageObject.makeStaticLayout(replaceText, layout.getPaint(), layout.getWidth(), 1f, 0f, false); start = 0; end = replaceText.length(); float l = layout.getWidth(), r = 0; @@ -483,18 +489,29 @@ public void setScrim(ChatMessageCell cell, CharacterStyle link, CharSequence rep paint.setTextSize(layout.getPaint().getTextSize()); paint.setTextAlign(layout.getPaint().getTextAlign()); paint.setTypeface(layout.getPaint().getTypeface()); - final StaticLayout finalLayout; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - StaticLayout.Builder builder = - StaticLayout.Builder.obtain(layout.getText(), 0, layout.getText().length(), paint, layout.getWidth()) - .setLineSpacing(0f, 1f) - .setBreakStrategy(StaticLayout.BREAK_STRATEGY_HIGH_QUALITY) - .setHyphenationFrequency(StaticLayout.HYPHENATION_FREQUENCY_NONE) - .setAlignment(Layout.Alignment.ALIGN_NORMAL); - finalLayout = builder.build(); - } else { - finalLayout = new StaticLayout(layout.getText(), paint, layout.getWidth(), Layout.Alignment.ALIGN_NORMAL, 1f, 0f, false); + paint.setLinearText(layout.getPaint().isLinearText()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + paint.setLetterSpacing(layout.getPaint().getLetterSpacing()); + paint.setFontFeatureSettings(layout.getPaint().getFontFeatureSettings()); + paint.setElegantTextHeight(layout.getPaint().isElegantTextHeight()); + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + paint.setFontVariationSettings(layout.getPaint().getFontVariationSettings()); + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + paint.setEndHyphenEdit(layout.getPaint().getEndHyphenEdit()); } + CharSequence text = new SpannableStringBuilder(AnimatedEmojiSpan.cloneSpans(layout.getText(), -1, paint.getFontMetricsInt())); + if (text instanceof Spannable) { + Spannable spannable = (Spannable) text; + if (start > 0) { + spannable.setSpan(new ForegroundColorSpan(0), 0, start, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } + if (end < spannable.length()) { + spannable.setSpan(new ForegroundColorSpan(0), end, spannable.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } + } + final StaticLayout finalLayout = MessageObject.makeStaticLayout(text, paint, layoutOriginalWidth, 1f, messageObject.totalAnimatedEmojiCount >= 4 ? -1 : 0, false); final int finalBlockNum = blockNum; final int[] pos = new int[2]; cell.getLocationOnScreen(pos); @@ -511,6 +528,7 @@ public void draw(@NonNull Canvas canvas) { AndroidUtilities.rectTmp.set(getBounds()); AndroidUtilities.rectTmp.left -= path.getRadius() / 2f; + canvas.save(); canvas.saveLayerAlpha(AndroidUtilities.rectTmp, alpha, Canvas.ALL_SAVE_FLAG); canvas.translate(pos2[0], pos2[1]); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ScrollSlidingTextTabStrip.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ScrollSlidingTextTabStrip.java index 95486c08a48..71f631ffd7b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ScrollSlidingTextTabStrip.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ScrollSlidingTextTabStrip.java @@ -8,16 +8,19 @@ package org.telegram.ui.Components; +import static org.telegram.messenger.AndroidUtilities.dp; import static org.telegram.messenger.AndroidUtilities.lerp; import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.Paint; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; import android.os.SystemClock; import android.text.Layout; +import android.util.Log; import android.util.SparseArray; import android.util.SparseIntArray; import android.util.TypedValue; @@ -162,7 +165,7 @@ protected void onLayout(boolean changed, int l, int t, int r, int b) { } }; tabsContainer.setOrientation(LinearLayout.HORIZONTAL); - tabsContainer.setPadding(AndroidUtilities.dp(7), 0, AndroidUtilities.dp(7), 0); + tabsContainer.setPadding(dp(7), 0, dp(7), 0); tabsContainer.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); addView(tabsContainer); } @@ -243,9 +246,9 @@ public int getNextPageId(boolean forward) { public SparseArray<View> removeTabs() { SparseArray<View> views = new SparseArray<>(); - for (int i = 0; i < getChildCount(); i++) { - View child = getChildAt(i); - views.get(positionToId.get(i), child); + for (int i = 0; i < tabsContainer.getChildCount(); i++) { + View child = tabsContainer.getChildAt(i); + views.put(positionToId.get(i), child); } positionToId.clear(); idToPosition.clear(); @@ -292,13 +295,13 @@ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { info.setSelected(selectedTabId == id); } }; - tab.setWillNotDraw(false); tab.setGravity(Gravity.CENTER); + tab.setTextAlignment(TEXT_ALIGNMENT_CENTER); tab.setBackground(Theme.createSelectorDrawable(Theme.multAlpha(processColor(Theme.getColor(activeTextColorKey, resourcesProvider)), .15f), 3)); tab.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15); tab.setSingleLine(true); tab.setTypeface(AndroidUtilities.bold()); - tab.setPadding(AndroidUtilities.dp(16), 0, AndroidUtilities.dp(16), 0); + tab.setPadding(dp(16), 0, dp(16), 0); tab.setOnClickListener(v -> { int position1 = tabsContainer.indexOfChild(v); scrollTo(id, position1, v); @@ -361,7 +364,11 @@ public void finishAddingTabs() { tab.setTag(currentPosition == a ? activeTextColorKey : unactiveTextColorKey); tab.setTextColor(processColor(Theme.getColor(currentPosition == a ? activeTextColorKey : unactiveTextColorKey, resourcesProvider))); if (a == 0) { + int prevWidth = tab.getLayoutParams().width; tab.getLayoutParams().width = count == 1 ? LayoutHelper.WRAP_CONTENT : 0; + if (prevWidth != tab.getLayoutParams().width) { + tab.requestLayout(); + } } } } @@ -427,11 +434,13 @@ protected boolean drawChild(Canvas canvas, View child, long drawingTime) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int width = MeasureSpec.getSize(widthMeasureSpec) - AndroidUtilities.dp(22); + int width = MeasureSpec.getSize(widthMeasureSpec) - dp(22); int count = tabsContainer.getChildCount(); for (int a = 0; a < count; a++) { View child = tabsContainer.getChildAt(a); LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) child.getLayoutParams(); + float prevWeight = layoutParams.weight; + int prevWidth = layoutParams.width; if (allTextWidth > width) { layoutParams.weight = 0; layoutParams.width = LinearLayout.LayoutParams.WRAP_CONTENT; @@ -447,12 +456,20 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { layoutParams.width = LayoutHelper.WRAP_CONTENT; } } + if (Math.abs(prevWeight - layoutParams.weight) > 0.001f || prevWidth != layoutParams.width) { + child.setLayoutParams(layoutParams); + child.requestLayout(); + } } + float weightSum = tabsContainer.getWeightSum(); if (count == 1 || allTextWidth > width) { tabsContainer.setWeightSum(0.0f); } else { tabsContainer.setWeightSum(1.0f); } + if (Math.abs(weightSum - tabsContainer.getWeightSum()) > 0.1f) { + tabsContainer.requestLayout(); + } super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @@ -469,13 +486,13 @@ private void scrollToChild(int position, boolean smooth) { int currentScrollX = getScrollX(); int left = child.getLeft(); int width = child.getMeasuredWidth(); - if (left - AndroidUtilities.dp(50) < currentScrollX) { + if (left - dp(50) < currentScrollX) { if (smooth) { - smoothScrollTo(left - AndroidUtilities.dp(50), 0); + smoothScrollTo(left - dp(50), 0); } else { - scrollTo(left - AndroidUtilities.dp(50), 0); + scrollTo(left - dp(50), 0); } - } else if (left + width + AndroidUtilities.dp(21) > currentScrollX + getWidth()) { + } else if (left + width + dp(21) > currentScrollX + getWidth()) { if (smooth) { smoothScrollTo(left + width, 0); } else { @@ -574,7 +591,7 @@ public void selectTabWithId(int id, float progress) { private int getChildWidth(TextView child) { Layout layout = child.getLayout(); if (layout != null) { - return (int) Math.ceil(layout.getLineWidth(0)) + AndroidUtilities.dp(2); + return (int) Math.ceil(layout.getLineWidth(0)) + dp(2); } else { return child.getMeasuredWidth(); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/SearchViewPager.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/SearchViewPager.java index 5aae125e781..18adf73f80a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/SearchViewPager.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/SearchViewPager.java @@ -83,6 +83,13 @@ public class SearchViewPager extends ViewPagerFixed implements FilteredSearchVie public RecyclerListView channelsSearchListView; public DialogsChannelsAdapter channelsSearchAdapter; + private DefaultItemAnimator botsItemAnimator; + public FrameLayout botsSearchContainer; + public StickerEmptyView botsEmptyView; + private LinearLayoutManager botsSearchLayoutManager; + public RecyclerListView botsSearchListView; + public DialogsBotsAdapter botsSearchAdapter; + private NumberTextView selectedMessagesCountTextView; private boolean isActionModeShowed; private HashMap<FilteredSearchView.MessageHashId, MessageObject> selectedFiles = new HashMap<>(); @@ -335,6 +342,77 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) { } }); + + botsSearchContainer = new FrameLayout(context); + + botsItemAnimator = new DefaultItemAnimator() { + @Override + protected void onMoveAnimationUpdate(RecyclerView.ViewHolder holder) { + super.onMoveAnimationUpdate(holder); + invalidate(); + } + }; + botsItemAnimator.setSupportsChangeAnimations(false); + botsItemAnimator.setDelayAnimations(false); + botsItemAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + botsItemAnimator.setDurations(350); + + botsSearchListView = new BlurredRecyclerView(context); + botsSearchListView.setItemAnimator(botsItemAnimator); + botsSearchListView.setPivotY(0); + botsSearchListView.setVerticalScrollBarEnabled(true); + botsSearchListView.setInstantClick(true); + botsSearchListView.setVerticalScrollbarPosition(LocaleController.isRTL ? RecyclerListView.SCROLLBAR_POSITION_LEFT : RecyclerListView.SCROLLBAR_POSITION_RIGHT); + botsSearchListView.setLayoutManager(botsSearchLayoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)); + botsSearchListView.setAnimateEmptyView(true, RecyclerListView.EMPTY_VIEW_ANIMATION_TYPE_ALPHA); + + loadingView = new FlickerLoadingView(context); + loadingView.setViewType(1); + botsEmptyView = new StickerEmptyView(context, loadingView, StickerEmptyView.STICKER_TYPE_SEARCH) { + @Override + public void setVisibility(int visibility) { + if (noMediaFiltersSearchView.getTag() != null) { + super.setVisibility(View.GONE); + return; + } + super.setVisibility(visibility); + } + }; + botsEmptyView.title.setText(LocaleController.getString("NoResult", R.string.NoResult)); + botsEmptyView.subtitle.setVisibility(View.GONE); + botsEmptyView.setVisibility(View.GONE); + botsEmptyView.addView(loadingView, 0); + botsEmptyView.showProgress(true, false); + botsSearchContainer.addView(botsEmptyView); + botsSearchContainer.addView(botsSearchListView); + botsSearchListView.setEmptyView(botsEmptyView); + botsSearchListView.setAdapter(botsSearchAdapter = new DialogsBotsAdapter(botsSearchListView, context, currentAccount, folderId, false, null) { + @Override + public void update(boolean animated) { + super.update(animated); + botsEmptyView.showProgress(loadingMessages || loadingBots || searchMessages == null || !searchMessages.isEmpty(), animated); + botsEmptyView.title.setText(LocaleController.getString("NoResult", R.string.NoResult)); + botsEmptyView.subtitle.setVisibility(View.GONE); + } + + @Override + protected void hideKeyboard() { + AndroidUtilities.hideKeyboard(fragment.getParentActivity().getCurrentFocus()); + } + }); + botsSearchListView.setOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrollStateChanged(RecyclerView recyclerView, int newState) { + if (newState == RecyclerView.SCROLL_STATE_DRAGGING) { + AndroidUtilities.hideKeyboard(fragment.getParentActivity().getCurrentFocus()); + } + } + @Override + public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + botsSearchAdapter.checkBottom(); + } + }); + itemsEnterAnimator = new RecyclerItemsEnterAnimator(searchListView, true); setAdapter(viewPagerAdapter = new ViewPagerAdapter()); @@ -399,6 +477,10 @@ private void search(View view, int position, String query, boolean reset) { MessagesController.getInstance(currentAccount).getChannelRecommendations(0); channelsSearchAdapter.search(query); channelsEmptyView.setKeyboardHeight(keyboardSize, false); + } else if (view == botsSearchContainer) { +// MessagesController.getInstance(currentAccount).getChannelRecommendations(0); + botsSearchAdapter.search(query); + botsEmptyView.setKeyboardHeight(keyboardSize, false); } else if (view == searchContainer) { if (dialogId == 0 && minDate == 0 && maxDate == 0 || forumDialogId != 0) { lastSearchScrolledToTop = false; @@ -869,6 +951,9 @@ public void reset() { if (channelsSearchLayoutManager != null) { channelsSearchLayoutManager.scrollToPositionWithOffset(0, 0); } + if (botsSearchLayoutManager != null) { + botsSearchLayoutManager.scrollToPositionWithOffset(0, 0); + } viewsByType.clear(); } @@ -967,11 +1052,15 @@ protected void onAttachedToWindow() { NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.channelRecommendationsLoaded); NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.dialogDeleted); NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.dialogsNeedReload); + NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.reloadWebappsHints); attached = true; if (channelsSearchAdapter != null) { channelsSearchAdapter.update(false); } + if (botsSearchAdapter != null) { + botsSearchAdapter.update(false); + } } @Override @@ -981,6 +1070,7 @@ protected void onDetachedFromWindow() { NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.channelRecommendationsLoaded); NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.dialogDeleted); NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.dialogsNeedReload); + NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.reloadWebappsHints); } @Override @@ -992,6 +1082,8 @@ public void didReceivedNotification(int id, int account, Object... args) { } else if (id == NotificationCenter.dialogDeleted || id == NotificationCenter.dialogsNeedReload) { channelsSearchAdapter.updateMyChannels(); channelsSearchAdapter.update(true); + } else if (id == NotificationCenter.reloadWebappsHints) { + botsSearchAdapter.update(true); } } @@ -1007,7 +1099,7 @@ public void cancelEnterAnimation() { } public void showDownloads() { - setPosition(3); + setPosition(4); } public int getPositionForType(int initialSearchType) { @@ -1027,6 +1119,7 @@ private class ViewPagerAdapter extends ViewPagerFixed.Adapter { private final static int CHANNELS_TYPE = 1; private final static int DOWNLOADS_TYPE = 2; private final static int FILTER_TYPE = 3; + private final static int BOTS_TYPE = 4; public ViewPagerAdapter() { updateItems(); @@ -1036,6 +1129,7 @@ public void updateItems() { items.clear(); items.add(new Item(DIALOGS_TYPE)); items.add(new Item(CHANNELS_TYPE)); + items.add(new Item(BOTS_TYPE)); if (!showOnlyDialogsAdapter) { Item item = new Item(FILTER_TYPE); item.filterIndex = 0; @@ -1064,6 +1158,8 @@ public String getItemTitle(int position) { return LocaleController.getString(R.string.SearchAllChatsShort); } else if (items.get(position).type == CHANNELS_TYPE) { return LocaleController.getString(R.string.ChannelsTab); + } else if (items.get(position).type == BOTS_TYPE) { + return LocaleController.getString(R.string.AppsTab); } else if (items.get(position).type == DOWNLOADS_TYPE) { return LocaleController.getString(R.string.DownloadsTabs); } else { @@ -1082,6 +1178,8 @@ public View createView(int viewType) { return searchContainer; } else if (viewType == 3) { return channelsSearchContainer; + } else if (viewType == 4) { + return botsSearchContainer; } else if (viewType == 2) { downloadsContainer = new SearchDownloadsContainer(parent, currentAccount); downloadsContainer.recyclerListView.addOnScrollListener(new RecyclerView.OnScrollListener() { @@ -1116,6 +1214,9 @@ public int getItemViewType(int position) { if (items.get(position).type == CHANNELS_TYPE) { return 3; } + if (items.get(position).type == BOTS_TYPE) { + return 4; + } if (items.get(position).type == DOWNLOADS_TYPE) { return 2; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/SelectSendAsPremiumHintBulletinLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/SelectSendAsPremiumHintBulletinLayout.java index 304c23279b1..e73d4e1c856 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/SelectSendAsPremiumHintBulletinLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/SelectSendAsPremiumHintBulletinLayout.java @@ -16,12 +16,12 @@ @SuppressLint("ViewConstructor") public class SelectSendAsPremiumHintBulletinLayout extends Bulletin.MultiLineLayout { - public SelectSendAsPremiumHintBulletinLayout(@NonNull Context context, Theme.ResourcesProvider resourcesProvider, Runnable callback) { + public SelectSendAsPremiumHintBulletinLayout(@NonNull Context context, Theme.ResourcesProvider resourcesProvider, boolean channels, Runnable callback) { super(context, resourcesProvider); imageView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.msg_premium_prolfilestar)); imageView.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_undo_infoColor), PorterDuff.Mode.SRC_IN)); - textView.setText(AndroidUtilities.replaceTags(LocaleController.getString(R.string.SelectSendAsPeerPremiumHint))); + textView.setText(AndroidUtilities.replaceTags(LocaleController.getString(channels ? R.string.SelectSendAsPeerPremiumHint : R.string.SelectSendAsPeerPremiumHint))); Bulletin.UndoButton button = new Bulletin.UndoButton(context, true, resourcesProvider); button.setText(LocaleController.getString(R.string.SelectSendAsPeerPremiumOpen)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/SenderSelectPopup.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/SenderSelectPopup.java index 6f7b11bea7c..646ef1bd3b8 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/SenderSelectPopup.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/SenderSelectPopup.java @@ -66,6 +66,7 @@ public class SenderSelectPopup extends ActionBarPopupWindow { private TLRPC.ChatFull chatFull; private TLRPC.TL_channels_sendAsPeers sendAsPeers; + private final int currentAccount; private FrameLayout scrimPopupContainerLayout; private View headerShadow; @@ -92,6 +93,7 @@ public SenderSelectPopup(Context context, ChatActivity parentFragment, MessagesC this.chatFull = chatFull; this.sendAsPeers = sendAsPeers; + this.currentAccount = parentFragment == null ? UserConfig.selectedAccount : parentFragment.getCurrentAccount(); scrimPopupContainerLayout = new BackButtonFrameLayout(context); scrimPopupContainerLayout.setLayoutParams(LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT)); @@ -275,7 +277,9 @@ public boolean onTouchEvent(MotionEvent event) { windowManager.addView(bulletinContainer, params); } - Bulletin bulletin = Bulletin.make(bulletinContainer, new SelectSendAsPremiumHintBulletinLayout(context, parentFragment.themeDelegate, ()->{ + final TLRPC.Chat chat = chatFull == null ? null : MessagesController.getInstance(currentAccount).getChat(chatFull.id); + final boolean toChannel = ChatObject.isChannelAndNotMegaGroup(chat); + Bulletin bulletin = Bulletin.make(bulletinContainer, new SelectSendAsPremiumHintBulletinLayout(context, parentFragment.themeDelegate, toChannel, () -> { if (parentFragment != null) { parentFragment.presentFragment(new PremiumPreviewFragment("select_sender")); dismiss(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Shaker.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Shaker.java new file mode 100644 index 00000000000..8881fd796e5 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Shaker.java @@ -0,0 +1,48 @@ +package org.telegram.ui.Components; + +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.AndroidUtilities.lerp; + +import android.graphics.Canvas; +import android.view.View; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.Utilities; + +public class Shaker { + + private final Runnable invalidate; + private final long start = System.currentTimeMillis(); + + private final float r, sx, sy; + + public Shaker() { + this((Runnable) null); + } + public Shaker(View view) { + this(view::invalidate); + } + public Shaker(Runnable invalidate) { + this.invalidate = invalidate; + r = lerp(5f, 9f, Utilities.clamp01(Utilities.fastRandom.nextFloat())); + sx = lerp(2.5f, 5f, Utilities.clamp01(Utilities.fastRandom.nextFloat())); + sy = lerp(2.5f, 5.2f, Utilities.clamp01(Utilities.fastRandom.nextFloat())); + } + + public void concat(Canvas canvas, float alpha) { + final float t = (System.currentTimeMillis() - start) / 1000f; + + canvas.rotate( + (float) Math.sin(t * r * Math.PI) * 1 * alpha + ); + canvas.translate( + (float) Math.cos(t * sx * Math.PI) * dp(.5f) * alpha, + (float) Math.sin(t * sy * Math.PI) * dp(.5f) * alpha + ); + + if (alpha > 0 && invalidate != null) { + invalidate.run(); + } + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/SharedMediaLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/SharedMediaLayout.java index edad4f68c74..a722208cc5e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/SharedMediaLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/SharedMediaLayout.java @@ -107,7 +107,6 @@ import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.ActionBar.ThemeDescription; import org.telegram.ui.Adapters.SearchAdapterHelper; -import org.telegram.ui.ArticleViewer; import org.telegram.ui.CalendarActivity; import org.telegram.ui.Cells.ChatActionCell; import org.telegram.ui.Cells.ContextLinkCell; @@ -130,6 +129,7 @@ import org.telegram.ui.Components.Premium.LimitReachedBottomSheet; import org.telegram.ui.Components.Reactions.ReactionsLayoutInBubble; import org.telegram.ui.DialogsActivity; +import org.telegram.ui.LaunchActivity; import org.telegram.ui.PhotoViewer; import org.telegram.ui.PremiumPreviewFragment; import org.telegram.ui.ProfileActivity; @@ -137,6 +137,7 @@ import org.telegram.ui.Stories.StoriesListPlaceProvider; import org.telegram.ui.Stories.UserListPoller; import org.telegram.ui.Stories.ViewsForPeerStoriesRequester; +import org.telegram.ui.Stories.bots.BotPreviewsEditContainer; import org.telegram.ui.Stories.recorder.ButtonWithCounterView; import org.telegram.ui.Stories.recorder.StoryRecorder; import org.telegram.ui.TopicsFragment; @@ -163,6 +164,7 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter public static final int TAB_RECOMMENDED_CHANNELS = 10; public static final int TAB_SAVED_DIALOGS = 11; public static final int TAB_SAVED_MESSAGES = 12; + public static final int TAB_BOT_PREVIEWS = 13; public static final int FILTER_PHOTOS_AND_VIDEOS = 0; public static final int FILTER_PHOTOS_ONLY = 1; @@ -212,6 +214,9 @@ public boolean dispatchFastScrollEvent(MotionEvent ev) { public boolean checkPinchToZoom(MotionEvent ev) { final int selectedType = mediaPages[0].selectedType; + if (selectedType == TAB_BOT_PREVIEWS && botPreviewsContainer != null) { + return botPreviewsContainer.checkPinchToZoom(ev); + } if (selectedType != TAB_PHOTOVIDEO && selectedType != TAB_STORIES && selectedType != TAB_ARCHIVED_STORIES || getParent() == null) { return false; } @@ -362,7 +367,7 @@ private boolean checkPointerIds(MotionEvent ev) { } public boolean isSwipeBackEnabled() { - if (canEditStories() && getClosestTab() == TAB_STORIES && isActionModeShown()) { + if (canEditStories() && (getClosestTab() == TAB_STORIES || getClosestTab() == TAB_BOT_PREVIEWS) && isActionModeShown()) { return false; } return !photoVideoChangeColumnsAnimation && !tabsAnimationInProgress; @@ -424,7 +429,12 @@ public void openStory(DialogCell dialogCell, Runnable onDone) { if (profileActivity == null) return; if (profileActivity.getMessagesController().getStoriesController().hasStories(dialogCell.getDialogId())) { profileActivity.getOrCreateStoryViewer().doOnAnimationReady(onDone); - profileActivity.getOrCreateStoryViewer().open(profileActivity.getContext(), dialogCell.getDialogId(), StoriesListPlaceProvider.of((RecyclerListView) dialogCell.getParent()).addBottomClip(profileActivity instanceof ProfileActivity && ((ProfileActivity) profileActivity).myProfile ? dp(68) : 0)); + profileActivity.getOrCreateStoryViewer().open( + profileActivity.getContext(), + dialogCell.getDialogId(), + StoriesListPlaceProvider.of((RecyclerListView) dialogCell.getParent()) + .addBottomClip(profileActivity instanceof ProfileActivity && ((ProfileActivity) profileActivity).myProfile ? dp(68) : 0) + ); } } @@ -503,9 +513,9 @@ public float getPhotoVideoOptionsAlpha(float progress) { return 0; } float alpha = 0; - if (mediaPages[1] != null && (mediaPages[1].selectedType == TAB_PHOTOVIDEO || mediaPages[1].selectedType == TAB_STORIES && TextUtils.isEmpty(getStoriesHashtag()) || mediaPages[1].selectedType == TAB_ARCHIVED_STORIES || mediaPages[1].selectedType == TAB_SAVED_DIALOGS)) + if (mediaPages[1] != null && (mediaPages[1].selectedType == TAB_PHOTOVIDEO || mediaPages[1].selectedType == TAB_STORIES && TextUtils.isEmpty(getStoriesHashtag()) || mediaPages[1].selectedType == TAB_ARCHIVED_STORIES || mediaPages[1].selectedType == TAB_SAVED_DIALOGS || mediaPages[1].selectedType == TAB_BOT_PREVIEWS)) alpha += progress; - if (mediaPages[0] != null && (mediaPages[0].selectedType == TAB_PHOTOVIDEO || mediaPages[0].selectedType == TAB_STORIES && TextUtils.isEmpty(getStoriesHashtag()) || mediaPages[0].selectedType == TAB_ARCHIVED_STORIES || mediaPages[0].selectedType == TAB_SAVED_DIALOGS)) + if (mediaPages[0] != null && (mediaPages[0].selectedType == TAB_PHOTOVIDEO || mediaPages[0].selectedType == TAB_STORIES && TextUtils.isEmpty(getStoriesHashtag()) || mediaPages[0].selectedType == TAB_ARCHIVED_STORIES || mediaPages[0].selectedType == TAB_SAVED_DIALOGS || mediaPages[0].selectedType == TAB_BOT_PREVIEWS)) alpha += 1f - progress; return alpha; } @@ -603,6 +613,7 @@ public void updateFastScrollVisibility(MediaPage mediaPage, boolean animated) { private SavedDialogsAdapter savedDialogsAdapter; private SavedMessagesSearchAdapter savedMessagesSearchAdapter; private ChatActivityContainer savedMessagesContainer; + private BotPreviewsEditContainer botPreviewsContainer; private ChatUsersAdapter chatUsersAdapter; private ItemTouchHelper storiesReorder; private StoriesAdapter storiesAdapter; @@ -679,8 +690,6 @@ public void updateFastScrollVisibility(MediaPage mediaPage, boolean animated) { private float photoVideoChangeColumnsProgress; private boolean photoVideoChangeColumnsAnimation; private int changeColumnsTab; - private int animationSupportingSortedCellsOffset; - private ArrayList<SharedPhotoVideoCell2> animationSupportingSortedCells = new ArrayList<>(); private int animateToColumnsCount; private static final Interpolator interpolator = t -> { @@ -698,6 +707,7 @@ public static class SharedMediaPreloader implements NotificationCenter.Notificat private int[] mediaMergeCount = new int[]{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; private int[] lastMediaCount = new int[]{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; private int[] lastLoadMediaCount = new int[]{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; + public boolean hasPreviews; public boolean hasSavedMessages; private boolean checkedHasSavedMessages; private SharedMediaData[] sharedMediaData; @@ -721,7 +731,6 @@ public boolean hasSharedMedia() { if (parentFragment != null && dialogId == parentFragment.getUserConfig().getClientUserId() && topicId == 0 && parentFragment.getMessagesController().getSavedMessagesController().hasDialogs()) { return true; } - // TODO: stories? return false; } @@ -856,7 +865,7 @@ public void didReceivedNotification(int id, int account, Object... args) { type = MediaDataController.MEDIA_VIDEOS_ONLY; } } - parentFragment.getMediaDataController().loadMedia(did, lastLoadMediaCount[a] == -1 ? 30 : 20, 0, 0, type, topicId,2, parentFragment.getClassGuid(), 0, null, null); + parentFragment.getMediaDataController().loadMedia(did, lastLoadMediaCount[a] == -1 ? 30 : 20, 0, 0, type, topicId,1, parentFragment.getClassGuid(), 0, null, null); lastLoadMediaCount[a] = mediaCount[a]; } } @@ -1444,6 +1453,7 @@ public SharedMediaLayout(Context context, long did, SharedMediaPreloader preload globalGradientView = new FlickerLoadingView(context); globalGradientView.setIsSingleCell(true); + TLRPC.User user = parent.getMessagesController().getUser(did); sharedMediaPreloader = preloader; this.delegate = delegate; int[] mediaCount = preloader.getLastMediaCount(); @@ -1453,6 +1463,10 @@ public SharedMediaLayout(Context context, long did, SharedMediaPreloader preload this.initialTab = initialTab; } else if (initialTab == TAB_SAVED_DIALOGS) { this.initialTab = initialTab; + } else if (user != null && user.bot && user.bot_has_main_app && user.bot_can_edit) { + this.initialTab = TAB_BOT_PREVIEWS; + } else if (userInfo != null && userInfo.bot_info != null && userInfo.bot_info.has_preview_medias) { + this.initialTab = TAB_STORIES; } else if (userInfo != null && userInfo.stories_pinned_available || chatInfo != null && chatInfo.stories_pinned_available || isStoriesView()) { this.initialTab = getInitialTab(); } else if (initialTab != -1 && topicId == 0) { @@ -1698,6 +1712,34 @@ public void onLayout(int l, int t, int r, int b) { photoVideoOptionsItem.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { + int tab = getClosestTab(); + boolean isStories = tab == TAB_STORIES || tab == TAB_ARCHIVED_STORIES; + + final int currentAccount = profileActivity.getCurrentAccount(); + final TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(dialog_id); + if (tab == TAB_BOT_PREVIEWS && user != null && user.bot && user.bot_has_main_app && user.bot_can_edit && botPreviewsContainer != null) { + ItemOptions.makeOptions(profileActivity, photoVideoOptionsItem) + .addIf(botPreviewsContainer.getItemsCount() < profileActivity.getMessagesController().botPreviewMediasMax, R.drawable.msg_addbot, getString(R.string.ProfileBotAddPreview), () -> { + StoryRecorder.getInstance(profileActivity.getParentActivity(), profileActivity.getCurrentAccount()).openBot(dialog_id, botPreviewsContainer.getCurrentLang(), null); + }) + .addIf(botPreviewsContainer.getItemsCount() > 1 && !botPreviewsContainer.isSelectedAll(), R.drawable.tabs_reorder, getString(R.string.ProfileBotReorder), () -> { + botPreviewsContainer.selectAll(); + }) + .addIf(botPreviewsContainer.getItemsCount() > 0, R.drawable.msg_select, getString(botPreviewsContainer.isSelectedAll() ? R.string.ProfileBotUnSelect : R.string.ProfileBotSelect), () -> { + if (botPreviewsContainer.isSelectedAll()) { + botPreviewsContainer.unselectAll(); + } else { + botPreviewsContainer.selectAll(); + } + }) + .addIf(!TextUtils.isEmpty(botPreviewsContainer.getCurrentLang()), R.drawable.msg_delete, LocaleController.formatString(R.string.ProfileBotRemoveLang, TranslateAlert2.languageName(botPreviewsContainer.getCurrentLang())), true, () -> { + botPreviewsContainer.deleteLang(botPreviewsContainer.getCurrentLang()); + }) + .translate(0, -dp(52)) + .setDimAlpha(0) + .show(); + return; + } if (getSelectedTab() == TAB_SAVED_DIALOGS) { ItemOptions.makeOptions(profileActivity, photoVideoOptionsItem) .add(R.drawable.msg_discussion, getString(R.string.SavedViewAsMessages), () -> { @@ -1747,8 +1789,6 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } }; - int tab = getClosestTab(); - boolean isStories = tab == TAB_STORIES || tab == TAB_ARCHIVED_STORIES; mediaZoomInItem = new ActionBarMenuSubItem(context, true, false, resourcesProvider); mediaZoomOutItem = new ActionBarMenuSubItem(context, false, false, resourcesProvider); @@ -1774,8 +1814,8 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { mediaZoomOutItem.setAlpha(0.5f); } - boolean hasDifferentTypes = isStories || (sharedMediaData[0].hasPhotos && sharedMediaData[0].hasVideos) || !sharedMediaData[0].endReached[0] || !sharedMediaData[0].endReached[1] || !sharedMediaData[0].startReached; - if (!DialogObject.isEncryptedDialog(dialog_id)) { + final boolean hasDifferentTypes = isStories || (sharedMediaData[0].hasPhotos && sharedMediaData[0].hasVideos) || !sharedMediaData[0].endReached[0] || !sharedMediaData[0].endReached[1] || !sharedMediaData[0].startReached; + if (!DialogObject.isEncryptedDialog(dialog_id) && !(user != null && user.bot)) { ActionBarMenuSubItem calendarItem = new ActionBarMenuSubItem(context, false, false, resourcesProvider); calendarItem.setTextAndIcon(getString("Calendar", R.string.Calendar), R.drawable.msg_calendar2); popupLayout.addView(calendarItem); @@ -2118,6 +2158,124 @@ public void notifyDataSetChanged() { }; animationSupportingArchivedStoriesAdapter = new StoriesAdapter(context, true); linksAdapter = new SharedLinksAdapter(context); + if (isBot()) { + botPreviewsContainer = new BotPreviewsEditContainer(context, profileActivity, dialog_id) { + @Override + public void onSelectedTabChanged() { + SharedMediaLayout.this.onSelectedTabChanged(); + } + @Override + protected boolean isSelected(MessageObject messageObject) { + return selectedFiles[messageObject.getDialogId() == dialog_id ? 0 : 1].indexOfKey(messageObject.getId()) >= 0; + } + @Override + protected boolean select(MessageObject messageObject) { + if (messageObject == null) return false; + final int loadIndex = messageObject.getDialogId() == dialog_id ? 0 : 1; + if (selectedFiles[loadIndex].indexOfKey(messageObject.getId()) < 0) { + if (selectedFiles[0].size() + selectedFiles[1].size() >= 100) { + return false; + } + selectedFiles[loadIndex].put(messageObject.getId(), messageObject); + if (!messageObject.canDeleteMessage(false, null)) { + cantDeleteMessagesCount++; + } + if (!isActionModeShowed) { + AndroidUtilities.hideKeyboard(profileActivity.getParentActivity().getCurrentFocus()); + deleteItem.setVisibility(cantDeleteMessagesCount == 0 ? View.VISIBLE : View.GONE); + if (gotoItem != null) { + gotoItem.setVisibility(getClosestTab() != TAB_STORIES && getClosestTab() != TAB_BOT_PREVIEWS ? View.VISIBLE : View.GONE); + } + if (pinItem != null) { + pinItem.setVisibility(View.GONE); + } + if (unpinItem != null) { + unpinItem.setVisibility(View.GONE); + } + if (forwardItem != null) { + forwardItem.setVisibility(getClosestTab() != TAB_STORIES && getClosestTab() != TAB_BOT_PREVIEWS ? View.VISIBLE : View.GONE); + } + selectedMessagesCountTextView.setNumber(selectedFiles[0].size() + selectedFiles[1].size(), false); + AnimatorSet animatorSet = new AnimatorSet(); + ArrayList<Animator> animators = new ArrayList<>(); + for (int i = 0; i < actionModeViews.size(); i++) { + View view2 = actionModeViews.get(i); + AndroidUtilities.clearDrawableAnimation(view2); + animators.add(ObjectAnimator.ofFloat(view2, View.SCALE_Y, 0.1f, 1.0f)); + } + animatorSet.playTogether(animators); + animatorSet.setDuration(250); + animatorSet.start(); + scrolling = false; + showActionMode(true); + } else { + selectedMessagesCountTextView.setNumber(selectedFiles[0].size() + selectedFiles[1].size(), true); + } + updateSelection(true); + return true; + } + return false; + } + @Override + protected boolean unselect(MessageObject messageObject) { + if (messageObject == null) return false; + final int loadIndex = messageObject.getDialogId() == dialog_id ? 0 : 1; + if (selectedFiles[loadIndex].indexOfKey(messageObject.getId()) >= 0) { + selectedFiles[loadIndex].remove(messageObject.getId()); + if (!messageObject.canDeleteMessage(false, null)) { + cantDeleteMessagesCount--; + } + if (selectedFiles[0].size() == 0 && selectedFiles[1].size() == 0) { + AndroidUtilities.hideKeyboard(profileActivity.getParentActivity().getCurrentFocus()); + selectedFiles[0].clear(); + selectedFiles[1].clear(); + deleteItem.setVisibility(cantDeleteMessagesCount == 0 ? View.VISIBLE : View.GONE); + if (gotoItem != null) { + gotoItem.setVisibility(getClosestTab() != TAB_STORIES && getClosestTab() != TAB_BOT_PREVIEWS ? View.VISIBLE : View.GONE); + } + if (pinItem != null) { + pinItem.setVisibility(View.GONE); + } + if (unpinItem != null) { + unpinItem.setVisibility(View.GONE); + } + if (forwardItem != null) { + forwardItem.setVisibility(getClosestTab() != TAB_STORIES && getClosestTab() != TAB_BOT_PREVIEWS ? View.VISIBLE : View.GONE); + } + AnimatorSet animatorSet = new AnimatorSet(); + ArrayList<Animator> animators = new ArrayList<>(); + for (int i = 0; i < actionModeViews.size(); i++) { + View view2 = actionModeViews.get(i); + AndroidUtilities.clearDrawableAnimation(view2); + animators.add(ObjectAnimator.ofFloat(view2, View.SCALE_Y, 1.0f, 0.1f)); + } + animatorSet.playTogether(animators); + animatorSet.setDuration(250); + animatorSet.start(); + scrolling = false; + AndroidUtilities.runOnUIThread(() -> { + if (isActionModeShowed) { + showActionMode(false); + } + }, 20); + } else { + selectedMessagesCountTextView.setNumber(selectedFiles[0].size() + selectedFiles[1].size(), true); + } + updateSelection(true); + return true; + } + return false; + } + @Override + protected boolean isActionModeShowed() { + return isActionModeShowed; + } + @Override + public int getStartedTrackingX() { + return startedTrackingX; + } + }; + } setWillNotDraw(false); @@ -2280,12 +2438,92 @@ public int getSpanSize(int position) { profileActivity.getMessagesController().getMainSettings().edit().putBoolean("story_keep", true).apply(); openStoryRecorder(); }); - mediaPages[a].listView = new InternalListView(context) { + mediaPages[a].listView = new SharedMediaListView(context) { + + @Override + public RecyclerListView.FastScrollAdapter getMovingAdapter() { + if (changeColumnsTab == TAB_STORIES) { + return storiesAdapter; + } else if (changeColumnsTab == TAB_ARCHIVED_STORIES) { + return archivedStoriesAdapter; + } else { + return photoVideoAdapter; + } + } + + @Override + public RecyclerListView.FastScrollAdapter getSupportingAdapter() { + if (changeColumnsTab == TAB_STORIES) { + return animationSupportingStoriesAdapter; + } else if (changeColumnsTab == TAB_ARCHIVED_STORIES) { + return animationSupportingArchivedStoriesAdapter; + } else { + return animationSupportingPhotoVideoAdapter; + } + } + + @Override + public int getColumnsCount() { + if (changeColumnsTab == TAB_STORIES || changeColumnsTab == TAB_ARCHIVED_STORIES) { + return mediaColumnsCount[1]; + } else { + return mediaColumnsCount[0]; + } + } - final HashSet<SharedPhotoVideoCell2> excludeDrawViews = new HashSet<>(); - final ArrayList<SharedPhotoVideoCell2> drawingViews = new ArrayList<>(); - final ArrayList<SharedPhotoVideoCell2> drawingViews2 = new ArrayList<>(); - final ArrayList<SharedPhotoVideoCell2> drawingViews3 = new ArrayList<>(); + @Override + public int getAnimateToColumnsCount() { + return animateToColumnsCount; + } + + @Override + public boolean isChangeColumnsAnimation() { + return photoVideoChangeColumnsAnimation; + } + + @Override + public float getChangeColumnsProgress() { + return photoVideoChangeColumnsProgress; + } + + @Override + public boolean isThisListView() { + return this == mediaPage.listView; + } + + @Override + public SparseArray<Float> getMessageAlphaEnter() { + return messageAlphaEnter; + } + + @Override + public boolean isStories() { + return changeColumnsTab == TAB_STORIES || changeColumnsTab == TAB_ARCHIVED_STORIES; + } + + @Override + public InternalListView getSupportingListView() { + return mediaPage.animationSupportingListView; + } + + @Override + public void checkHighlightCell(SharedPhotoVideoCell2 cell) { + if (cell.getMessageId() == mediaPage.highlightMessageId && cell.imageReceiver.hasBitmapImage()) { + if (!mediaPage.highlightAnimation) { + mediaPage.highlightProgress = 0; + mediaPage.highlightAnimation = true; + } + float p = 1f; + if (mediaPage.highlightProgress < 0.3f) { + p = mediaPage.highlightProgress / 0.3f; + } else if (mediaPage.highlightProgress > 0.7f) { + p = (1f - mediaPage.highlightProgress) / 0.3f; + } + cell.setHighlightProgress(p); + } else { + cell.setHighlightProgress(0); + } + } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { @@ -2296,12 +2534,6 @@ protected void onLayout(boolean changed, int l, int t, int r, int b) { } } - private TextPaint archivedHintPaint; - private StaticLayout archivedHintLayout; - private float archivedHintLayoutWidth, archivedHintLayoutLeft; - - UserListPoller poller; - float lastY, startY; @Override public boolean dispatchTouchEvent(MotionEvent event) { @@ -2321,6 +2553,17 @@ public boolean dispatchTouchEvent(MotionEvent event) { return super.dispatchTouchEvent(event); } + @Override + protected void emptyViewUpdated(boolean shown, boolean animated) { + if (getAdapter() == storiesAdapter) { + if (animated) { + mediaPage.buttonView.animate().alpha(shown ? 0f : 1f).start(); + } else { + mediaPage.buttonView.setAlpha(shown ? 0f : 1f); + } + } + } + @Override protected void dispatchDraw(Canvas canvas) { if ((getAdapter() == archivedStoriesAdapter || getAdapter() == storiesAdapter) && getChildCount() > 0) { @@ -2366,291 +2609,7 @@ protected void dispatchDraw(Canvas canvas) { mediaPage.buttonView.setTranslationY(-dp(72)); } } - SharedPhotoVideoAdapter movingAdapter, supportingMovingAdapter; - int ci = 0; - if (changeColumnsTab == TAB_STORIES) { - movingAdapter = storiesAdapter; - supportingMovingAdapter = animationSupportingStoriesAdapter; - ci = 1; - } else if (changeColumnsTab == TAB_ARCHIVED_STORIES) { - movingAdapter = archivedStoriesAdapter; - supportingMovingAdapter = animationSupportingArchivedStoriesAdapter; - ci = 1; - } else { - movingAdapter = photoVideoAdapter; - supportingMovingAdapter = animationSupportingPhotoVideoAdapter; - } - if (this == mediaPage.listView && getAdapter() == movingAdapter) { - int firstVisibleItemPosition = 0; - int firstVisibleItemPosition2 = 0; - int lastVisibleItemPosition = 0; - int lastVisibleItemPosition2 = 0; - - int rowsOffset = 0; - int columnsOffset = 0; - float minY = getMeasuredHeight(); - if (photoVideoChangeColumnsAnimation) { - int max = -1; - int min = -1; - for (int i = 0; i < mediaPage.listView.getChildCount(); i++) { - int p = mediaPage.listView.getChildAdapterPosition(mediaPage.listView.getChildAt(i)); - if (p >= 0 && (p > max || max == -1)) { - max = p; - } - if (p >= 0 && (p < min || min == -1)) { - min = p; - } - } - firstVisibleItemPosition = min; - lastVisibleItemPosition = max; - - max = -1; - min = -1; - for (int i = 0; i < mediaPage.animationSupportingListView.getChildCount(); i++) { - int p = mediaPage.animationSupportingListView.getChildAdapterPosition(mediaPage.animationSupportingListView.getChildAt(i)); - if (p >= 0 && (p > max || max == -1)) { - max = p; - } - if (p >= 0 && (p < min || min == -1)) { - min = p; - } - } - - firstVisibleItemPosition2 = min; - lastVisibleItemPosition2 = max; - - if (firstVisibleItemPosition >= 0 && firstVisibleItemPosition2 >= 0 && pinchCenterPosition >= 0) { - int rowsCount1 = (int) Math.ceil((movingAdapter.getItemCount()) / (float) mediaColumnsCount[ci]); - int rowsCount2 = (int) Math.ceil((movingAdapter.getItemCount()) / (float) animateToColumnsCount); - rowsOffset = ((pinchCenterPosition) / animateToColumnsCount - firstVisibleItemPosition2 / animateToColumnsCount) - ((pinchCenterPosition - movingAdapter.getTopOffset()) / mediaColumnsCount[ci] - firstVisibleItemPosition / mediaColumnsCount[ci]); - if ((firstVisibleItemPosition / mediaColumnsCount[ci] - rowsOffset < 0 && animateToColumnsCount < mediaColumnsCount[ci]) || (firstVisibleItemPosition2 / animateToColumnsCount + rowsOffset < 0 && animateToColumnsCount > mediaColumnsCount[ci])) { - rowsOffset = 0; - } - if ((lastVisibleItemPosition2 / mediaColumnsCount[ci] + rowsOffset >= rowsCount1 && animateToColumnsCount > mediaColumnsCount[ci]) || (lastVisibleItemPosition / animateToColumnsCount - rowsOffset >= rowsCount2 && animateToColumnsCount < mediaColumnsCount[ci])) { - rowsOffset = 0; - } - - float k = (pinchCenterPosition % mediaColumnsCount[ci]) / (float) (mediaColumnsCount[ci] - 1); - columnsOffset = (int) ((animateToColumnsCount - mediaColumnsCount[ci]) * k); - } - animationSupportingSortedCells.clear(); - excludeDrawViews.clear(); - drawingViews.clear(); - drawingViews2.clear(); - drawingViews3.clear(); - animationSupportingSortedCellsOffset = 0; - for (int i = 0; i < mediaPage.animationSupportingListView.getChildCount(); i++) { - View child = mediaPage.animationSupportingListView.getChildAt(i); - if (child.getTop() > getMeasuredHeight() || child.getBottom() < 0) { - continue; - } - if (child instanceof SharedPhotoVideoCell2) { - animationSupportingSortedCells.add((SharedPhotoVideoCell2) child); - } else if (child instanceof TextView) { - animationSupportingSortedCellsOffset++; - } - } - drawingViews.addAll(animationSupportingSortedCells); - FastScroll fastScroll = getFastScroll(); - if (fastScroll != null && fastScroll.getTag() != null) { - float p1 = movingAdapter.getScrollProgress(mediaPage.listView); - float p2 = supportingMovingAdapter.getScrollProgress(mediaPage.animationSupportingListView); - float a1 = movingAdapter.fastScrollIsVisible(mediaPage.listView) ? 1f : 0f; - float a2 = supportingMovingAdapter.fastScrollIsVisible(mediaPage.animationSupportingListView) ? 1f : 0f; - fastScroll.setProgress(p1 * (1f - photoVideoChangeColumnsProgress) + p2 * photoVideoChangeColumnsProgress); - fastScroll.setVisibilityAlpha(a1 * (1f - photoVideoChangeColumnsProgress) + a2 * photoVideoChangeColumnsProgress); - } - } - - for (int i = 0; i < getChildCount(); i++) { - View child = getChildAt(i); - if (child.getTop() > getMeasuredHeight() || child.getBottom() < 0) { - if (child instanceof SharedPhotoVideoCell2) { - SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) getChildAt(i); - cell.setCrossfadeView(null, 0, 0); - cell.setTranslationX(0); - cell.setTranslationY(0); - cell.setImageScale(1f, !photoVideoChangeColumnsAnimation); - } - continue; - } - if (child instanceof SharedPhotoVideoCell2) { - SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) getChildAt(i); - - if (cell.getMessageId() == mediaPage.highlightMessageId && cell.imageReceiver.hasBitmapImage()) { - if (!mediaPage.highlightAnimation) { - mediaPage.highlightProgress = 0; - mediaPage.highlightAnimation = true; - } - float p = 1f; - if (mediaPage.highlightProgress < 0.3f) { - p = mediaPage.highlightProgress / 0.3f; - } else if (mediaPage.highlightProgress > 0.7f) { - p = (1f - mediaPage.highlightProgress) / 0.3f; - } - cell.setHighlightProgress(p); - } else { - cell.setHighlightProgress(0); - } - - MessageObject messageObject = cell.getMessageObject(); - float alpha = 1f; - if (messageObject != null && messageAlphaEnter.get(messageObject.getId(), null) != null) { - alpha = messageAlphaEnter.get(messageObject.getId(), 1f); - } - cell.setImageAlpha(alpha, !photoVideoChangeColumnsAnimation); - - boolean inAnimation = false; - if (photoVideoChangeColumnsAnimation) { - float fromScale = 1f; - - int currentColumn = (((GridLayoutManager.LayoutParams) cell.getLayoutParams()).getViewAdapterPosition()) % mediaColumnsCount[ci] + columnsOffset; - int currentRow = ((((GridLayoutManager.LayoutParams) cell.getLayoutParams()).getViewAdapterPosition()) - firstVisibleItemPosition) / mediaColumnsCount[ci] + rowsOffset; - int toIndex = currentRow * animateToColumnsCount + currentColumn + animationSupportingSortedCellsOffset; - if (currentColumn >= 0 && currentColumn < animateToColumnsCount && toIndex >= 0 && toIndex < animationSupportingSortedCells.size()) { - inAnimation = true; - float toScale = (animationSupportingSortedCells.get(toIndex).getMeasuredWidth() - AndroidUtilities.dpf2(2)) / (float) (cell.getMeasuredWidth() - AndroidUtilities.dpf2(2)); - float scale = fromScale * (1f - photoVideoChangeColumnsProgress) + toScale * photoVideoChangeColumnsProgress; - float fromX = cell.getLeft(); - float fromY = cell.getTop(); - float toX = animationSupportingSortedCells.get(toIndex).getLeft(); - float toY = animationSupportingSortedCells.get(toIndex).getTop(); - - cell.setPivotX(0); - cell.setPivotY(0); - cell.setImageScale(scale, !photoVideoChangeColumnsAnimation); - cell.setTranslationX((toX - fromX) * photoVideoChangeColumnsProgress); - cell.setTranslationY((toY - fromY) * photoVideoChangeColumnsProgress); - cell.setCrossfadeView(animationSupportingSortedCells.get(toIndex), photoVideoChangeColumnsProgress, animateToColumnsCount); - excludeDrawViews.add(animationSupportingSortedCells.get(toIndex)); - drawingViews3.add(cell); - canvas.save(); - canvas.translate(cell.getX(), cell.getY()); - cell.draw(canvas); - canvas.restore(); - - if (cell.getY() < minY) { - minY = cell.getY(); - } - } - } - - if (!inAnimation) { - if (photoVideoChangeColumnsAnimation) { - drawingViews2.add(cell); - } - cell.setCrossfadeView(null, 0, 0); - cell.setTranslationX(0); - cell.setTranslationY(0); - cell.setImageScale(1f, !photoVideoChangeColumnsAnimation); - } - } - } - - if (photoVideoChangeColumnsAnimation && !drawingViews.isEmpty()) { - float toScale = animateToColumnsCount / (float) mediaColumnsCount[ci]; - float scale = toScale * (1f - photoVideoChangeColumnsProgress) + photoVideoChangeColumnsProgress; - - float sizeToScale = ((getMeasuredWidth() / (float) mediaColumnsCount[ci]) - AndroidUtilities.dpf2(2)) / ((getMeasuredWidth() / (float) animateToColumnsCount) - AndroidUtilities.dpf2(2)); - float scaleSize = sizeToScale * (1f - photoVideoChangeColumnsProgress) + photoVideoChangeColumnsProgress; - - float fromSize = getMeasuredWidth() / (float) mediaColumnsCount[ci]; - float toSize = (getMeasuredWidth() / (float) animateToColumnsCount); - float size1 = (float) ((Math.ceil((getMeasuredWidth() / (float) animateToColumnsCount)) - AndroidUtilities.dpf2(2)) * scaleSize + AndroidUtilities.dpf2(2)); - if (changeColumnsTab == TAB_STORIES || changeColumnsTab == TAB_ARCHIVED_STORIES) { - size1 *= 1.25f; - } - - for (int i = 0; i < drawingViews.size(); i++) { - SharedPhotoVideoCell2 view = drawingViews.get(i); - if (excludeDrawViews.contains(view)) { - continue; - } - view.setCrossfadeView(null, 0, 0); - int fromColumn = (((GridLayoutManager.LayoutParams) view.getLayoutParams()).getViewAdapterPosition()) % animateToColumnsCount; - int toColumn = fromColumn - columnsOffset; - int currentRow = ((((GridLayoutManager.LayoutParams) view.getLayoutParams()).getViewAdapterPosition()) - firstVisibleItemPosition2) / animateToColumnsCount; - currentRow -= rowsOffset; - - canvas.save(); - canvas.translate(toColumn * fromSize * (1f - photoVideoChangeColumnsProgress) + toSize * fromColumn * photoVideoChangeColumnsProgress, minY + size1 * currentRow); - view.setImageScale(scaleSize, !photoVideoChangeColumnsAnimation); - if (toColumn < mediaColumnsCount[ci]) { - canvas.saveLayerAlpha(0, 0, view.getMeasuredWidth() * scale, view.getMeasuredHeight() * scale, (int) (photoVideoChangeColumnsProgress * 255), Canvas.ALL_SAVE_FLAG); - view.draw(canvas); - canvas.restore(); - } else { - view.draw(canvas); - } - canvas.restore(); - } - } - - super.dispatchDraw(canvas); - - if (photoVideoChangeColumnsAnimation) { - float toScale = mediaColumnsCount[ci] / (float) animateToColumnsCount; - float scale = toScale * photoVideoChangeColumnsProgress + (1f - photoVideoChangeColumnsProgress); - - float sizeToScale = ((getMeasuredWidth() / (float) animateToColumnsCount) - AndroidUtilities.dpf2(2)) / ((getMeasuredWidth() / (float) mediaColumnsCount[ci]) - AndroidUtilities.dpf2(2)); - float scaleSize = sizeToScale * photoVideoChangeColumnsProgress + (1f - photoVideoChangeColumnsProgress); - - float size1 = (float) ((Math.ceil((getMeasuredWidth() / (float) mediaColumnsCount[ci])) - AndroidUtilities.dpf2(2)) * scaleSize + AndroidUtilities.dpf2(2)); - if (changeColumnsTab == TAB_STORIES || changeColumnsTab == TAB_ARCHIVED_STORIES) { - size1 *= 1.25f; - } - float fromSize = getMeasuredWidth() / (float) mediaColumnsCount[ci]; - float toSize = getMeasuredWidth() / (float) animateToColumnsCount; - - for (int i = 0; i < drawingViews2.size(); i++) { - SharedPhotoVideoCell2 view = drawingViews2.get(i); - int fromColumn = (((GridLayoutManager.LayoutParams) view.getLayoutParams()).getViewAdapterPosition()) % mediaColumnsCount[ci]; - int currentRow = ((((GridLayoutManager.LayoutParams) view.getLayoutParams()).getViewAdapterPosition()) - firstVisibleItemPosition) / mediaColumnsCount[ci]; - - currentRow += rowsOffset; - int toColumn = fromColumn + columnsOffset; - - canvas.save(); - view.setImageScale(scaleSize, !photoVideoChangeColumnsAnimation); - canvas.translate(fromColumn * fromSize * (1f - photoVideoChangeColumnsProgress) + toSize * toColumn * photoVideoChangeColumnsProgress, minY + size1 * currentRow); - if (toColumn < animateToColumnsCount) { - canvas.saveLayerAlpha(0, 0, view.getMeasuredWidth() * scale, view.getMeasuredHeight() * scale, (int) ((1f - photoVideoChangeColumnsProgress) * 255), Canvas.ALL_SAVE_FLAG); - view.draw(canvas); - canvas.restore(); - } else { - view.draw(canvas); - } - canvas.restore(); - } - - if (!drawingViews3.isEmpty()) { - canvas.saveLayerAlpha(0, 0, getMeasuredWidth(), getMeasuredHeight(), (int) (255 * photoVideoChangeColumnsProgress), Canvas.ALL_SAVE_FLAG); - for (int i = 0; i < drawingViews3.size(); i++) { - drawingViews3.get(i).drawCrossafadeImage(canvas); - } - canvas.restore(); - } - } - } else { - for (int i = 0; i < getChildCount(); i++) { - View child = getChildAt(i); - int messageId = getMessageId(child); - float alpha = 1; - if (messageId != 0 && messageAlphaEnter.get(messageId, null) != null) { - alpha = messageAlphaEnter.get(messageId, 1f); - } - if (child instanceof SharedDocumentCell) { - SharedDocumentCell cell = (SharedDocumentCell) child; - cell.setEnterAnimationAlpha(alpha); - } else if (child instanceof SharedAudioCell) { - SharedAudioCell cell = (SharedAudioCell) child; - cell.setEnterAnimationAlpha(alpha); - } - } - super.dispatchDraw(canvas); - } - - + super.dispatchDraw(canvas); if (mediaPage.highlightAnimation) { mediaPage.highlightProgress += 16f / 1500f; if (mediaPage.highlightProgress >= 1) { @@ -2664,30 +2623,11 @@ protected void dispatchDraw(Canvas canvas) { poller = UserListPoller.getInstance(profileActivity.getCurrentAccount()); } poller.checkList(this); - - if (!photoVideoChangeColumnsAnimation) { + if (!isChangeColumnsAnimation()) { changeColumnsTab = -1; } } - @Override - public boolean drawChild(Canvas canvas, View child, long drawingTime) { - SharedPhotoVideoAdapter movingAdapter; - if (changeColumnsTab == TAB_STORIES) { - movingAdapter = storiesAdapter; - } else if (changeColumnsTab == TAB_ARCHIVED_STORIES) { - movingAdapter = archivedStoriesAdapter; - } else { - movingAdapter = photoVideoAdapter; - } - if (mediaPage.listView == this && getAdapter() == movingAdapter) { - if (photoVideoChangeColumnsAnimation && child instanceof SharedPhotoVideoCell2) { - return true; - } - } - return super.drawChild(canvas, child, drawingTime); - } - @Override public Integer getSelectorColor(int position) { if (getAdapter() == channelRecommendationsAdapter && channelRecommendationsAdapter.more > 0 && position == channelRecommendationsAdapter.getItemCount() - 1) { @@ -2703,17 +2643,6 @@ public void onScrolled(int dx, int dy) { AndroidUtilities.hideKeyboard(profileActivity.getParentActivity().getCurrentFocus()); } } - - @Override - protected void emptyViewUpdated(boolean shown, boolean animated) { - if (getAdapter() == storiesAdapter) { - if (animated) { - mediaPage.buttonView.animate().alpha(shown ? 0f : 1f).start(); - } else { - mediaPage.buttonView.setAlpha(shown ? 0f : 1f); - } - } - } }; mediaPages[a].listView.setFastScrollEnabled(RecyclerListView.FastScroll.DATE_TYPE); mediaPages[a].listView.setScrollingTouchSlop(RecyclerView.TOUCH_SLOP_PAGING); @@ -3206,6 +3135,15 @@ protected boolean includeSavedDialogs() { return false; } + protected boolean isBot() { + if (dialog_id > 0) { + final int currentAccount = profileActivity.getCurrentAccount(); + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(dialog_id); + return user != null && user.bot; + } + return false; + } + protected boolean isSelf() { return false; } @@ -3235,7 +3173,7 @@ public void setForwardRestrictedHint(HintView hintView) { fwdRestrictedHint = hintView; } - private int getMessageId(View child) { + private static int getMessageId(View child) { if (child instanceof SharedPhotoVideoCell2) { return ((SharedPhotoVideoCell2) child).getMessageId(); } @@ -3994,7 +3932,7 @@ private void checkLoadMoreScroll(MediaPage mediaPage, RecyclerListView recyclerV if (lastVisiblePosition + 1 >= profileActivity.getMessagesController().getSavedMessagesController().getLoadedCount()) { profileActivity.getMessagesController().getSavedMessagesController().loadDialogs(false); } - } else if (mediaPage.selectedType != TAB_RECOMMENDED_CHANNELS && mediaPage.selectedType != TAB_SAVED_MESSAGES) { + } else if (mediaPage.selectedType != TAB_RECOMMENDED_CHANNELS && mediaPage.selectedType != TAB_SAVED_MESSAGES && mediaPage.selectedType != TAB_BOT_PREVIEWS) { final int threshold; if (mediaPage.selectedType == 0) { threshold = 3; @@ -4109,7 +4047,8 @@ public boolean isSearchItemVisible(int type) { type != TAB_GIF && type != TAB_COMMON_GROUPS && type != TAB_SAVED_DIALOGS && - type != TAB_RECOMMENDED_CHANNELS + type != TAB_RECOMMENDED_CHANNELS && + type != TAB_BOT_PREVIEWS ); } @@ -4121,6 +4060,10 @@ public boolean isCalendarItemVisible() { return mediaPages[0].selectedType == TAB_PHOTOVIDEO || mediaPages[0].selectedType == TAB_STORIES || mediaPages[0].selectedType == TAB_ARCHIVED_STORIES || mediaPages[0].selectedType == TAB_SAVED_DIALOGS; } + public boolean isOptionsItemVisible() { + return mediaPages[0].selectedType == TAB_PHOTOVIDEO || mediaPages[0].selectedType == TAB_STORIES || mediaPages[0].selectedType == TAB_ARCHIVED_STORIES || mediaPages[0].selectedType == TAB_SAVED_DIALOGS || mediaPages[0].selectedType == TAB_BOT_PREVIEWS; + } + public int getSelectedTab() { return scrollSlidingTextTabStrip.getCurrentTabId(); } @@ -4335,34 +4278,63 @@ public void setCommonGroupsCount(int count) { public void onActionBarItemClick(View v, int id) { if (id == delete) { - if (getSelectedTab() == TAB_STORIES || getSelectedTab() == TAB_ARCHIVED_STORIES) { + if (getSelectedTab() == TAB_STORIES || getSelectedTab() == TAB_ARCHIVED_STORIES || getSelectedTab() == TAB_BOT_PREVIEWS) { if (selectedFiles[0] != null) { - ArrayList<TL_stories.StoryItem> storyItems = new ArrayList<>(); - for (int i = 0; i < selectedFiles[0].size(); ++i) { - MessageObject messageObject = selectedFiles[0].valueAt(i); - if (messageObject.storyItem != null) { - storyItems.add(messageObject.storyItem); + if (isBot() && botPreviewsContainer != null && botPreviewsContainer.getCurrentList() != null) { + final StoriesController.BotPreviewsList list = botPreviewsContainer.getCurrentList(); + ArrayList<TLRPC.MessageMedia> medias = new ArrayList<>(); + for (int i = 0; i < selectedFiles[0].size(); ++i) { + MessageObject messageObject = selectedFiles[0].valueAt(i); + if (messageObject.storyItem != null) { + medias.add(messageObject.storyItem.media); + } } - } - - if (!storyItems.isEmpty()) { - AlertDialog.Builder builder = new AlertDialog.Builder(getContext(), resourcesProvider); - builder.setTitle(storyItems.size() > 1 ? LocaleController.getString(R.string.DeleteStoriesTitle) : LocaleController.getString(R.string.DeleteStoryTitle)); - builder.setMessage(LocaleController.formatPluralString("DeleteStoriesSubtitle", storyItems.size())); - builder.setPositiveButton(LocaleController.getString("Delete", R.string.Delete), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - profileActivity.getMessagesController().getStoriesController().deleteStories(dialog_id, storyItems); - BulletinFactory.of(profileActivity).createSimpleBulletin(R.raw.ic_delete, LocaleController.formatPluralString("StoriesDeleted", storyItems.size())).show(); - closeActionMode(false); + if (!medias.isEmpty()) { + AlertDialog.Builder builder = new AlertDialog.Builder(getContext(), resourcesProvider); + builder.setTitle(medias.size() > 1 ? LocaleController.getString(R.string.DeleteBotPreviewsTitle) : LocaleController.getString(R.string.DeleteBotPreviewTitle)); + builder.setMessage(LocaleController.formatPluralString("DeleteBotPreviewsSubtitle", medias.size())); + builder.setPositiveButton(LocaleController.getString("Delete", R.string.Delete), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + list.delete(medias); + BulletinFactory.of(profileActivity).createSimpleBulletin(R.raw.ic_delete, LocaleController.formatPluralString("BotPreviewsDeleted", medias.size())).show(); + closeActionMode(false); + } + }); + builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), (DialogInterface.OnClickListener) (dialog, which) -> { + dialog.dismiss(); + }); + AlertDialog dialog = builder.create(); + dialog.show(); + dialog.redPositive(); + } + } else { + ArrayList<TL_stories.StoryItem> storyItems = new ArrayList<>(); + for (int i = 0; i < selectedFiles[0].size(); ++i) { + MessageObject messageObject = selectedFiles[0].valueAt(i); + if (messageObject.storyItem != null) { + storyItems.add(messageObject.storyItem); } - }); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), (DialogInterface.OnClickListener) (dialog, which) -> { - dialog.dismiss(); - }); - AlertDialog dialog = builder.create(); - dialog.show(); - dialog.redPositive(); + } + if (!storyItems.isEmpty()) { + AlertDialog.Builder builder = new AlertDialog.Builder(getContext(), resourcesProvider); + builder.setTitle(storyItems.size() > 1 ? LocaleController.getString(R.string.DeleteStoriesTitle) : LocaleController.getString(R.string.DeleteStoryTitle)); + builder.setMessage(LocaleController.formatPluralString("DeleteStoriesSubtitle", storyItems.size())); + builder.setPositiveButton(LocaleController.getString("Delete", R.string.Delete), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + profileActivity.getMessagesController().getStoriesController().deleteStories(dialog_id, storyItems); + BulletinFactory.of(profileActivity).createSimpleBulletin(R.raw.ic_delete, LocaleController.formatPluralString("StoriesDeleted", storyItems.size())).show(); + closeActionMode(false); + } + }); + builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), (DialogInterface.OnClickListener) (dialog, which) -> { + dialog.dismiss(); + }); + AlertDialog dialog = builder.create(); + dialog.show(); + dialog.redPositive(); + } } } return; @@ -4680,6 +4652,12 @@ private boolean prepareForMoving(MotionEvent ev, boolean forward) { if (canEditStories() && isActionModeShowed && getClosestTab() == TAB_STORIES) { return false; } + if (mediaPages[0] != null && mediaPages[0].selectedType == TAB_BOT_PREVIEWS && botPreviewsContainer != null && !botPreviewsContainer.canScroll(forward)) { + return false; + } + if (isActionModeShowed && mediaPages[0] != null && mediaPages[0].selectedType == TAB_BOT_PREVIEWS) { + return false; + } updateOptionsSearch(); getParent().requestDisallowInterceptTouchEvent(true); @@ -4786,6 +4764,9 @@ public boolean isCurrentTabFirst() { } public RecyclerListView getCurrentListView() { + if (mediaPages[0].selectedType == TAB_BOT_PREVIEWS) { + return botPreviewsContainer.getCurrentListView(); + } if (mediaPages[0].selectedType == TAB_SAVED_MESSAGES && savedMessagesContainer != null) { return savedMessagesContainer.chatActivity.getChatListView(); } @@ -5014,6 +4995,10 @@ public boolean closeActionMode(boolean uncheckAnimated) { } cantDeleteMessagesCount = 0; onActionModeSelectedUpdate(selectedFiles[0]); + if (botPreviewsContainer != null) { + botPreviewsContainer.unselectAll(); + botPreviewsContainer.updateSelection(true); + } showActionMode(false); updateRowsSelection(uncheckAnimated); if (savedDialogsAdapter != null) { @@ -5026,12 +5011,14 @@ public boolean closeActionMode(boolean uncheckAnimated) { } public void setVisibleHeight(int height) { - height = Math.max(height, dp(120)); for (int a = 0; a < mediaPages.length; a++) { - float t = -(getMeasuredHeight() - height) / 2f; + float t = -(getMeasuredHeight() - Math.max(height, dp(mediaPages[a].selectedType == TAB_STORIES ? 280 : 120))) / 2f; mediaPages[a].emptyView.setTranslationY(t); mediaPages[a].progressView.setTranslationY(-t); } + if (botPreviewsContainer != null) { + botPreviewsContainer.setVisibleHeight(height); + } } protected void onActionModeSelectedUpdate(SparseArray<MessageObject> messageObjects) { @@ -5086,7 +5073,14 @@ public void onAnimationEnd(Animator animation) { } private void updateStoriesPinButton() { - if (getClosestTab() == TAB_ARCHIVED_STORIES) { + if (isBot()) { + if (pinItem != null) { + pinItem.setVisibility(View.GONE); + } + if (unpinItem != null) { + unpinItem.setVisibility(View.GONE); + } + } else if (getClosestTab() == TAB_ARCHIVED_STORIES) { if (pinItem != null) { pinItem.setVisibility(View.GONE); } @@ -5464,10 +5458,14 @@ public void didReceivedNotification(int id, int account, Object... args) { } else if (id == NotificationCenter.storiesUpdated) { for (int i = 0; i < mediaPages.length; ++i) { if (mediaPages[i] != null && mediaPages[i].listView != null && (mediaPages[i].selectedType == TAB_STORIES || mediaPages[i].selectedType == TAB_ARCHIVED_STORIES)) { - for (int j = 0; j < mediaPages[i].listView.getChildCount(); ++j) { - View child = mediaPages[i].listView.getChildAt(j); - if (child instanceof SharedPhotoVideoCell2) { - ((SharedPhotoVideoCell2) child).updateViews(); + if (isBot() && mediaPages[i].listView.getAdapter() != null) { + mediaPages[i].listView.getAdapter().notifyDataSetChanged(); + } else { + for (int j = 0; j < mediaPages[i].listView.getChildCount(); ++j) { + View child = mediaPages[i].listView.getChildAt(j); + if (child instanceof SharedPhotoVideoCell2) { + ((SharedPhotoVideoCell2) child).updateViews(); + } } } } @@ -5794,8 +5792,15 @@ private void updateTabs(boolean animated) { boolean hasRecommendations = false; boolean hasSavedDialogs = false; boolean hasSavedMessages = savedMessagesContainer != null && sharedMediaPreloader != null && sharedMediaPreloader.hasSavedMessages; + final TLRPC.User user = dialog_id <= 0 || profileActivity == null ? null : profileActivity.getMessagesController().getUser(dialog_id); + boolean hasEditBotPreviews = user != null && user.bot && user.bot_has_main_app && user.bot_can_edit; + boolean hasBotPreviews = user != null && user.bot && !user.bot_can_edit && (userInfo != null && userInfo.bot_info != null && userInfo.bot_info.has_preview_medias) && !hasEditBotPreviews; + boolean hasStories = (DialogObject.isUserDialog(dialog_id) || DialogObject.isChatDialog(dialog_id)) && !DialogObject.isEncryptedDialog(dialog_id) && (userInfo != null && userInfo.stories_pinned_available || info != null && info.stories_pinned_available || isStoriesView()) && includeStories(); int changed = 0; - if (((DialogObject.isUserDialog(dialog_id) || DialogObject.isChatDialog(dialog_id)) && !DialogObject.isEncryptedDialog(dialog_id) && (userInfo != null && userInfo.stories_pinned_available || info != null && info.stories_pinned_available || isStoriesView()) && includeStories()) != scrollSlidingTextTabStrip.hasTab(TAB_STORIES)) { + if ((hasStories || hasBotPreviews) != scrollSlidingTextTabStrip.hasTab(TAB_STORIES)) { + changed++; + } + if (hasEditBotPreviews != scrollSlidingTextTabStrip.hasTab(TAB_BOT_PREVIEWS)) { changed++; } if (isSearchingStories() != scrollSlidingTextTabStrip.hasTab(TAB_STORIES)) { @@ -5848,7 +5853,7 @@ private void updateTabs(boolean animated) { if (animated && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { final TransitionSet transitionSet = new TransitionSet(); transitionSet.setOrdering(TransitionSet.ORDERING_TOGETHER); - transitionSet.addTransition(new ChangeBounds()); +// transitionSet.addTransition(new ChangeBounds()); transitionSet.addTransition(new Visibility() { @Override public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues, TransitionValues endValues) { @@ -5889,7 +5894,16 @@ public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues sta } scrollSlidingTextTabStrip.animationDuration = 420; } - if ((DialogObject.isUserDialog(dialog_id) || DialogObject.isChatDialog(dialog_id)) && !DialogObject.isEncryptedDialog(dialog_id) && (userInfo != null && userInfo.stories_pinned_available || info != null && info.stories_pinned_available || isStoriesView()) && includeStories()) { + if (hasEditBotPreviews) { + if (!scrollSlidingTextTabStrip.hasTab(TAB_BOT_PREVIEWS)) { + scrollSlidingTextTabStrip.addTextTab(TAB_BOT_PREVIEWS, getString(R.string.ProfileBotPreviewTab), idToView); + } + } + if (hasBotPreviews) { + if (!scrollSlidingTextTabStrip.hasTab(TAB_STORIES)) { + scrollSlidingTextTabStrip.addTextTab(TAB_STORIES, getString(R.string.ProfileBotPreviewTab), idToView); + } + } else if ((DialogObject.isUserDialog(dialog_id) || DialogObject.isChatDialog(dialog_id)) && !DialogObject.isEncryptedDialog(dialog_id) && (userInfo != null && userInfo.stories_pinned_available || info != null && info.stories_pinned_available || isStoriesView()) && includeStories()) { if (isArchivedOnlyStoriesView()) { if (!scrollSlidingTextTabStrip.hasTab(TAB_ARCHIVED_STORIES)) { scrollSlidingTextTabStrip.addTextTab(TAB_ARCHIVED_STORIES, getString(R.string.ProfileArchivedStories), idToView); @@ -6217,11 +6231,18 @@ private void switchToCurrentSelectedMode(boolean animated) { mediaPages[a].listView.setAdapter(null); } if (savedMessagesContainer.getParent() != mediaPages[a]) { - if (savedMessagesContainer.getParent() instanceof ViewGroup) { - ((ViewGroup) savedMessagesContainer.getParent()).removeView(savedMessagesContainer); - } + AndroidUtilities.removeFromParent(savedMessagesContainer); mediaPages[a].addView(savedMessagesContainer); } + } else if (mediaPages[a].selectedType == TAB_BOT_PREVIEWS) { + if (currentAdapter != null) { + recycleAdapter(currentAdapter); + mediaPages[a].listView.setAdapter(null); + } + if (botPreviewsContainer != null && botPreviewsContainer.getParent() != mediaPages[a]) { + AndroidUtilities.removeFromParent(botPreviewsContainer); + mediaPages[a].addView(botPreviewsContainer); + } } if (mediaPages[a].selectedType == TAB_SAVED_DIALOGS) { mediaPages[a].listView.setItemAnimator(mediaPages[a].itemAnimator); @@ -6235,7 +6256,10 @@ private void switchToCurrentSelectedMode(boolean animated) { savedMessagesContainer.chatActivity.onRemoveFromParent(); mediaPages[a].removeView(savedMessagesContainer); } - if (mediaPages[a].selectedType == TAB_PHOTOVIDEO || mediaPages[a].selectedType == TAB_SAVED_DIALOGS || mediaPages[a].selectedType == TAB_STORIES || mediaPages[a].selectedType == TAB_ARCHIVED_STORIES || mediaPages[a].selectedType == TAB_VOICE || mediaPages[a].selectedType == TAB_GIF || mediaPages[a].selectedType == TAB_COMMON_GROUPS || mediaPages[a].selectedType == TAB_GROUPUSERS && !delegate.canSearchMembers() || mediaPages[a].selectedType == TAB_RECOMMENDED_CHANNELS) { + if (botPreviewsContainer != null && mediaPages[a].selectedType != TAB_BOT_PREVIEWS && botPreviewsContainer.getParent() == mediaPages[a]) { + mediaPages[a].removeView(botPreviewsContainer); + } + if (mediaPages[a].selectedType == TAB_PHOTOVIDEO || mediaPages[a].selectedType == TAB_SAVED_DIALOGS || mediaPages[a].selectedType == TAB_STORIES || mediaPages[a].selectedType == TAB_ARCHIVED_STORIES || mediaPages[a].selectedType == TAB_VOICE || mediaPages[a].selectedType == TAB_GIF || mediaPages[a].selectedType == TAB_COMMON_GROUPS || mediaPages[a].selectedType == TAB_GROUPUSERS && !delegate.canSearchMembers() || mediaPages[a].selectedType == TAB_RECOMMENDED_CHANNELS || mediaPages[a].selectedType == TAB_BOT_PREVIEWS) { if (animated) { searchItemState = 2; } else { @@ -6291,6 +6315,8 @@ private void switchToCurrentSelectedMode(boolean animated) { } else if (mediaPages[a].selectedType == TAB_SAVED_MESSAGES) { + } else if (mediaPages[a].selectedType == TAB_BOT_PREVIEWS) { + } else { if (!sharedMediaData[mediaPages[a].selectedType].loading && !sharedMediaData[mediaPages[a].selectedType].endReached[0] && sharedMediaData[mediaPages[a].selectedType].messages.isEmpty()) { sharedMediaData[mediaPages[a].selectedType].loading = true; @@ -6307,11 +6333,10 @@ private void switchToCurrentSelectedMode(boolean animated) { } } if (mediaPages[a].selectedType == TAB_STORIES) { + mediaPages[a].emptyView.stickerView.setVisibility(!isSelf() && !isBot() ? View.VISIBLE : View.GONE); if (isSelf()) { - mediaPages[a].emptyView.stickerView.setVisibility(View.GONE); mediaPages[a].emptyView.button.setVisibility(View.GONE); } else { - mediaPages[a].emptyView.stickerView.setVisibility(View.VISIBLE); mediaPages[a].emptyView.setStickerType(StickerEmptyView.STICKER_TYPE_ALBUM); mediaPages[a].emptyView.button.setVisibility(!isSearchingStories() ? View.VISIBLE : View.GONE); mediaPages[a].emptyView.button.setText(addPostText(), false); @@ -6377,10 +6402,10 @@ private boolean onItemLongClick(MessageObject item, View view, int a) { } deleteItem.setVisibility(cantDeleteMessagesCount == 0 ? View.VISIBLE : View.GONE); if (gotoItem != null) { - gotoItem.setVisibility(getClosestTab() != TAB_STORIES ? View.VISIBLE : View.GONE); + gotoItem.setVisibility(getClosestTab() != TAB_STORIES && getClosestTab() != TAB_BOT_PREVIEWS ? View.VISIBLE : View.GONE); } if (forwardItem != null) { - forwardItem.setVisibility(getClosestTab() != TAB_STORIES ? View.VISIBLE : View.GONE); + forwardItem.setVisibility(getClosestTab() != TAB_STORIES && getClosestTab() != TAB_BOT_PREVIEWS ? View.VISIBLE : View.GONE); } selectedMessagesCountTextView.setNumber(1, false); AnimatorSet animatorSet = new AnimatorSet(); @@ -6445,10 +6470,10 @@ private void onItemClick(int index, View view, MessageObject message, int a, int selectedMessagesCountTextView.setNumber(selectedFiles[0].size() + selectedFiles[1].size(), true); deleteItem.setVisibility(cantDeleteMessagesCount == 0 ? View.VISIBLE : View.GONE); if (gotoItem != null) { - gotoItem.setVisibility(getClosestTab() != TAB_STORIES && selectedFiles[0].size() == 1 ? View.VISIBLE : View.GONE); + gotoItem.setVisibility(getClosestTab() != TAB_STORIES && getClosestTab() != TAB_BOT_PREVIEWS && selectedFiles[0].size() == 1 ? View.VISIBLE : View.GONE); } if (forwardItem != null) { - forwardItem.setVisibility(getClosestTab() != TAB_STORIES ? View.VISIBLE : View.GONE); + forwardItem.setVisibility(getClosestTab() != TAB_STORIES && getClosestTab() != TAB_BOT_PREVIEWS ? View.VISIBLE : View.GONE); } updateStoriesPinButton(); } @@ -6521,8 +6546,10 @@ private void onItemClick(int index, View view, MessageObject message, int a, int String link = null; if (webPage != null && !(webPage instanceof TLRPC.TL_webPageEmpty)) { if (webPage.cached_page != null) { - ArticleViewer.getInstance().setParentActivity(profileActivity.getParentActivity(), profileActivity); - ArticleViewer.getInstance().open(message); + if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(message) != null) { + return; + } + profileActivity.createArticleViewer(false).open(message); return; } else if (webPage.embed_url != null && webPage.embed_url.length() != 0) { openWebView(webPage, message); @@ -7181,28 +7208,10 @@ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType if (sharedResources == null) { sharedResources = new SharedPhotoVideoCell2.SharedResources(parent.getContext(), resourcesProvider); } - SharedPhotoVideoCell2 cell = new SharedPhotoVideoCell2(mContext, sharedResources, profileActivity.getCurrentAccount()) { -// private Runnable startDragRunnable = () -> { -// if (mediaPages[0] == null || mediaPages[0].listView == null) { -// return; -// } -// if (isActionModeShowed && viewType == VIEW_TYPE_STORY && SharedPhotoVideoAdapter.this == storiesAdapter && isStoriesView()) { -// storiesReorder.startDrag(mediaPages[0].listView.getChildViewHolder(this)); -// } -// }; -// @Override -// public boolean onTouchEvent(MotionEvent event) { -// if (isActionModeShowed && viewType == VIEW_TYPE_STORY && SharedPhotoVideoAdapter.this == storiesAdapter && isStoriesView()) { -// if (event.getAction() == MotionEvent.ACTION_DOWN) { -// AndroidUtilities.cancelRunOnUIThread(this.startDragRunnable); -// AndroidUtilities.runOnUIThread(this.startDragRunnable, (long) (ViewConfiguration.getLongPressTimeout() * .75f)); -// } else if (event.getAction() == MotionEvent.ACTION_CANCEL || event.getAction() == MotionEvent.ACTION_UP) { -// AndroidUtilities.cancelRunOnUIThread(this.startDragRunnable); -// } -// } -// return super.onTouchEvent(event); -// } - }; + SharedPhotoVideoCell2 cell = new SharedPhotoVideoCell2(mContext, sharedResources, profileActivity.getCurrentAccount()); + if (viewType == VIEW_TYPE_STORY) { + cell.setCheck2(); + } cell.setGradientView(globalGradientView); if (this == storiesAdapter || this == archivedStoriesAdapter) { cell.isStory = true; @@ -8671,11 +8680,42 @@ public int getStoriesCount(int tab) { return 0; } + public String getBotPreviewsSubtitle(boolean edit) { + if (!isBot()) { + return getString(R.string.BotPreviewEmpty); + } + if (edit && botPreviewsContainer != null) { + return botPreviewsContainer.getBotPreviewsSubtitle(); + } + int images = 0, videos = 0; + if (storiesAdapter != null && storiesAdapter.storiesList != null) { + for (int i = 0; i < storiesAdapter.storiesList.messageObjects.size(); ++i) { + MessageObject msg = storiesAdapter.storiesList.messageObjects.get(i); + if (msg.storyItem != null && msg.storyItem.media != null) { + if (MessageObject.isVideoDocument(msg.storyItem.media.document)) { + videos++; + } else if (msg.storyItem.media.photo != null) { + images++; + } + } + } + } + if (images == 0 && videos == 0) return getString(R.string.BotPreviewEmpty); + StringBuilder sb = new StringBuilder(); + if (images > 0) sb.append(formatPluralString("Images", images)); + if (videos > 0) { + if (sb.length() > 0) sb.append(", "); + sb.append(formatPluralString("Videos", videos)); + } + return sb.toString(); + } + private StoriesController.StoriesList searchStoriesList; public class StoriesAdapter extends SharedPhotoVideoAdapter { private final boolean isArchive; + private final ArrayList<StoriesController.UploadingStory> uploadingStories = new ArrayList<>(); @Nullable public final StoriesController.StoriesList storiesList; private StoriesAdapter supportingAdapter; @@ -8686,20 +8726,26 @@ public class StoriesAdapter extends SharedPhotoVideoAdapter { public StoriesAdapter(Context context, boolean isArchive) { super(context); this.isArchive = isArchive; + final int currentAccount = profileActivity.getCurrentAccount(); if (!TextUtils.isEmpty(getStoriesHashtag())) { if (searchStoriesList == null) { - searchStoriesList = new StoriesController.SearchStoriesList(profileActivity.getCurrentAccount(), getStoriesHashtag()); + searchStoriesList = new StoriesController.SearchStoriesList(currentAccount, getStoriesHashtag()); } storiesList = searchStoriesList; } else if (getStoriesArea() != null) { if (searchStoriesList == null) { - searchStoriesList = new StoriesController.SearchStoriesList(profileActivity.getCurrentAccount(), getStoriesArea()); + searchStoriesList = new StoriesController.SearchStoriesList(currentAccount, getStoriesArea()); } storiesList = searchStoriesList; } else if (isArchive && !isStoriesView() || !isArchive && isArchivedOnlyStoriesView()) { storiesList = null; } else { - storiesList = profileActivity.getMessagesController().getStoriesController().getStoriesList(dialog_id, isArchive ? StoriesController.StoriesList.TYPE_ARCHIVE : StoriesController.StoriesList.TYPE_PINNED); + boolean isBot = false; + if (dialog_id > 0) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(dialog_id); + isBot = user != null && user.bot; + } + storiesList = profileActivity.getMessagesController().getStoriesController().getStoriesList(dialog_id, isBot ? StoriesController.StoriesList.TYPE_BOTS : isArchive ? StoriesController.StoriesList.TYPE_ARCHIVE : StoriesController.StoriesList.TYPE_PINNED); } if (storiesList != null) { id = storiesList.link(); @@ -8777,8 +8823,36 @@ private void checkColumns() { } } + public boolean isSelectedAll() { + if (storiesList == null) return false; + for (int i = 0; i < storiesList.messageObjects.size(); ++i) { + final MessageObject msg = storiesList.messageObjects.get(i); + boolean found = false; + final SparseArray<MessageObject> arr = selectedFiles[msg.getDialogId() == dialog_id ? 0 : 1]; + for (int j = 0; j < arr.size(); ++j) { + int key = arr.keyAt(j); + MessageObject m = arr.get(key); + if (msg == m) { + found = true; + break; + } + } + if (!found) { + return false; + } + } + return true; + } + @Override public void notifyDataSetChanged() { + if (storiesList != null && isBot()) { + uploadingStories.clear(); + ArrayList<StoriesController.UploadingStory> list = MessagesController.getInstance(storiesList.currentAccount).getStoriesController().getUploadingStories(dialog_id); + if (list != null) { + uploadingStories.addAll(list); + } + } super.notifyDataSetChanged(); if (supportingAdapter != null) { supportingAdapter.notifyDataSetChanged(); @@ -8806,7 +8880,7 @@ public int getItemCount() { if (storiesList == null) { return 0; } - return storiesList.isOnlyCache() && hasInternet() ? 0 : storiesList.getCount(); + return uploadingStories.size() + (storiesList.isOnlyCache() && hasInternet() ? 0 : storiesList.getCount()); } @Override @@ -8846,7 +8920,28 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (!(holder.itemView instanceof SharedPhotoVideoCell2)) return; SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) holder.itemView; cell.isStory = true; - position -= getTopOffset(); + if (position >= 0 && position < uploadingStories.size()) { + StoriesController.UploadingStory uploadingStory = uploadingStories.get(position); + cell.isStoryPinned = false; + if (uploadingStory.sharedMessageObject == null) { + final TL_stories.TL_storyItem storyItem = new TL_stories.TL_storyItem(); + storyItem.id = storyItem.messageId = Long.hashCode(uploadingStory.random_id); + storyItem.attachPath = uploadingStory.firstFramePath; + uploadingStory.sharedMessageObject = new MessageObject(storiesList.currentAccount, storyItem) { + @Override + public float getProgress() { + return uploadingStory.progress; + } + }; + uploadingStory.sharedMessageObject.uploadingStory = uploadingStory; + } + cell.setMessageObject(uploadingStory.sharedMessageObject, columnsCount()); + cell.isStory = true; + cell.setReorder(false); + cell.setChecked(false, false); + return; + } + position -= uploadingStories.size(); if (position < 0 || position >= storiesList.messageObjects.size()) { cell.isStoryPinned = false; cell.setMessageObject(null, columnsCount()); @@ -8855,10 +8950,11 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { } MessageObject messageObject = storiesList.messageObjects.get(position); cell.isStoryPinned = messageObject != null && storiesList.isPinned(messageObject.getId()); + cell.setReorder(isBot() || cell.isStoryPinned); cell.isSearchingHashtag = isSearchingStories(); cell.setMessageObject(messageObject, columnsCount()); if (isActionModeShowed && messageObject != null) { - cell.setChecked(selectedFiles[messageObject.getDialogId() == dialog_id ? 0 : 1].indexOfKey(messageObject.getId()) >= 0, false); + cell.setChecked(selectedFiles[messageObject.getDialogId() == dialog_id ? 0 : 1].indexOfKey(messageObject.getId()) >= 0, true); } else { cell.setChecked(false, false); } @@ -8904,6 +9000,10 @@ public void onFastScrollSingleTap() { public boolean canReorder(int position) { if (isArchive) return false; if (storiesList == null) return false; + if (storiesList instanceof StoriesController.BotPreviewsList) { + TLRPC.User user = MessagesController.getInstance(profileActivity.getCurrentAccount()).getUser(dialog_id); + return user != null && user.bot && user.bot_has_main_app && user.bot_can_edit; + } if (position < 0 || position >= storiesList.messageObjects.size()) return false; MessageObject messageObject = storiesList.messageObjects.get(position); return storiesList.isPinned(messageObject.getId()); @@ -8918,7 +9018,15 @@ public boolean swapElements(int fromPosition, int toPosition) { if (fromPosition < 0 || fromPosition >= storiesList.messageObjects.size()) return false; if (toPosition < 0 || toPosition >= storiesList.messageObjects.size()) return false; - ArrayList<Integer> pinnedIds = new ArrayList<>(storiesList.pinnedIds); + ArrayList<Integer> pinnedIds; + if (storiesList instanceof StoriesController.BotPreviewsList) { + pinnedIds = new ArrayList<>(); + for (int i = 0; i < storiesList.messageObjects.size(); ++i) { + pinnedIds.add(storiesList.messageObjects.get(i).getId()); + } + } else { + pinnedIds = new ArrayList<>(storiesList.pinnedIds); + } if (!applyingReorder) { lastPinnedIds.clear(); @@ -8944,10 +9052,20 @@ public void reorderDone() { if (storiesList == null) return; if (!applyingReorder) return; - boolean changed = lastPinnedIds.size() != storiesList.pinnedIds.size(); + ArrayList<Integer> ids; + if (storiesList instanceof StoriesController.BotPreviewsList) { + ids = new ArrayList<>(); + for (int i = 0; i < storiesList.messageObjects.size(); ++i) { + ids.add(storiesList.messageObjects.get(i).getId()); + } + } else { + ids = storiesList.pinnedIds; + } + + boolean changed = lastPinnedIds.size() != ids.size(); if (!changed) { for (int i = 0; i < lastPinnedIds.size(); ++i) { - if (lastPinnedIds.get(i) != storiesList.pinnedIds.get(i)) { + if (lastPinnedIds.get(i) != ids.get(i)) { changed = true; break; } @@ -8955,7 +9073,7 @@ public void reorderDone() { } if (changed) { - storiesList.updatePinnedOrder(storiesList.pinnedIds, true); + storiesList.updatePinnedOrder(ids, true); } applyingReorder = false; @@ -9663,9 +9781,14 @@ public void animateSearchToOptions(boolean toOptions, boolean animated) { private SpannableStringBuilder addPostButton; private CharSequence addPostText() { if (addPostButton == null) { - addPostButton = new SpannableStringBuilder("c"); - addPostButton.setSpan(new ColoredImageSpan(R.drawable.filled_premium_camera), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - addPostButton.append(" ").append(getString(R.string.StoriesAddPost)); + addPostButton = new SpannableStringBuilder(); + if (isBot()) { + addPostButton.append(getString(R.string.ProfileBotPreviewEmptyButton)); + } else { + addPostButton.append("c"); + addPostButton.setSpan(new ColoredImageSpan(R.drawable.filled_premium_camera), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + addPostButton.append(" ").append(getString(R.string.StoriesAddPost)); + } } return addPostButton; } @@ -9704,6 +9827,11 @@ public void showPremiumFloodWaitBulletin(final boolean isUpload) { } public boolean canEditStories() { + if (isBot()) { + final int currentAccount = profileActivity.getCurrentAccount(); + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(dialog_id); + return user != null && user.bot && user.bot_can_edit; + } return isStoriesView() || profileActivity != null && profileActivity.getMessagesController().getStoriesController().canEditStories(dialog_id); } @@ -9722,4 +9850,344 @@ public TL_stories.MediaArea getStoriesArea() { public boolean isSearchingStories() { return !TextUtils.isEmpty(getStoriesHashtag()) || getStoriesArea() != null; } + + public static class SharedMediaListView extends InternalListView { + + public SharedMediaListView(Context context) { + super(context); + } + + final HashSet<SharedPhotoVideoCell2> excludeDrawViews = new HashSet<>(); + final ArrayList<SharedPhotoVideoCell2> drawingViews = new ArrayList<>(); + final ArrayList<SharedPhotoVideoCell2> drawingViews2 = new ArrayList<>(); + final ArrayList<SharedPhotoVideoCell2> drawingViews3 = new ArrayList<>(); + + protected TextPaint archivedHintPaint; + protected StaticLayout archivedHintLayout; + protected float archivedHintLayoutWidth, archivedHintLayoutLeft; + + UserListPoller poller; + + public RecyclerListView.FastScrollAdapter getMovingAdapter() { + return null; + } + + public RecyclerListView.FastScrollAdapter getSupportingAdapter() { + return null; + } + + public int getColumnsCount() { + return 3; + } + + public int getAnimateToColumnsCount() { + return 3; + } + + public boolean isChangeColumnsAnimation() { + return false; + } + + public float getChangeColumnsProgress() { + return 0; + } + + public boolean isThisListView() { + return true; + } + + public SparseArray<Float> getMessageAlphaEnter() { + return null; + } + + public InternalListView getSupportingListView() { + return null; + } + + public int getPinchCenterPosition() { + return 0; + } + + public boolean isStories() { + return false; + } + + public void checkHighlightCell(SharedPhotoVideoCell2 cell) { + + } + + private int animationSupportingSortedCellsOffset; + private final ArrayList<SharedPhotoVideoCell2> animationSupportingSortedCells = new ArrayList<>(); + + @Override + protected void dispatchDraw(Canvas canvas) { + final RecyclerListView.FastScrollAdapter movingAdapter = getMovingAdapter(); + final RecyclerListView.FastScrollAdapter supportingMovingAdapter = getSupportingAdapter(); + if (isThisListView() && getAdapter() == movingAdapter) { + int firstVisibleItemPosition = 0; + int firstVisibleItemPosition2 = 0; + int lastVisibleItemPosition = 0; + int lastVisibleItemPosition2 = 0; + + int rowsOffset = 0; + int columnsOffset = 0; + float minY = getMeasuredHeight(); + if (isChangeColumnsAnimation()) { + int max = -1; + int min = -1; + for (int i = 0; i < getChildCount(); i++) { + int p = getChildAdapterPosition(getChildAt(i)); + if (p >= 0 && (p > max || max == -1)) { + max = p; + } + if (p >= 0 && (p < min || min == -1)) { + min = p; + } + } + firstVisibleItemPosition = min; + lastVisibleItemPosition = max; + + max = -1; + min = -1; + for (int i = 0; i < getSupportingListView().getChildCount(); i++) { + int p = getSupportingListView().getChildAdapterPosition(getSupportingListView().getChildAt(i)); + if (p >= 0 && (p > max || max == -1)) { + max = p; + } + if (p >= 0 && (p < min || min == -1)) { + min = p; + } + } + + firstVisibleItemPosition2 = min; + lastVisibleItemPosition2 = max; + + if (firstVisibleItemPosition >= 0 && firstVisibleItemPosition2 >= 0 && getPinchCenterPosition() >= 0) { + int rowsCount1 = (int) Math.ceil((movingAdapter.getItemCount()) / (float) getColumnsCount()); + int rowsCount2 = (int) Math.ceil((movingAdapter.getItemCount()) / (float) getAnimateToColumnsCount()); + rowsOffset = ((getPinchCenterPosition()) / getAnimateToColumnsCount() - firstVisibleItemPosition2 / getAnimateToColumnsCount()) - ((getPinchCenterPosition()) / getColumnsCount() - firstVisibleItemPosition / getColumnsCount()); + if ((firstVisibleItemPosition / getColumnsCount() - rowsOffset < 0 && getAnimateToColumnsCount() < getColumnsCount()) || (firstVisibleItemPosition2 / getAnimateToColumnsCount() + rowsOffset < 0 && getAnimateToColumnsCount() > getColumnsCount())) { + rowsOffset = 0; + } + if ((lastVisibleItemPosition2 / getColumnsCount() + rowsOffset >= rowsCount1 && getAnimateToColumnsCount() > getColumnsCount()) || (lastVisibleItemPosition / getAnimateToColumnsCount() - rowsOffset >= rowsCount2 && getAnimateToColumnsCount() < getColumnsCount())) { + rowsOffset = 0; + } + + float k = (getPinchCenterPosition() % getColumnsCount()) / (float) (getColumnsCount() - 1); + columnsOffset = (int) ((getAnimateToColumnsCount() - getColumnsCount()) * k); + } + animationSupportingSortedCells.clear(); + excludeDrawViews.clear(); + drawingViews.clear(); + drawingViews2.clear(); + drawingViews3.clear(); + animationSupportingSortedCellsOffset = 0; + for (int i = 0; i < getSupportingListView().getChildCount(); i++) { + View child = getSupportingListView().getChildAt(i); + if (child.getTop() > getMeasuredHeight() || child.getBottom() < 0) { + continue; + } + if (child instanceof SharedPhotoVideoCell2) { + animationSupportingSortedCells.add((SharedPhotoVideoCell2) child); + } else if (child instanceof TextView) { + animationSupportingSortedCellsOffset++; + } + } + drawingViews.addAll(animationSupportingSortedCells); + RecyclerListView.FastScroll fastScroll = getFastScroll(); + if (fastScroll != null && fastScroll.getTag() != null) { + float p1 = movingAdapter.getScrollProgress(this); + float p2 = supportingMovingAdapter.getScrollProgress(getSupportingListView()); + float a1 = movingAdapter.fastScrollIsVisible(this) ? 1f : 0f; + float a2 = supportingMovingAdapter.fastScrollIsVisible(getSupportingListView()) ? 1f : 0f; + fastScroll.setProgress(p1 * (1f - getChangeColumnsProgress()) + p2 * getChangeColumnsProgress()); + fastScroll.setVisibilityAlpha(a1 * (1f - getChangeColumnsProgress()) + a2 * getChangeColumnsProgress()); + } + } + + for (int i = 0; i < getChildCount(); i++) { + View child = getChildAt(i); + if (child.getTop() > getMeasuredHeight() || child.getBottom() < 0) { + if (child instanceof SharedPhotoVideoCell2) { + SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) getChildAt(i); + cell.setCrossfadeView(null, 0, 0); + cell.setTranslationX(0); + cell.setTranslationY(0); + cell.setImageScale(1f, !isChangeColumnsAnimation()); + } + continue; + } + if (child instanceof SharedPhotoVideoCell2) { + SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) getChildAt(i); + checkHighlightCell(cell); + + MessageObject messageObject = cell.getMessageObject(); + float alpha = 1f; + if (messageObject != null && getMessageAlphaEnter() != null && getMessageAlphaEnter().get(messageObject.getId(), null) != null) { + alpha = getMessageAlphaEnter().get(messageObject.getId(), 1f); + } + cell.setImageAlpha(alpha, !isChangeColumnsAnimation()); + + boolean inAnimation = false; + if (isChangeColumnsAnimation()) { + float fromScale = 1f; + + int currentColumn = (((GridLayoutManager.LayoutParams) cell.getLayoutParams()).getViewAdapterPosition()) % getColumnsCount() + columnsOffset; + int currentRow = ((((GridLayoutManager.LayoutParams) cell.getLayoutParams()).getViewAdapterPosition()) - firstVisibleItemPosition) / getColumnsCount() + rowsOffset; + int toIndex = currentRow * getAnimateToColumnsCount() + currentColumn + animationSupportingSortedCellsOffset; + if (currentColumn >= 0 && currentColumn < getAnimateToColumnsCount() && toIndex >= 0 && toIndex < animationSupportingSortedCells.size()) { + inAnimation = true; + float toScale = (animationSupportingSortedCells.get(toIndex).getMeasuredWidth() - AndroidUtilities.dpf2(2)) / (float) (cell.getMeasuredWidth() - AndroidUtilities.dpf2(2)); + float scale = AndroidUtilities.lerp(fromScale, toScale, getChangeColumnsProgress()); + float fromX = cell.getLeft(); + float fromY = cell.getTop(); + float toX = animationSupportingSortedCells.get(toIndex).getLeft(); + float toY = animationSupportingSortedCells.get(toIndex).getTop(); + + cell.setPivotX(0); + cell.setPivotY(0); + cell.setImageScale(scale, !isChangeColumnsAnimation()); + cell.setTranslationX((toX - fromX) * getChangeColumnsProgress()); + cell.setTranslationY((toY - fromY) * getChangeColumnsProgress()); + cell.setCrossfadeView(animationSupportingSortedCells.get(toIndex), getChangeColumnsProgress(), getAnimateToColumnsCount()); + excludeDrawViews.add(animationSupportingSortedCells.get(toIndex)); + drawingViews3.add(cell); + canvas.save(); + canvas.translate(cell.getX(), cell.getY()); + cell.draw(canvas); + canvas.restore(); + + if (cell.getY() < minY) { + minY = cell.getY(); + } + } + } + + if (!inAnimation) { + if (isChangeColumnsAnimation()) { + drawingViews2.add(cell); + } + cell.setCrossfadeView(null, 0, 0); + cell.setTranslationX(0); + cell.setTranslationY(0); + cell.setImageScale(1f, !isChangeColumnsAnimation()); + } + } + } + + if (isChangeColumnsAnimation() && !drawingViews.isEmpty()) { + float toScale = getAnimateToColumnsCount() / (float) getColumnsCount(); + float scale = toScale * (1f - getChangeColumnsProgress()) + getChangeColumnsProgress(); + + float sizeToScale = ((getMeasuredWidth() / (float) getColumnsCount()) - AndroidUtilities.dpf2(2)) / ((getMeasuredWidth() / (float) getAnimateToColumnsCount()) - AndroidUtilities.dpf2(2)); + float scaleSize = sizeToScale * (1f - getChangeColumnsProgress()) + getChangeColumnsProgress(); + + float fromSize = getMeasuredWidth() / (float) getColumnsCount(); + float toSize = (getMeasuredWidth() / (float) getAnimateToColumnsCount()); + float size1 = (float) ((Math.ceil((getMeasuredWidth() / (float) getAnimateToColumnsCount())) - AndroidUtilities.dpf2(2)) * scaleSize + AndroidUtilities.dpf2(2)); + if (isStories()) { + size1 *= 1.25f; + } + + for (int i = 0; i < drawingViews.size(); i++) { + SharedPhotoVideoCell2 view = drawingViews.get(i); + if (excludeDrawViews.contains(view)) { + continue; + } + view.setCrossfadeView(null, 0, 0); + int fromColumn = (((GridLayoutManager.LayoutParams) view.getLayoutParams()).getViewAdapterPosition()) % getAnimateToColumnsCount(); + int toColumn = fromColumn - columnsOffset; + int currentRow = ((((GridLayoutManager.LayoutParams) view.getLayoutParams()).getViewAdapterPosition()) - firstVisibleItemPosition2) / getAnimateToColumnsCount(); + currentRow -= rowsOffset; + + canvas.save(); + canvas.translate(toColumn * fromSize * (1f - getChangeColumnsProgress()) + toSize * fromColumn * getChangeColumnsProgress(), minY + size1 * currentRow); + view.setImageScale(scaleSize, !isChangeColumnsAnimation()); + if (toColumn < getColumnsCount()) { + canvas.saveLayerAlpha(0, 0, view.getMeasuredWidth() * scale, view.getMeasuredHeight() * scale, (int) (getChangeColumnsProgress() * 255), Canvas.ALL_SAVE_FLAG); + view.draw(canvas); + canvas.restore(); + } else { + view.draw(canvas); + } + canvas.restore(); + } + } + + super.dispatchDraw(canvas); + + if (isChangeColumnsAnimation()) { + float toScale = getColumnsCount() / (float) getAnimateToColumnsCount(); + float scale = toScale * getChangeColumnsProgress() + (1f - getChangeColumnsProgress()); + + float sizeToScale = ((getMeasuredWidth() / (float) getAnimateToColumnsCount()) - AndroidUtilities.dpf2(2)) / ((getMeasuredWidth() / (float) getColumnsCount()) - AndroidUtilities.dpf2(2)); + float scaleSize = sizeToScale * getChangeColumnsProgress() + (1f - getChangeColumnsProgress()); + + float size1 = (float) ((Math.ceil((getMeasuredWidth() / (float) getColumnsCount())) - AndroidUtilities.dpf2(2)) * scaleSize + AndroidUtilities.dpf2(2)); + if (isStories()) { + size1 *= 1.25f; + } + float fromSize = getMeasuredWidth() / (float) getColumnsCount(); + float toSize = getMeasuredWidth() / (float) getAnimateToColumnsCount(); + + for (int i = 0; i < drawingViews2.size(); i++) { + SharedPhotoVideoCell2 view = drawingViews2.get(i); + int fromColumn = (((GridLayoutManager.LayoutParams) view.getLayoutParams()).getViewAdapterPosition()) % getColumnsCount(); + int currentRow = ((((GridLayoutManager.LayoutParams) view.getLayoutParams()).getViewAdapterPosition()) - firstVisibleItemPosition) / getColumnsCount(); + + currentRow += rowsOffset; + int toColumn = fromColumn + columnsOffset; + + canvas.save(); + view.setImageScale(scaleSize, !isChangeColumnsAnimation()); + canvas.translate(fromColumn * fromSize * (1f - getChangeColumnsProgress()) + toSize * toColumn * getChangeColumnsProgress(), minY + size1 * currentRow); + if (toColumn < getAnimateToColumnsCount()) { + canvas.saveLayerAlpha(0, 0, view.getMeasuredWidth() * scale, view.getMeasuredHeight() * scale, (int) ((1f - getChangeColumnsProgress()) * 255), Canvas.ALL_SAVE_FLAG); + view.draw(canvas); + canvas.restore(); + } else { + view.draw(canvas); + } + canvas.restore(); + } + + if (!drawingViews3.isEmpty()) { + canvas.saveLayerAlpha(0, 0, getMeasuredWidth(), getMeasuredHeight(), (int) (255 * getChangeColumnsProgress()), Canvas.ALL_SAVE_FLAG); + for (int i = 0; i < drawingViews3.size(); i++) { + drawingViews3.get(i).drawCrossafadeImage(canvas); + } + canvas.restore(); + } + } + } else { + for (int i = 0; i < getChildCount(); i++) { + View child = getChildAt(i); + int messageId = getMessageId(child); + float alpha = 1; + if (messageId != 0 && getMessageAlphaEnter() != null && getMessageAlphaEnter().get(messageId, null) != null) { + alpha = getMessageAlphaEnter().get(messageId, 1f); + } + if (child instanceof SharedDocumentCell) { + SharedDocumentCell cell = (SharedDocumentCell) child; + cell.setEnterAnimationAlpha(alpha); + } else if (child instanceof SharedAudioCell) { + SharedAudioCell cell = (SharedAudioCell) child; + cell.setEnterAnimationAlpha(alpha); + } + } + super.dispatchDraw(canvas); + } + } + + @Override + public boolean drawChild(Canvas canvas, View child, long drawingTime) { + final RecyclerListView.FastScrollAdapter movingAdapter = getMovingAdapter(); + if (isThisListView() && getAdapter() == movingAdapter) { + if (isChangeColumnsAnimation() && child instanceof SharedPhotoVideoCell2) { + return true; + } + } + return super.drawChild(canvas, child, drawingTime); + } + }; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/SmoothScroller.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/SmoothScroller.java index 50d034f68f1..84dc5f3c2e0 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/SmoothScroller.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/SmoothScroller.java @@ -14,6 +14,9 @@ public class SmoothScroller extends LinearSmoothScroller { private Interpolator interpolator = CubicBezierInterpolator.DEFAULT; + private int offset; + private float durationScale = 1f; + public SmoothScroller(Context context) { super(context); } @@ -27,6 +30,14 @@ protected void onEnd() { } + public void setOffset(int offset) { + this.offset = offset; + } + + public void setDurationScale(float scale) { + this.durationScale = scale; + } + @Override protected void updateActionForInterimTarget(Action action) { // find an interim target position @@ -63,10 +74,15 @@ protected void onTargetFound(View targetView, RecyclerView.State state, Action a AndroidUtilities.runOnUIThread(this::onEnd, Math.max(0, time)); } + @Override + public int calculateDyToMakeVisible(View view, int snapPreference) { + return super.calculateDyToMakeVisible(view, snapPreference) - offset; + } + protected int calculateTimeForDeceleration(int dx) { - return Math.min(super.calculateTimeForDeceleration(dx), 500); + return Math.round(Math.min(super.calculateTimeForDeceleration(dx), 500) * durationScale); } protected int calculateTimeForScrolling(int dx) { - return Math.min(super.calculateTimeForScrolling(dx), 150); + return Math.round(Math.min(super.calculateTimeForScrolling(dx), 150) * durationScale); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/StarAppsSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/StarAppsSheet.java new file mode 100644 index 00000000000..e31ded9467f --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/StarAppsSheet.java @@ -0,0 +1,58 @@ +package org.telegram.ui.Components; + +import static org.telegram.messenger.LocaleController.getString; + +import android.app.Dialog; +import android.content.Context; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import org.telegram.messenger.MessagesController; +import org.telegram.messenger.NotificationCenter; +import org.telegram.messenger.R; +import org.telegram.tgnet.TLRPC; + +public class StarAppsSheet extends BottomSheetWithRecyclerListView { + + private DialogsBotsAdapter adapter; + + public StarAppsSheet(Context context) { + super(context, null, true, false, false, null); + + fixNavigationBar(); + handleOffset = true; + setShowHandle(true); + + setSlidingActionBar(); + + recyclerListView.setPadding(backgroundPaddingLeft, 0, backgroundPaddingLeft, 0); + recyclerListView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + adapter.checkBottom(); + } + }); + recyclerListView.setOnItemClickListener((view, position) -> { + position--; + Object obj = adapter.getObject(position); + if (obj instanceof TLRPC.User) { + MessagesController.getInstance(currentAccount).openApp(attachedFragment, (TLRPC.User) obj, 0, null); + } + }); + } + + @Override + protected CharSequence getTitle() { + return getString(R.string.SearchAppsExamples); + } + + @Override + protected RecyclerListView.SelectionAdapter createAdapter(RecyclerListView listView) { + adapter = new DialogsBotsAdapter(listView, getContext(), currentAccount, 0, true, resourcesProvider); + adapter.setApplyBackground(false); + return adapter; + } + + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ThanosEffect.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ThanosEffect.java index bda23cf88d5..bba9d3a3052 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ThanosEffect.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ThanosEffect.java @@ -14,15 +14,11 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; -import android.util.Log; import android.view.Choreographer; -import android.view.Surface; import android.view.TextureView; import android.view.View; -import android.widget.FrameLayout; import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; import com.google.zxing.common.detector.MathUtils; @@ -36,7 +32,6 @@ import org.telegram.messenger.R; import org.telegram.messenger.SharedConfig; import org.telegram.messenger.Utilities; -import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Cells.BaseCell; import org.telegram.ui.Cells.ChatActionCell; import org.telegram.ui.Cells.ChatMessageCell; @@ -1090,7 +1085,7 @@ private void drawChildElement(View chatListView, ChatActivity chatActivity, Canv } else if (type == 2) { cell.drawCaptionLayout(canvas, cell.getCurrentPosition() != null && (cell.getCurrentPosition().flags & MessageObject.POSITION_FLAG_LEFT) == 0, alpha); } else if (!(cell.getCurrentPosition() != null && (cell.getCurrentPosition().flags & MessageObject.POSITION_FLAG_LEFT) == 0)) { - cell.drawReactionsLayout(canvas, alpha); + cell.drawReactionsLayout(canvas, alpha, null); } cell.setInvalidatesParent(false); canvas.restore(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ThemeEditorView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ThemeEditorView.java index e1a7b9a61e3..ddb8cf96995 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ThemeEditorView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ThemeEditorView.java @@ -872,7 +872,7 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) { bottomSaveLayout.addView(saveButton, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.RIGHT)); saveButton.setOnClickListener(v -> { Theme.saveCurrentTheme(themeInfo, true, false, false); - setOnDismissListener(null); + setOnDismissListener((OnDismissListener) null); dismiss(); close(); }); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/TranslateAlert2.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/TranslateAlert2.java index ede947c2c92..62a70f31019 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/TranslateAlert2.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/TranslateAlert2.java @@ -1035,6 +1035,12 @@ public static String languageName(String locale, boolean[] accusative) { } } + public static String languageNameCapital(String locale) { + String lng = languageName(locale); + if (lng == null) return null; + return lng.substring(0, 1).toUpperCase() + lng.substring(1); + } + public static String systemLanguageName(String langCode) { return systemLanguageName(langCode, false); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/UItem.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/UItem.java index 3d8400feb72..17602d39e65 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/UItem.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/UItem.java @@ -2,6 +2,7 @@ import android.content.Context; +import android.graphics.drawable.Drawable; import android.text.TextUtils; import android.util.LongSparseArray; import android.util.SparseIntArray; @@ -56,6 +57,7 @@ public class UItem extends AdapterWithDiffUtils.Item { public View.OnClickListener clickCallback; public Object object; + public Object object2; public boolean withUsername = true; @@ -152,6 +154,14 @@ public static UItem asButton(int id, int iconResId, CharSequence text) { return i; } + public static UItem asButton(int id, Drawable icon, CharSequence text) { + UItem i = new UItem(UniversalAdapter.VIEW_TYPE_TEXT, false); + i.id = id; + i.object = icon; + i.text = text; + return i; + } + public static UItem asButton(int id, CharSequence text, CharSequence value) { UItem i = new UItem(UniversalAdapter.VIEW_TYPE_TEXT, false); i.id = id; @@ -566,7 +576,8 @@ public boolean itemEquals(UItem item) { view == item.view && intValue == item.intValue && longValue == item.longValue && - Objects.equals(object, item.object) + Objects.equals(object, item.object) && + Objects.equals(object2, item.object2) ); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/UniversalAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/UniversalAdapter.java index 4ac3facdffb..305a93afb9e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/UniversalAdapter.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/UniversalAdapter.java @@ -27,7 +27,6 @@ import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; import org.telegram.tgnet.tl.TL_stats; -import org.telegram.ui.ActionBar.ActionBar; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Business.BusinessLinksActivity; import org.telegram.ui.Business.QuickRepliesActivity; @@ -118,6 +117,7 @@ public class UniversalAdapter extends AdapterWithDiffUtils { private final int currentAccount; private final int classGuid; private final boolean dialog; + private boolean applyBackground = true; protected Utilities.Callback2<ArrayList<UItem>, UniversalAdapter> fillItems; private final Theme.ResourcesProvider resourcesProvider; @@ -157,6 +157,9 @@ public UniversalAdapter( update(false); } + public void setApplyBackground(boolean applyBackground) { + this.applyBackground = applyBackground; + } private static class Section { public int start, end; @@ -292,6 +295,55 @@ public void update(boolean animated) { } } + public boolean shouldApplyBackground(int viewType) { + if (!applyBackground) return false; + if (viewType >= UItem.factoryViewTypeStartsWith) { + return true; + } + switch (viewType) { + case VIEW_TYPE_HEADER: + case VIEW_TYPE_ANIMATED_HEADER: + case VIEW_TYPE_BLACK_HEADER: + case VIEW_TYPE_TEXT: + case VIEW_TYPE_CHECK: + case VIEW_TYPE_CHECKRIPPLE: + case VIEW_TYPE_RADIO: + case VIEW_TYPE_TEXT_CHECK: + case VIEW_TYPE_ICON_TEXT_CHECK: + case VIEW_TYPE_FULLSCREEN_CUSTOM: + case VIEW_TYPE_FILTER_CHAT: + case VIEW_TYPE_FILTER_CHAT_CHECK: + case VIEW_TYPE_USER_ADD: + case VIEW_TYPE_RADIO_USER: + case VIEW_TYPE_SLIDE: + case VIEW_TYPE_INTSLIDE: + case VIEW_TYPE_QUICK_REPLY: + case VIEW_TYPE_LARGE_QUICK_REPLY: + case VIEW_TYPE_CHART_LINEAR: + case VIEW_TYPE_CHART_DOUBLE_LINEAR: + case VIEW_TYPE_CHART_STACK_BAR: + case VIEW_TYPE_CHART_BAR: + case VIEW_TYPE_CHART_STACK_LINEAR: + case VIEW_TYPE_CHART_LINEAR_BAR: + case VIEW_TYPE_TRANSACTION: + case VIEW_TYPE_PROCEED_OVERVIEW: + case VIEW_TYPE_SPACE: + case VIEW_TYPE_BUSINESS_LINK: + case VIEW_TYPE_RIGHT_ICON_TEXT: + case VIEW_TYPE_PROFILE_CELL: + case VIEW_TYPE_SEARCH_MESSAGE: + case VIEW_TYPE_FLICKER: + case VIEW_TYPE_ROUND_CHECKBOX: + case VIEW_TYPE_ROUND_GROUP_CHECKBOX: + case VIEW_TYPE_USER_GROUP_CHECKBOX: + case VIEW_TYPE_USER_CHECKBOX: + case VIEW_TYPE_SWITCH: + case VIEW_TYPE_EXPANDABLE_SWITCH: + return true; + } + return false; + } + @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { @@ -301,9 +353,6 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int UItem.UItemFactory<?> factory = UItem.findFactory(viewType); if (factory != null) { view = factory.createView(context, currentAccount, classGuid, resourcesProvider); - if (!factory.isShadow()) { - view.setBackgroundColor(getThemedColor(key_background)); - } } else { view = new View(context); } @@ -314,15 +363,12 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int } else { view = new HeaderCell(context, resourcesProvider); } - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_ANIMATED_HEADER: view = new HeaderCell(context, Theme.key_windowBackgroundWhiteBlueHeader, 21, 15, 0, false, true, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_BLACK_HEADER: view = new HeaderCell(context, Theme.key_windowBackgroundWhiteBlackText, 17, 15, false, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_LARGE_HEADER: HeaderCell headerCell = new HeaderCell(context, Theme.key_windowBackgroundWhiteBlackText, 23, 20, 0, false, resourcesProvider); @@ -334,7 +380,6 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int break; case VIEW_TYPE_TEXT: view = new TextCell(context, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_CHECK: case VIEW_TYPE_CHECKRIPPLE: @@ -345,17 +390,14 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int cell.setTypeface(AndroidUtilities.bold()); cell.setHeight(56); } - cell.setBackgroundColor(getThemedColor(key_background)); view = cell; break; case VIEW_TYPE_RADIO: view = new DialogRadioCell(context); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_TEXT_CHECK: case VIEW_TYPE_ICON_TEXT_CHECK: view = new NotificationsCheckCell(context, 21, 60, viewType == VIEW_TYPE_ICON_TEXT_CHECK, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_CUSTOM: view = new FrameLayout(context) { @@ -382,41 +424,33 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { break; case VIEW_TYPE_FULLSCREEN_CUSTOM: view = new FullscreenCustomFrameLayout(context); - view.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.MATCH_PARENT)); break; case VIEW_TYPE_FILTER_CHAT: case VIEW_TYPE_FILTER_CHAT_CHECK: UserCell userCell = new UserCell(context, 6, viewType == VIEW_TYPE_FILTER_CHAT_CHECK ? 3 : 0, false); userCell.setSelfAsSavedMessages(true); - userCell.setBackgroundColor(getThemedColor(key_background)); view = userCell; break; case VIEW_TYPE_USER_ADD: UserCell userCell2 = new UserCell(context, 6, 0, false, true); - userCell2.setBackgroundColor(getThemedColor(key_background)); view = userCell2; break; case VIEW_TYPE_RADIO_USER: StoryPrivacyBottomSheet.UserCell userCell3 = new StoryPrivacyBottomSheet.UserCell(context, resourcesProvider); userCell3.setIsSendAs(false, false); - userCell3.setBackgroundColor(getThemedColor(key_background)); view = userCell3; break; case VIEW_TYPE_SLIDE: view = new SlideChooseView(context, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_INTSLIDE: view = new SlideIntChooseView(context, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_QUICK_REPLY: view = new QuickRepliesActivity.QuickReplyView(context, onReordered != null, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_LARGE_QUICK_REPLY: view = new QuickRepliesActivity.LargeQuickReplyView(context, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_CHART_LINEAR: case VIEW_TYPE_CHART_DOUBLE_LINEAR: @@ -428,44 +462,35 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { chartSharedUI = new BaseChartView.SharedUiComponents(); } view = new StatisticActivity.UniversalChartCell(context, currentAccount, viewType - VIEW_TYPE_CHART_LINEAR, chartSharedUI, classGuid); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_TRANSACTION: view = new ChannelMonetizationLayout.TransactionCell(context, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_PROCEED_OVERVIEW: view = new ChannelMonetizationLayout.ProceedOverviewCell(context, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_SPACE: view = new View(context); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_BUSINESS_LINK: view = new BusinessLinksActivity.BusinessLinkView(context, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_RIGHT_ICON_TEXT: view = new TextRightIconCell(context, resourcesProvider); - view.setBackgroundColor(getThemedColor(key_background)); break; case VIEW_TYPE_GRAY_SECTION: view = new GraySectionCell(context, resourcesProvider); break; case VIEW_TYPE_PROFILE_CELL: view = new ProfileSearchCell(context); - view.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); break; case VIEW_TYPE_SEARCH_MESSAGE: view = new DialogCell(null, context, false, true); - view.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); break; case VIEW_TYPE_FLICKER: FlickerLoadingView flickerLoadingView = new FlickerLoadingView(context, resourcesProvider); flickerLoadingView.setIsSingleCell(true); view = flickerLoadingView; - view.setBackgroundColor(getThemedColor(key_background)); break; default: case VIEW_TYPE_SHADOW: @@ -488,7 +513,6 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } CheckBoxCell checkBoxCell = new CheckBoxCell(context, checkBoxType, 21, true, resourcesProvider); checkBoxCell.getCheckBoxRound().setColor(Theme.key_switch2TrackChecked, Theme.key_radioBackground, Theme.key_checkboxCheck); - checkBoxCell.setBackgroundColor(getThemedColor(key_background)); view = checkBoxCell; break; case VIEW_TYPE_SHADOW_COLLAPSE_BUTTON: @@ -497,9 +521,11 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { case VIEW_TYPE_SWITCH: case VIEW_TYPE_EXPANDABLE_SWITCH: view = new TextCheckCell2(context); - view.setBackgroundColor(getThemedColor(key_background)); break; } + if (shouldApplyBackground(viewType)) { + view.setBackgroundColor(getThemedColor(key_background)); + } return new RecyclerListView.Holder(view); } @@ -532,6 +558,7 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi if (item == null) return; final int viewType = holder.getItemViewType(); final boolean divider = hasDivider(position); + updateColors(holder); if (viewType >= UItem.factoryViewTypeStartsWith) { UItem.UItemFactory<?> factory = UItem.findFactory(viewType); if (factory != null) { @@ -564,13 +591,17 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi } else if (item.object instanceof String) { cell.setTextAndSticker(item.text, (String) item.object, divider); } else if (TextUtils.isEmpty(item.textValue)) { - if (item.iconResId == 0) { + if (item.object instanceof Drawable) { + cell.setTextAndIcon(item.text, (Drawable) item.object, divider); + } else if (item.iconResId == 0) { cell.setText(item.text, divider); } else { cell.setTextAndIcon(item.text, item.iconResId, divider); } } else { - if (item.iconResId == 0) { + if (item.object instanceof Drawable) { + cell.setTextAndValueAndIcon(item.text, item.textValue, (Drawable) item.object, divider); + } else if (item.iconResId == 0) { cell.setTextAndValue(item.text, item.textValue, divider); } else { cell.setTextAndValueAndIcon(item.text, item.textValue, item.iconResId, divider); @@ -812,7 +843,12 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi ProfileSearchCell profileCell = (ProfileSearchCell) holder.itemView; Object object = item.object; CharSequence s = ""; - if (item.withUsername) { + if (item.accent && object instanceof TLRPC.User && ((TLRPC.User) object).bot_active_users != 0) { // show bot dau + TLRPC.User user = (TLRPC.User) object; + if (user.bot_active_users != 0) { + s = LocaleController.formatPluralStringComma("BotUsers", user.bot_active_users, ' '); + } + } else if (item.withUsername) { String username = null; if (object instanceof TLRPC.User) { username = UserObject.getPublicUsername((TLRPC.User) object); @@ -927,6 +963,17 @@ private View findViewByItemObject(Object object) { @Override public void onViewAttachedToWindow(@NonNull RecyclerView.ViewHolder holder) { updateReorder(holder, allowReorder); + updateColors(holder); + } + + private void updateColors(RecyclerView.ViewHolder holder) { + if (holder.itemView instanceof Theme.Colorable) { + ((Theme.Colorable) holder.itemView).updateColors(); + if (shouldApplyBackground(holder.getItemViewType())) { + final int key_background = dialog ? Theme.key_dialogBackground : Theme.key_windowBackgroundWhite; + holder.itemView.setBackgroundColor(getThemedColor(key_background)); + } + } } public void updateReorder(RecyclerView.ViewHolder holder, boolean allowReorder) { @@ -1008,19 +1055,32 @@ public FullscreenCustomFrameLayout(Context context) { } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int maxHeight = View.MeasureSpec.getSize(heightMeasureSpec); - widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(View.MeasureSpec.getSize(widthMeasureSpec), View.MeasureSpec.EXACTLY); - measureChildren(widthMeasureSpec, heightMeasureSpec); - int height = 0; - for (int i = 0; i < getChildCount(); ++i) { - View child = getChildAt(i); - height = Math.max(height, child.getMeasuredHeight()); - } - if (maxHeight > 0) { - maxHeight -= minusHeight; - height = Math.min(height, maxHeight); + if (getParent() instanceof View && ((View) getParent()).getMeasuredHeight() > 0) { + View parent = (View) getParent(); + super.onMeasure( + MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(parent.getMeasuredHeight() - minusHeight, MeasureSpec.EXACTLY) + ); + } else if (MeasureSpec.getMode(heightMeasureSpec) != MeasureSpec.UNSPECIFIED) { + super.onMeasure( + MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(heightMeasureSpec) - minusHeight, MeasureSpec.EXACTLY) + ); + } else { + int maxHeight = View.MeasureSpec.getSize(heightMeasureSpec); + widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(View.MeasureSpec.getSize(widthMeasureSpec), View.MeasureSpec.EXACTLY); + measureChildren(widthMeasureSpec, heightMeasureSpec); + int height = 0; + for (int i = 0; i < getChildCount(); ++i) { + View child = getChildAt(i); + height = Math.max(height, child.getMeasuredHeight()); + } + if (maxHeight > 0) { + maxHeight -= minusHeight; + height = Math.min(height, maxHeight); + } + super.onMeasure(widthMeasureSpec, View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY)); } - super.onMeasure(widthMeasureSpec, View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY)); } public void setMinusHeight(int minusHeight) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/UniversalRecyclerView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/UniversalRecyclerView.java index 20ada0d63cd..6ccc260929f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/UniversalRecyclerView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/UniversalRecyclerView.java @@ -16,13 +16,9 @@ import org.telegram.messenger.Utilities; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.Theme; -import org.telegram.ui.Cells.DialogCell; -import org.telegram.ui.FiltersSetupActivity; import java.util.ArrayList; -import kotlinx.coroutines.android.AndroidDispatcherFactory; - public class UniversalRecyclerView extends RecyclerListView { public final LinearLayoutManager layoutManager; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ViewPagerFixed.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ViewPagerFixed.java index cf3f0e40940..6546d2a2778 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ViewPagerFixed.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ViewPagerFixed.java @@ -1,5 +1,7 @@ package org.telegram.ui.Components; +import static org.telegram.messenger.AndroidUtilities.dp; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; @@ -20,8 +22,10 @@ import android.text.TextPaint; import android.text.TextUtils; import android.transition.TransitionManager; +import android.util.Log; import android.util.SparseArray; import android.util.SparseIntArray; +import android.view.Gravity; import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.View; @@ -398,6 +402,7 @@ public void fillTabs(boolean animated) { for (int i = 0; i < adapter.getItemCount(); i++) { tabsView.addTab(adapter.getItemId(i), adapter.getItemTitle(i)); } + addMoreTabs(); if (animated) { TransitionManager.beginDelayedTransition(tabsView.listView, TransitionExt.createSimpleTransition()); } @@ -405,6 +410,10 @@ public void fillTabs(boolean animated) { } } + protected void addMoreTabs() { + + } + private boolean prepareForMoving(MotionEvent ev, boolean forward) { if ((!forward && currentPosition == 0 && !onBackProgress(backProgress = 0)) || (forward && currentPosition == adapter.getItemCount() - 1) || manualScrolling != null) { return false; @@ -735,6 +744,7 @@ public boolean checkTabsAnimationInProgress() { } cancel = true; } + onTabAnimationUpdate(true); if (cancel) { //showScrollbars(true); if (tabsAnimation != null) { @@ -779,6 +789,7 @@ public void setPosition(int position) { if (tabsView != null) { tabsView.selectTab(currentPosition, nextPosition, currentProgress); } + onTabAnimationUpdate(true); } } @@ -791,6 +802,7 @@ public void updateCurrent() { viewPages[1] = null; } viewPages[0].setTranslationX(0); + onTabAnimationUpdate(true); } } @@ -883,6 +895,7 @@ public void rebuild(boolean animated) { if (viewPages[0] != null) { tabsAnimation.playTogether(ObjectAnimator.ofFloat(viewPages[0], View.TRANSLATION_X, 0)); } + onTabAnimationUpdate(true); tabsView.indicatorProgress2 = 0; tabsView.listView.invalidateViews(); @@ -983,28 +996,28 @@ public static class TabsView extends FrameLayout { private float indicatorProgress2 = 1f; public interface TabsViewDelegate { - void onPageSelected(int page, boolean forward); - void onPageScrolled(float progress); - void onSamePageSelected(); - void invalidateBlur(); - boolean canPerformActions(); + default void onPageSelected(int page, boolean forward) {}; + default void onPageScrolled(float progress) {}; + default void onSamePageSelected() {}; + default void invalidateBlur() {}; + default boolean canPerformActions() { return true; }; } private static class Tab { public int id; - public String title; + public CharSequence title; public int titleWidth; public int counter; public float alpha = 1f; - public Tab(int i, String t) { + public Tab(int i, CharSequence t) { id = i; title = t; } public int getWidth(boolean store, TextPaint textPaint) { - int width = titleWidth = (int) Math.ceil(textPaint.measureText(title)); - return Math.max(AndroidUtilities.dp(40), width); + int width = titleWidth = (int) Math.ceil(textPaint.measureText(title == null ? "" : title.toString())); + return Math.max(0, width); } public boolean setTitle(String newTitle) { @@ -1023,7 +1036,7 @@ public class TabView extends View { private int tabWidth; private int currentPosition; private RectF rect = new RectF(); - private String currentText; + private CharSequence currentText; private StaticLayout textLayout; private int textOffsetX; @@ -1045,7 +1058,7 @@ public int getId() { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int w = currentTab.getWidth(false, textPaint) + AndroidUtilities.dp(tabMarginDp * 2) + additionalTabWidth; + int w = currentTab.getWidth(false, textPaint) + dp(tabMarginDp * 2) + additionalTabWidth; setMeasuredDimension(w, MeasureSpec.getSize(heightMeasureSpec)); } @@ -1055,7 +1068,7 @@ protected void onDraw(Canvas canvas) { if (currentTab.id != Integer.MAX_VALUE && editingAnimationProgress != 0) { canvas.save(); float p = editingAnimationProgress * (currentPosition % 2 == 0 ? 1.0f : -1.0f); - canvas.translate(AndroidUtilities.dp(0.66f) * p, 0); + canvas.translate(dp(0.66f) * p, 0); canvas.rotate(p, getMeasuredWidth() / 2, getMeasuredHeight() / 2); } int key; @@ -1085,7 +1098,9 @@ protected void onDraw(Canvas canvas) { unreadOtherKey = Theme.key_chats_tabUnreadActiveBackground; } - if ((animatingIndicator || manualScrollingToId != -1) && (currentTab.id == id1 || currentTab.id == id2)) { + if (selectorType == 9) { + textPaint.setColor(Theme.getColor(unactiveTextColorKey, resourcesProvider)); + } else if ((animatingIndicator || manualScrollingToId != -1) && (currentTab.id == id1 || currentTab.id == id2)) { textPaint.setColor(ColorUtils.blendARGB(Theme.getColor(otherKey, resourcesProvider), Theme.getColor(key, resourcesProvider), animatingIndicatorProgress)); } else { textPaint.setColor(Theme.getColor(key, resourcesProvider)); @@ -1098,7 +1113,7 @@ protected void onDraw(Canvas canvas) { if (currentTab.counter > 0) { counterText = String.format("%d", currentTab.counter); counterWidth = (int) Math.ceil(textCounterPaint.measureText(counterText)); - countWidth = Math.max(AndroidUtilities.dp(10), counterWidth) + AndroidUtilities.dp(10); + countWidth = Math.max(dp(10), counterWidth) + dp(10); } else { counterText = null; counterWidth = 0; @@ -1106,15 +1121,15 @@ protected void onDraw(Canvas canvas) { } if (currentTab.id != Integer.MAX_VALUE && (isEditing || editingStartAnimationProgress != 0)) { - countWidth = (int) (countWidth + (AndroidUtilities.dp(20) - countWidth) * editingStartAnimationProgress); + countWidth = (int) (countWidth + (dp(20) - countWidth) * editingStartAnimationProgress); } - tabWidth = currentTab.titleWidth + (countWidth != 0 ? countWidth + AndroidUtilities.dp(6 * (counterText != null ? 1.0f : editingStartAnimationProgress)) : 0); + tabWidth = currentTab.titleWidth + (countWidth != 0 ? countWidth + dp(6 * (counterText != null ? 1.0f : editingStartAnimationProgress)) : 0); int textX = (getMeasuredWidth() - tabWidth) / 2; if (!TextUtils.equals(currentTab.title, currentText)) { currentText = currentTab.title; - CharSequence text = Emoji.replaceEmoji(currentText, textPaint.getFontMetricsInt(), AndroidUtilities.dp(15), false); - textLayout = new StaticLayout(text, textPaint, AndroidUtilities.dp(400), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0, false); + CharSequence text = Emoji.replaceEmoji(currentText, textPaint.getFontMetricsInt(), dp(15), false); + textLayout = new StaticLayout(text, textPaint, dp(400), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0, false); textHeight = textLayout.getHeight(); textOffsetX = (int) -textLayout.getLineLeft(0); } @@ -1139,8 +1154,8 @@ protected void onDraw(Canvas canvas) { counterPaint.setColor(textPaint.getColor()); } - int x = textX + currentTab.titleWidth + AndroidUtilities.dp(6); - int countTop = (getMeasuredHeight() - AndroidUtilities.dp(20)) / 2; + int x = textX + currentTab.titleWidth + dp(6); + int countTop = (getMeasuredHeight() - dp(20)) / 2; if (currentTab.id != Integer.MAX_VALUE && (isEditing || editingStartAnimationProgress != 0) && counterText == null) { counterPaint.setAlpha((int) (editingStartAnimationProgress * 255)); @@ -1148,19 +1163,19 @@ protected void onDraw(Canvas canvas) { counterPaint.setAlpha(255); } - rect.set(x, countTop, x + countWidth, countTop + AndroidUtilities.dp(20)); + rect.set(x, countTop, x + countWidth, countTop + dp(20)); canvas.drawRoundRect(rect, 11.5f * AndroidUtilities.density, 11.5f * AndroidUtilities.density, counterPaint); if (counterText != null) { if (currentTab.id != Integer.MAX_VALUE) { textCounterPaint.setAlpha((int) (255 * (1.0f - editingStartAnimationProgress))); } - canvas.drawText(counterText, rect.left + (rect.width() - counterWidth) / 2, countTop + AndroidUtilities.dp(14.5f), textCounterPaint); + canvas.drawText(counterText, rect.left + (rect.width() - counterWidth) / 2, countTop + dp(14.5f), textCounterPaint); } if (currentTab.id != Integer.MAX_VALUE && (isEditing || editingStartAnimationProgress != 0)) { deletePaint.setColor(textCounterPaint.getColor()); deletePaint.setAlpha((int) (255 * editingStartAnimationProgress)); - int side = AndroidUtilities.dp(3); + int side = dp(3); canvas.drawLine(rect.centerX() - side, rect.centerY() - side, rect.centerX() + side, rect.centerY() + side, deletePaint); canvas.drawLine(rect.centerX() - side, rect.centerY() + side, rect.centerX() + side, rect.centerY() - side, deletePaint); } @@ -1206,6 +1221,7 @@ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { private TabsViewDelegate delegate; + private int selectorType; private int currentPosition; private int selectedTabId = -1; private int allTabsWidth; @@ -1286,13 +1302,14 @@ public TabsView(Context context, boolean hasStableIds, int tabsSelectorType, The super(context); this.resourcesProvider = resourcesProvider; - textCounterPaint.setTextSize(AndroidUtilities.dp(13)); + this.selectorType = tabsSelectorType; + textCounterPaint.setTextSize(dp(13)); textCounterPaint.setTypeface(AndroidUtilities.bold()); - textPaint.setTextSize(AndroidUtilities.dp(15)); + textPaint.setTextSize(dp(tabsSelectorType == 9 ? 14 : 15)); textPaint.setTypeface(AndroidUtilities.bold()); deletePaint.setStyle(Paint.Style.STROKE); deletePaint.setStrokeCap(Paint.Cap.ROUND); - deletePaint.setStrokeWidth(AndroidUtilities.dp(1.5f)); + deletePaint.setStrokeWidth(dp(1.5f)); selectorDrawable = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, null); float rad = AndroidUtilities.dpf2(3); @@ -1326,7 +1343,7 @@ public void setAlpha(float alpha) { protected boolean canHighlightChildAt(View child, float x, float y) { if (isEditing) { TabView tabView = (TabView) child; - int side = AndroidUtilities.dp(6); + int side = dp(6); if (tabView.rect.left - side < x && tabView.rect.right + side > x) { return false; } @@ -1355,10 +1372,10 @@ public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State @Override protected void onTargetFound(View targetView, RecyclerView.State state, Action action) { int dx = calculateDxToMakeVisible(targetView, getHorizontalSnapPreference()); - if (dx > 0 || dx == 0 && targetView.getLeft() - AndroidUtilities.dp(21) < 0) { - dx += AndroidUtilities.dp(60); - } else if (dx < 0 || dx == 0 && targetView.getRight() + AndroidUtilities.dp(21) > getMeasuredWidth()) { - dx -= AndroidUtilities.dp(60); + if (dx > 0 || dx == 0 && targetView.getLeft() - dp(21) < 0) { + dx += dp(60); + } else if (dx < 0 || dx == 0 && targetView.getRight() + dp(21) > getMeasuredWidth()) { + dx -= dp(60); } final int dy = calculateDyToMakeVisible(targetView, getVerticalSnapPreference()); @@ -1381,14 +1398,14 @@ public void onInitializeAccessibilityNodeInfo(@NonNull RecyclerView.Recycler rec } } }); - listView.setPadding(AndroidUtilities.dp(7), 0, AndroidUtilities.dp(7), 0); + listView.setPadding(dp(7), 0, dp(7), 0); listView.setClipToPadding(false); listView.setDrawSelectorBehind(true); adapter = new ListAdapter(context); adapter.setHasStableIds(hasStableIds); listView.setAdapter(adapter); listView.setOnItemClickListener((view, position, x, y) -> { - if (!delegate.canPerformActions()) { + if (delegate != null && !delegate.canPerformActions()) { return; } TabView tabView = (TabView) view; @@ -1396,6 +1413,9 @@ public void onInitializeAccessibilityNodeInfo(@NonNull RecyclerView.Recycler rec delegate.onSamePageSelected(); return; } + if (preTabClick != null && preTabClick.run(tabView.currentTab.id, position)) { + return; + } scrollToTab(tabView.currentTab.id, position); }); listView.setOnScrollListener(new RecyclerView.OnScrollListener() { @@ -1404,13 +1424,22 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) { invalidate(); } }); - addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + if (tabsSelectorType == 9) { + addView(listView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.CENTER_HORIZONTAL)); + } else { + addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + } } public void setDelegate(TabsViewDelegate filterTabsViewDelegate) { delegate = filterTabsViewDelegate; } + private Utilities.Callback2Return<Integer, Integer, Boolean> preTabClick; + public void setPreTabClick(Utilities.Callback2Return<Integer, Integer, Boolean> listener) { + preTabClick = listener; + } + public boolean isAnimatingIndicator() { return animatingIndicator; } @@ -1497,7 +1526,7 @@ public int getNextPageId(boolean forward) { return positionToId.get(currentPosition + (forward ? 1 : -1), -1); } - public void addTab(int id, String text) { + public void addTab(int id, CharSequence text) { int position = tabs.size(); if (position == 0 && selectedTabId == -1) { selectedTabId = id; @@ -1508,7 +1537,7 @@ public void addTab(int id, String text) { currentPosition = position; } Tab tab = new Tab(id, text); - allTabsWidth += tab.getWidth(true, textPaint) + AndroidUtilities.dp(tabMarginDp * 2); + allTabsWidth += tab.getWidth(true, textPaint) + dp(tabMarginDp * 2); tabs.add(tab); } @@ -1536,12 +1565,12 @@ public int getFirstTabId() { private void updateTabsWidths() { positionToX.clear(); positionToWidth.clear(); - int xOffset = AndroidUtilities.dp(7); + int xOffset = dp(7); for (int a = 0, N = tabs.size(); a < N; a++) { int tabWidth = tabs.get(a).getWidth(false, textPaint); positionToWidth.put(a, tabWidth); positionToX.put(a, xOffset + additionalTabWidth / 2); - xOffset += tabWidth + AndroidUtilities.dp(tabMarginDp * 2) + additionalTabWidth; + xOffset += tabWidth + dp(tabMarginDp * 2) + additionalTabWidth; } } @@ -1552,6 +1581,7 @@ private void saveFromValues() { overrideFromW = lastDrawnIndicatorW; } + private final Paint selectorPaint = new Paint(Paint.ANTI_ALIAS_FLAG); @Override protected boolean drawChild(Canvas canvas, View child, long drawingTime) { @@ -1594,10 +1624,10 @@ protected boolean drawChild(Canvas canvas, View child, long drawingTime) { int prevW = positionToWidth.get(idx1); int newW = positionToWidth.get(idx2); if (additionalTabWidth != 0) { - indicatorX = (int) (prevX + (newX - prevX) * animatingIndicatorProgress) + AndroidUtilities.dp(tabMarginDp); + indicatorX = (int) (prevX + (newX - prevX) * animatingIndicatorProgress) + dp(tabMarginDp); } else { int x = positionToX.get(position); - indicatorX = (int) (prevX + (newX - prevX) * animatingIndicatorProgress) - (x - holder.itemView.getLeft()) + AndroidUtilities.dp(tabMarginDp); + indicatorX = (int) (prevX + (newX - prevX) * animatingIndicatorProgress) - (x - holder.itemView.getLeft()) + dp(tabMarginDp); } indicatorWidth = (int) (prevW + (newW - prevW) * animatingIndicatorProgress); } @@ -1606,19 +1636,27 @@ protected boolean drawChild(Canvas canvas, View child, long drawingTime) { RecyclerListView.ViewHolder holder = listView.findViewHolderForAdapterPosition(currentPosition); if (holder != null) { TabView tabView = (TabView) holder.itemView; - indicatorWidth = Math.max(AndroidUtilities.dp(40), tabView.tabWidth); + indicatorWidth = Math.max(dp(40), tabView.tabWidth); indicatorX = (int) (tabView.getX() + (tabView.getMeasuredWidth() - indicatorWidth) / 2); } } + indicatorX += listView.getX(); if (indicatorWidth != 0) { - lastDrawnIndicatorX = indicatorX; - lastDrawnIndicatorW = indicatorWidth; - if (indicatorProgress2 != 1f) { - indicatorX = (int) AndroidUtilities.lerp(lastDrawnIndicatorX, indicatorX, indicatorProgress2); - indicatorWidth = (int) AndroidUtilities.lerp(lastDrawnIndicatorW, indicatorWidth, indicatorProgress2); + if (selectorType == 9) { + selectorPaint.setColor(Theme.multAlpha(textPaint.getColor(), .15f)); + final float cy = height / 2f, h = dp(26); + AndroidUtilities.rectTmp.set(indicatorX - dp(12), cy - h / 2f, indicatorX + indicatorWidth + dp(12), cy + h / 2f); + canvas.drawRoundRect(AndroidUtilities.rectTmp, AndroidUtilities.rectTmp.height() / 2f, AndroidUtilities.rectTmp.height() / 2f, selectorPaint); + } else { + lastDrawnIndicatorX = indicatorX; + lastDrawnIndicatorW = indicatorWidth; + if (indicatorProgress2 != 1f) { + indicatorX = (int) AndroidUtilities.lerp(lastDrawnIndicatorX, indicatorX, indicatorProgress2); + indicatorWidth = (int) AndroidUtilities.lerp(lastDrawnIndicatorW, indicatorWidth, indicatorProgress2); + } + selectorDrawable.setBounds(indicatorX, (int) (height - AndroidUtilities.dpr(4) + hideProgress * AndroidUtilities.dpr(4)), indicatorX + indicatorWidth, (int) (height + hideProgress * AndroidUtilities.dpr(4))); + selectorDrawable.draw(canvas); } - selectorDrawable.setBounds(indicatorX, (int) (height - AndroidUtilities.dpr(4) + hideProgress * AndroidUtilities.dpr(4)), indicatorX + indicatorWidth, (int) (height + hideProgress * AndroidUtilities.dpr(4))); - selectorDrawable.draw(canvas); } if (crossfadeBitmap != null) { crossfadePaint.setAlpha((int) (crossfadeAlpha * 255)); @@ -1632,9 +1670,9 @@ protected boolean drawChild(Canvas canvas, View child, long drawingTime) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (!tabs.isEmpty()) { - int width = MeasureSpec.getSize(widthMeasureSpec) - AndroidUtilities.dp(7) - AndroidUtilities.dp(7); + int width = MeasureSpec.getSize(widthMeasureSpec) - dp(7) - dp(7); int prevWidth = additionalTabWidth; - if (tabs.size() == 1) { + if (tabs.size() == 1 || selectorType == 9) { additionalTabWidth = 0; } else { additionalTabWidth = allTabsWidth < width ? (width - allTabsWidth) / tabs.size() : 0; @@ -1690,6 +1728,7 @@ protected void onLayout(boolean changed, int l, int t, int r, int b) { } } } + public void selectTab(int currentPosition, int nextPosition, float progress) { if (progress < 0) { progress = 0; @@ -1757,9 +1796,9 @@ public void selectTabWithId(int id, float progress) { private int getChildWidth(TextView child) { Layout layout = child.getLayout(); if (layout != null) { - int w = (int) Math.ceil(layout.getLineWidth(0)) + AndroidUtilities.dp(2); + int w = (int) Math.ceil(layout.getLineWidth(0)) + dp(2); if (child.getCompoundDrawables()[2] != null) { - w += child.getCompoundDrawables()[2].getIntrinsicWidth() + AndroidUtilities.dp(6); + w += child.getCompoundDrawables()[2].getIntrinsicWidth() + dp(6); } return w; } else { @@ -1897,7 +1936,7 @@ public void drawForBlur(Canvas blurCanvas) { if (recyclerListView != null) { for (int j = 0; j < recyclerListView.getChildCount(); j++) { View child = recyclerListView.getChildAt(j); - if (child.getY() < AndroidUtilities.dp(203) + AndroidUtilities.dp(100)) { + if (child.getY() < dp(203) + dp(100)) { int restore = blurCanvas.save(); blurCanvas.translate(viewPages[i].getX(), getY() + viewPages[i].getY() + recyclerListView.getY() + child.getY()); child.draw(blurCanvas); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java index e564262a97a..34e3b96fc0f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java @@ -9,6 +9,7 @@ package org.telegram.ui; import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.LocaleController.formatString; import static org.telegram.messenger.LocaleController.getString; import android.Manifest; @@ -176,6 +177,8 @@ import org.telegram.ui.Components.AvatarDrawable; import org.telegram.ui.Components.BackupImageView; import org.telegram.ui.Components.BlurredRecyclerView; +import org.telegram.ui.Stars.StarsController; +import org.telegram.ui.Stars.StarsIntroActivity; import org.telegram.ui.Stories.StealthModeAlert; import org.telegram.ui.bots.BotWebViewSheet; import org.telegram.ui.Components.Bulletin; @@ -2770,6 +2773,8 @@ public boolean onFragmentCreate() { getNotificationCenter().addObserver(this, NotificationCenter.chatlistFolderUpdate); getNotificationCenter().addObserver(this, NotificationCenter.dialogTranslate); } + getNotificationCenter().addObserver(this, NotificationCenter.starBalanceUpdated); + getNotificationCenter().addObserver(this, NotificationCenter.starSubscriptionsLoaded); loadDialogs(getAccountInstance()); getMessagesController().getStoriesController().loadAllStories(); @@ -2926,6 +2931,8 @@ public void onFragmentDestroy() { getNotificationCenter().removeObserver(this, NotificationCenter.chatlistFolderUpdate); getNotificationCenter().removeObserver(this, NotificationCenter.dialogTranslate); } + getNotificationCenter().removeObserver(this, NotificationCenter.starBalanceUpdated); + getNotificationCenter().removeObserver(this, NotificationCenter.starSubscriptionsLoaded); if (commentView != null) { commentView.onDestroy(); @@ -5519,6 +5526,28 @@ private int getMaxScrollYOffset() { } } + public boolean isStarsSubscriptionHintVisible() { + if (folderId == 0) { + if (MessagesController.getInstance(currentAccount).pendingSuggestions.contains("STARS_SUBSCRIPTION_LOW_BALANCE")) { + StarsController c = StarsController.getInstance(currentAccount); + if (!c.hasInsufficientSubscriptions()) { + c.loadInsufficientSubscriptions(); + return false; + } else { + long starsNeeded = -c.balance; + for (int i = 0; i < c.insufficientSubscriptions.size(); ++i) { + TLRPC.StarsSubscription sub = c.insufficientSubscriptions.get(i); + TLRPC.Chat chat = getMessagesController().getChat(-DialogObject.getPeerDialogId(sub.peer)); + if (chat == null) continue; + starsNeeded += sub.pricing.amount; + } + return starsNeeded > 0; + } + } + } + return false; + } + public boolean isPremiumRestoreHintVisible() { if (!MessagesController.getInstance(currentAccount).premiumFeaturesBlocked() && folderId == 0) { return MessagesController.getInstance(currentAccount).pendingSuggestions.contains("PREMIUM_RESTORE") && !getUserConfig().isPremium() && MediaDataController.getInstance(currentAccount).getPremiumHintAnnualDiscount(false) != null; @@ -5797,6 +5826,39 @@ private void updateDialogsHint() { updateDialogsHint(); }); updateAuthHintCellVisibility(false); + } else if (isStarsSubscriptionHintVisible()) { + StarsController c = StarsController.getInstance(currentAccount); + dialogsHintCellVisible = true; + dialogsHintCell.setVisibility(View.VISIBLE); + dialogsHintCell.setCompact(true); + StringBuilder s = new StringBuilder(); + long starsNeeded = 0; + if (c.hasInsufficientSubscriptions()) { + for (int i = 0; i < c.insufficientSubscriptions.size(); ++i) { + TLRPC.StarsSubscription sub = c.insufficientSubscriptions.get(i); + TLRPC.Chat chat = getMessagesController().getChat(-DialogObject.getPeerDialogId(sub.peer)); + if (chat == null) continue; + if (s.length() > 0) s.append(", "); + s.append(chat.title); + starsNeeded += sub.pricing.amount; + } + } + final String starsNeededName = s.toString(); + final long starsNeededFinal = starsNeeded; + dialogsHintCell.setOnClickListener(v -> { + new StarsIntroActivity.StarsNeededSheet(getContext(), getResourceProvider(), starsNeededFinal, StarsIntroActivity.StarsNeededSheet.TYPE_SUBSCRIPTION_KEEP, starsNeededName, () -> { + updateDialogsHint(); + }).show(); + }); + dialogsHintCell.setText(StarsIntroActivity.replaceStarsWithPlain(formatString(R.string.StarsSubscriptionExpiredHintTitle, starsNeeded - c.balance <= 0 ? starsNeeded : starsNeeded - c.balance, starsNeededName), .72f), LocaleController.getString(R.string.StarsSubscriptionExpiredHintText)); + dialogsHintCell.setOnCloseListener(v -> { + MessagesController.getInstance(currentAccount).removeSuggestion(0, "STARS_SUBSCRIPTION_LOW_BALANCE"); + ChangeBounds transition = new ChangeBounds(); + transition.setDuration(200); + TransitionManager.beginDelayedTransition((ViewGroup) dialogsHintCell.getParent(), transition); + updateDialogsHint(); + }); + updateAuthHintCellVisibility(false); } else if (folderId == 0 && !getMessagesController().premiumPurchaseBlocked() && BirthdayController.getInstance(currentAccount).contains() && !getMessagesController().dismissedSuggestions.contains("BIRTHDAY_CONTACTS_TODAY")) { BirthdayController.BirthdayState state = BirthdayController.getInstance(currentAccount).getState(); ArrayList<TLRPC.User> users = state.today; @@ -5849,6 +5911,7 @@ private void updateDialogsHint() { userFull.flags2 |= 32; userFull.birthday = birthday; } + getMessagesController().invalidateContentSettings(); getConnectionsManager().sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { if (res instanceof TLRPC.TL_boolTrue) { BulletinFactory.of(DialogsActivity.this) @@ -10634,6 +10697,8 @@ public void onAnimationEnd(Animator animation) { updateDialogsHint(); } else if (id == NotificationCenter.premiumPromoUpdated) { updateDialogsHint(); + } else if (id == NotificationCenter.starBalanceUpdated || id == NotificationCenter.starSubscriptionsLoaded) { + updateDialogsHint(); } } @@ -12817,6 +12882,44 @@ public long getSearchForumDialogId() { presentFragment(highlightFoundQuote(chatActivity, msg)); } }); + searchViewPager.botsSearchListView.setOnItemClickListener((view, position, x, y) -> { + Object obj = searchViewPager.botsSearchAdapter.getTopPeerObject(position); + if (obj instanceof TLRPC.User) { + getMessagesController().openApp((TLRPC.User) obj, getClassGuid()); + return; + } + obj = searchViewPager.botsSearchAdapter.getObject(position); + if (obj instanceof TLRPC.User) { + presentFragment(ProfileActivity.of(((TLRPC.User) obj).id)); + } else if (obj instanceof MessageObject) { + MessageObject msg = (MessageObject) obj; + Bundle args = new Bundle(); + if (msg.getDialogId() >= 0) { + args.putLong("user_id", msg.getDialogId()); + } else { + args.putLong("chat_id", -msg.getDialogId()); + } + args.putInt("message_id", msg.getId()); + ChatActivity chatActivity = new ChatActivity(args); + presentFragment(highlightFoundQuote(chatActivity, msg)); + } + }); + searchViewPager.botsSearchListView.setOnItemLongClickListener((view, position) -> { + Object obj = searchViewPager.botsSearchAdapter.getTopPeerObject(position); + if (obj instanceof TLRPC.User) { + final TLRPC.User user = (TLRPC.User) obj; + new AlertDialog.Builder(getContext(), resourceProvider) + .setTitle(getString(R.string.AppsClearSearch)) + .setMessage(formatString(R.string.AppsClearSearchAlert, "\"" + UserObject.getUserName(user) + "\"")) + .setNegativeButton(LocaleController.getString(R.string.Cancel), null) + .setPositiveButton(LocaleController.getString(R.string.Remove), (di, w) -> { + getMediaDataController().removeWebapp(user.id); + }) + .makeRed(DialogInterface.BUTTON_POSITIVE) + .show(); + } + return false; + }); searchViewPager.searchListView.setOnItemClickListener((view, position, x, y) -> { if (view instanceof ProfileSearchCell && ((ProfileSearchCell) view).isBlocked()) { showPremiumBlockedToast(view, ((ProfileSearchCell) view).getDialogId()); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/EmptyBaseFragment.java b/TMessagesProj/src/main/java/org/telegram/ui/EmptyBaseFragment.java new file mode 100644 index 00000000000..bad254242d4 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/EmptyBaseFragment.java @@ -0,0 +1,17 @@ +package org.telegram.ui; + +import android.content.Context; +import android.view.View; +import android.widget.FrameLayout; + +import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.Components.SizeNotifierFrameLayout; + +public class EmptyBaseFragment extends BaseFragment { + + @Override + public View createView(Context context) { + return fragmentView = new SizeNotifierFrameLayout(context); + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/FilteredSearchView.java b/TMessagesProj/src/main/java/org/telegram/ui/FilteredSearchView.java index 60eb82f4ab9..41d542f0978 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/FilteredSearchView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/FilteredSearchView.java @@ -1,5 +1,7 @@ package org.telegram.ui; +import static org.telegram.messenger.LocaleController.getString; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; @@ -439,6 +441,15 @@ public static CharSequence createFromInfoString(MessageObject messageObject, boo QuickRepliesController.QuickReply reply = QuickRepliesController.getInstance(messageObject.currentAccount).findReply(messageObject.getQuickReplyId()); return reply == null ? "" : reply.name; } + if (messageObject.isSponsored()) { + if (messageObject.sponsoredCanReport) { + return getString(R.string.SponsoredMessageAd); + } else if (messageObject.sponsoredRecommended) { + return getString(R.string.SponsoredMessage2Recommended); + } else { + return getString(R.string.SponsoredMessage2); + } + } if (arrowSpan[arrowType] == null) { arrowSpan[arrowType] = new SpannableStringBuilder(">"); int resId; @@ -1102,8 +1113,10 @@ private void onItemClick(int index, View view, MessageObject message, int a) { String link = null; if (webPage != null && !(webPage instanceof TLRPC.TL_webPageEmpty)) { if (webPage.cached_page != null) { - ArticleViewer.getInstance().setParentActivity(parentActivity, parentFragment); - ArticleViewer.getInstance().open(message); + if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab(message) != null) { + return; + } + parentFragment.createArticleViewer(false).open(message); return; } else if (webPage.embed_url != null && webPage.embed_url.length() != 0) { openWebView(webPage, message); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/GradientHeaderActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/GradientHeaderActivity.java index c0a6d5a9a07..0164040fbd5 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/GradientHeaderActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/GradientHeaderActivity.java @@ -87,8 +87,8 @@ protected int getThemeColorByKey(int key) { public int particlesViewHeight = -1; protected LinearLayoutManager layoutManager; protected boolean useFillLastLayoutManager = true; - private boolean isLandscapeMode; - private int statusBarHeight; + public boolean isLandscapeMode; + public int statusBarHeight; private int firstViewHeight; private final Paint headerBgPaint = new Paint(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java index 47be790694b..b56c9d777b6 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java @@ -8,6 +8,8 @@ package org.telegram.ui; +import static org.telegram.messenger.LocaleController.formatPluralString; +import static org.telegram.messenger.LocaleController.getString; import static org.telegram.ui.Components.Premium.LimitReachedBottomSheet.TYPE_ACCOUNTS; import static org.telegram.ui.Components.Premium.LimitReachedBottomSheet.TYPE_BOOSTS_FOR_USERS; @@ -36,8 +38,6 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.os.Debug; -import android.os.Environment; import android.os.Parcelable; import android.os.StatFs; import android.os.StrictMode; @@ -190,17 +190,25 @@ import org.telegram.ui.Components.UndoView; import org.telegram.ui.Components.spoilers.SpoilerEffect2; import org.telegram.ui.Components.voip.VoIPHelper; +import org.telegram.ui.Stars.ISuperRipple; import org.telegram.ui.Stars.StarsController; +import org.telegram.ui.Stars.StarsIntroActivity; +import org.telegram.ui.Stars.SuperRipple; +import org.telegram.ui.Stars.SuperRippleFallback; import org.telegram.ui.Stories.StoriesController; import org.telegram.ui.Stories.StoriesListPlaceProvider; import org.telegram.ui.Stories.StoryViewer; import org.telegram.ui.Stories.recorder.StoryRecorder; +import org.telegram.ui.Stories.recorder.Weather; import org.telegram.ui.bots.BotWebViewAttachedSheet; import org.telegram.ui.bots.BotWebViewSheet; +import org.telegram.ui.bots.WebViewRequestProps; import org.webrtc.voiceengine.WebRtcAudioTrack; import java.io.BufferedReader; import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -218,6 +226,8 @@ import java.util.function.Consumer; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; public class LaunchActivity extends BasePermissionsActivity implements INavigationLayout.INavigationLayoutDelegate, NotificationCenter.NotificationCenterDelegate, DialogsActivity.DialogsActivityDelegate { public final static String EXTRA_FORCE_NOT_INTERNAL_APPS = "force_not_internal_apps"; @@ -265,7 +275,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati private FrameLayout shadowTablet; private FrameLayout shadowTabletSide; private SizeNotifierFrameLayout backgroundTablet; - private FrameLayout frameLayout; + public FrameLayout frameLayout; private FireworksOverlay fireworksOverlay; private BottomSheetTabsOverlay bottomSheetTabsOverlay; public DrawerLayoutContainer drawerLayoutContainer; @@ -292,6 +302,10 @@ public Dialog getVisibleDialog() { return null; } + public FrameLayout getFrameLayout() { + return frameLayout; + } + private Dialog localeDialog; private boolean loadingLocaleDialog; private HashMap<String, String> systemLocaleStrings; @@ -322,6 +336,7 @@ public Dialog getVisibleDialog() { private static final int PLAY_SERVICES_REQUEST_CHECK_SETTINGS = 140; public static final int SCREEN_CAPTURE_REQUEST_CODE = 520; + public static final int WEBVIEW_SHARE_API_REQUEST_CODE = 521; public static final int BLUETOOTH_CONNECT_TYPE = 0; private SparseIntArray requestedPermissions = new SparseIntArray(); @@ -485,9 +500,9 @@ protected void onDraw(Canvas canvas) { } @Override - public void start() { + public void start(boolean withStars) { setVisibility(VISIBLE); - super.start(); + super.start(withStars); } @Override @@ -585,7 +600,7 @@ public boolean drawChild(Canvas canvas, View child, long drawingTime) { showAttachMenuBot(attachMenuBot, null, true); MediaDataController.getInstance(currentAccount).updateAttachMenuBotsInCache(); }), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors); - }, null); + }, null, null); } else { showAttachMenuBot(attachMenuBot, null, true); } @@ -999,7 +1014,7 @@ private void showAttachMenuBot(TLRPC.TL_attachMenuBot attachMenuBot, String star drawerLayoutContainer.closeDrawer(); BaseFragment lastFragment = getLastFragment(); if (lastFragment == null) return; - BotWebViewAttachedSheet.WebViewRequestProps props = BotWebViewAttachedSheet.WebViewRequestProps.of(currentAccount, attachMenuBot.bot_id, attachMenuBot.bot_id, attachMenuBot.short_name, null, BotWebViewSheet.TYPE_SIMPLE_WEB_VIEW_BUTTON, 0, false, null, false, startApp, null, BotWebViewSheet.FLAG_FROM_SIDE_MENU, false); + WebViewRequestProps props = WebViewRequestProps.of(currentAccount, attachMenuBot.bot_id, attachMenuBot.bot_id, attachMenuBot.short_name, null, BotWebViewAttachedSheet.TYPE_SIMPLE_WEB_VIEW_BUTTON, 0, false, null, false, startApp, null, BotWebViewSheet.FLAG_FROM_SIDE_MENU, false); if (getBottomSheetTabs() != null && getBottomSheetTabs().tryReopenTab(props) != null) { return; } @@ -1011,7 +1026,11 @@ private void showAttachMenuBot(TLRPC.TL_attachMenuBot attachMenuBot, String star webViewSheet.requestWebView(null, props); webViewSheet.show(); } else { - BotWebViewAttachedSheet webViewSheet = lastFragment.createBotViewer(); + BaseFragment fragment = lastFragment; + if (fragment.getParentLayout() instanceof ActionBarLayout) { + fragment = ((ActionBarLayout) fragment.getParentLayout()).getSheetFragment(); + } + BotWebViewAttachedSheet webViewSheet = fragment.createBotViewer(); webViewSheet.setNeedsContext(false); webViewSheet.setDefaultFullsize(sidemenu); webViewSheet.setParentActivity(this); @@ -1360,6 +1379,21 @@ public void checkSystemBarColors(boolean useCurrentFragment, boolean checkStatus boolean enable; if (currentFragment != null) { enable = currentFragment.isLightStatusBar(); + if (currentFragment.getParentLayout() instanceof ActionBarLayout) { + ActionBarLayout actionBarLayout1 = (ActionBarLayout) currentFragment.getParentLayout(); + if (actionBarLayout1.getSheetFragment(false) != null && actionBarLayout1.getSheetFragment(false).getLastSheet() != null) { +// BaseFragment sheetFragment = actionBarLayout1.getSheetFragment(false); + BaseFragment.AttachedSheet sheet = actionBarLayout1.getSheetFragment(false).getLastSheet(); + if (sheet.isShown()) { + enable = sheet.isAttachedLightStatusBar(); + } + } else if (currentFragment.sheetsStack != null && !currentFragment.sheetsStack.isEmpty()) { + BaseFragment.AttachedSheet sheet = currentFragment.sheetsStack.get(currentFragment.sheetsStack.size() - 1); + if (sheet.isShown()) { + enable = sheet.isAttachedLightStatusBar(); + } + } + } } else { int color = Theme.getColor(Theme.key_actionBarDefault, null, true); enable = ColorUtils.calculateLuminance(color) > 0.7f; @@ -1367,8 +1401,20 @@ public void checkSystemBarColors(boolean useCurrentFragment, boolean checkStatus AndroidUtilities.setLightStatusBar(getWindow(), enable, forceLightStatusBar); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && checkNavigationBar && (!useCurrentFragment || currentFragment == null || !currentFragment.isInPreviewMode())) { - final int color = currentFragment != null && useCurrentFragment ? currentFragment.getNavigationBarColor() : Theme.getColor(Theme.key_windowBackgroundGray, null, true); + int color = currentFragment != null && useCurrentFragment ? currentFragment.getNavigationBarColor() : Theme.getColor(Theme.key_windowBackgroundGray, null, true); + if (actionBarLayout.getSheetFragment(false) != null) { + BaseFragment sheetFragment = actionBarLayout.getSheetFragment(false); + if (sheetFragment.sheetsStack != null) { + for (int i = 0; i < sheetFragment.sheetsStack.size(); ++i) { + BaseFragment.AttachedSheet sheet = sheetFragment.sheetsStack.get(i); + if (sheet.attachedToParent()) { + color = sheet.getNavigationBarColor(color); + } + } + } + } setNavigationBarColor(color, checkButtons); + setLightNavigationBar(AndroidUtilities.computePerceivedBrightness(color) >= .721f); } } if ((SharedConfig.noStatusBar || forceLightStatusBar) && Build.VERSION.SDK_INT >= 21 && checkStatusBar) { @@ -1745,6 +1791,11 @@ private boolean handleIntent(Intent intent, boolean isNew, boolean restore, bool PhotoViewer.getInstance().closePhoto(false, true); } StoryRecorder.destroyInstance(); + dismissAllWeb(); + } + if (webviewShareAPIDoneListener != null) { + webviewShareAPIDoneListener.run(true); + webviewShareAPIDoneListener = null; } int flags = intent.getFlags(); String action = intent.getAction(); @@ -2125,10 +2176,18 @@ private boolean handleIntent(Intent intent, boolean isNew, boolean restore, bool String attachMenuBotToOpen = null; String attachMenuBotChoose = null; boolean botCompact = false; + boolean openProfile = false; int storyId = 0; final String scheme = data.getScheme(); if (scheme != null) { switch (scheme) { + case "tonsite": + Browser.openUrl(this, data); + intent.setAction(null); + if (progress != null) { + progress.end(); + } + return false; case "http": case "https": { String host = data.getHost().toLowerCase(); @@ -2361,6 +2420,7 @@ private boolean handleIntent(Intent intent, boolean isNew, boolean restore, bool attachMenuBotChoose = data.getQueryParameter("choose"); attachMenuBotToOpen = data.getQueryParameter("attach"); botCompact = TextUtils.equals(data.getQueryParameter("mode"), "compact"); + openProfile = data.getBooleanQueryParameter("profile", false); threadId = Utilities.parseLong(data.getQueryParameter("thread")); text = data.getQueryParameter("text"); if (data.getQuery() != null) { @@ -2411,6 +2471,7 @@ private boolean handleIntent(Intent intent, boolean isNew, boolean restore, bool } botAppMaybe = data.getQueryParameter("appname"); startApp = data.getQueryParameter("startapp"); + openProfile = data.getBooleanQueryParameter("profile", false); if ("telegrampassport".equals(username)) { username = null; auth = new HashMap<>(); @@ -2759,6 +2820,17 @@ private boolean handleIntent(Intent intent, boolean isNew, boolean restore, bool url = url.replace("tg:message", "tg://telegram.org").replace("tg://message", "tg://telegram.org"); data = Uri.parse(url); chatLinkSlug = data.getQueryParameter("slug"); + } else if (url.startsWith("tg:stars_topup") || url.startsWith("tg://stars_topup")) { + url = url.replace("tg:stars_topup", "tg://telegram.org").replace("tg://stars_topup", "tg://telegram.org"); + data = Uri.parse(url); + long balance = 0; + try { + balance = Long.parseLong(data.getQueryParameter("balance")); + } catch (Exception e) { + FileLog.e(e); + } + String purpose = data.getQueryParameter("purpose"); + StarsController.getInstance(intentAccount[0]).showStarsTopup(this, balance, purpose); } else { unsupportedUrl = url.replace("tg://", "").replace("tg:", ""); int index; @@ -2813,7 +2885,7 @@ private boolean handleIntent(Intent intent, boolean isNew, boolean restore, bool if (message != null && message.startsWith("@")) { message = " " + message; } - runLinkRequest(intentAccount[0], username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, login, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, 0, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, startApp, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, botCompact, openedTelegram); + runLinkRequest(intentAccount[0], username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, login, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, 0, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, startApp, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, botCompact, openedTelegram, openProfile); } else { try (Cursor cursor = getContentResolver().query(intent.getData(), null, null, null, null)) { if (cursor != null) { @@ -2945,6 +3017,7 @@ private boolean handleIntent(Intent intent, boolean isNew, boolean restore, bool ChatActivity fragment = new ChatActivity(args); if (getActionBarLayout().presentFragment(new INavigationLayout.NavigationParams(fragment).setNoAnimation(true))) { pushOpened = true; + LaunchActivity.dismissAllWeb(); drawerLayoutContainer.closeDrawer(); } } @@ -2980,6 +3053,7 @@ private boolean handleIntent(Intent intent, boolean isNew, boolean restore, bool } if (getActionBarLayout().presentFragment(new INavigationLayout.NavigationParams(fragment).setNoAnimation(true))) { pushOpened = true; + LaunchActivity.dismissAllWeb(); drawerLayoutContainer.closeDrawer(); } } @@ -2989,6 +3063,7 @@ private boolean handleIntent(Intent intent, boolean isNew, boolean restore, bool ChatActivity fragment = new ChatActivity(args); if (getActionBarLayout().presentFragment(new INavigationLayout.NavigationParams(fragment).setNoAnimation(true))) { pushOpened = true; + LaunchActivity.dismissAllWeb(); drawerLayoutContainer.closeDrawer(); } } else if (showDialogsList) { @@ -3512,6 +3587,69 @@ private void openTopicRequest(int intentAccount, int topicId, TLRPC.Chat chat, i } } + private String readImport(Uri uri) { + final String filename = FileLoader.fixFileName(MediaController.getFileName(uri)); + if (filename != null && filename.endsWith(".zip")) { + String content = null; + try { + try (ZipInputStream zis = new ZipInputStream(getContentResolver().openInputStream(uri))) { + ZipEntry zipEntry = zis.getNextEntry(); + while (zipEntry != null) { + if (zipEntry.getName().endsWith(".txt")) { + try { + int linesCount = 0; + BufferedReader r = new BufferedReader(new InputStreamReader(zis)); + StringBuilder total = new StringBuilder(); + for (String line; (line = r.readLine()) != null && linesCount < 100; ) { + total.append(line).append('\n'); + linesCount++; + } + content = total.toString(); + } catch (Exception e) { + FileLog.e(e); + return null; + } + break; + } + zipEntry = zis.getNextEntry(); + } + zis.closeEntry(); + } catch (IOException e) { + FileLog.e(e); + } + } catch (Exception e2) { + FileLog.e(e2); + } + return content; + } else { + String content; + InputStream inputStream = null; + try { + int linesCount = 0; + inputStream = getContentResolver().openInputStream(uri); + BufferedReader r = new BufferedReader(new InputStreamReader(inputStream)); + StringBuilder total = new StringBuilder(); + for (String line; (line = r.readLine()) != null && linesCount < 100; ) { + total.append(line).append('\n'); + linesCount++; + } + content = total.toString(); + } catch (Exception e) { + FileLog.e(e); + return null; + } finally { + try { + if (inputStream != null) { + inputStream.close(); + } + } catch (Exception e2) { + FileLog.e(e2); + } + } + return content; + } + } + private void runImportRequest(final Uri importUri, ArrayList<Uri> documents) { final int intentAccount = UserConfig.selectedAccount; @@ -3519,30 +3657,8 @@ private void runImportRequest(final Uri importUri, final int[] requestId = new int[]{0}; Runnable cancelRunnable = null; - String content; - InputStream inputStream = null; - try { - int linesCount = 0; - inputStream = getContentResolver().openInputStream(importUri); - BufferedReader r = new BufferedReader(new InputStreamReader(inputStream)); - StringBuilder total = new StringBuilder(); - for (String line; (line = r.readLine()) != null && linesCount < 100; ) { - total.append(line).append('\n'); - linesCount++; - } - content = total.toString(); - } catch (Exception e) { - FileLog.e(e); - return; - } finally { - try { - if (inputStream != null) { - inputStream.close(); - } - } catch (Exception e2) { - FileLog.e(e2); - } - } + String content = readImport(importUri); + if (content == null) return; final TLRPC.TL_messages_checkHistoryImport req = new TLRPC.TL_messages_checkHistoryImport(); req.import_head = content; requestId[0] = ConnectionsManager.getInstance(intentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> { @@ -3769,9 +3885,9 @@ private void runLinkRequest(final int intentAccount, final boolean forceNotInternalForApps, final int storyId, final boolean isBoost, - final String chatLinkSlug, boolean botCompact, boolean openedTelegram) { + final String chatLinkSlug, boolean botCompact, boolean openedTelegram, boolean openProfile) { if (state == 0 && ChatActivity.SCROLL_DEBUG_DELAY && progress != null) { - Runnable runnable = () -> runLinkRequest(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, 1, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, botCompact, openedTelegram); + Runnable runnable = () -> runLinkRequest(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, 1, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, botCompact, openedTelegram, openProfile); progress.init(); progress.onCancel(() -> AndroidUtilities.cancelRunOnUIThread(runnable)); AndroidUtilities.runOnUIThread(runnable, 7500); @@ -3781,7 +3897,7 @@ private void runLinkRequest(final int intentAccount, if (account != intentAccount) { switchToAccount(account, true); } - runLinkRequest(account, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, 1, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, botCompact, openedTelegram); + runLinkRequest(account, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, 1, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, botCompact, openedTelegram, openProfile); }).show(); return; } else if (code != null) { @@ -3972,7 +4088,7 @@ private void runLinkRequest(final int intentAccount, getAttachMenuBot.bot = MessagesController.getInstance(intentAccount).getInputUser(peerId); ConnectionsManager.getInstance(intentAccount).sendRequest(getAttachMenuBot, (response1, error1) -> AndroidUtilities.runOnUIThread(() -> { if (error1 != null) { - AndroidUtilities.runOnUIThread(() -> runLinkRequest(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, null, null, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, botCompact, openedTelegram)); + AndroidUtilities.runOnUIThread(() -> runLinkRequest(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, null, null, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, botCompact, openedTelegram, openProfile)); } else if (response1 instanceof TLRPC.TL_attachMenuBotsBot) { TLRPC.TL_attachMenuBotsBot bot = (TLRPC.TL_attachMenuBotsBot) response1; TLRPC.TL_attachMenuBot attachBot = bot.bot; @@ -3993,8 +4109,8 @@ private void runLinkRequest(final int intentAccount, } }), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors); - processWebAppBot(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, user, dismissLoading, botAttachable, true, botCompact, openedTelegram); - }, null); + processWebAppBot(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, user, dismissLoading, botAttachable, true, botCompact, openedTelegram, openProfile); + }, null, progress != null ? progress::end : null); } else if (attachBot.request_write_access || forceNotInternalForApps) { AtomicBoolean allowWrite = new AtomicBoolean(true); AlertsCreator.createBotLaunchAlert(getLastFragment(), allowWrite, user, () -> { @@ -4011,15 +4127,15 @@ private void runLinkRequest(final int intentAccount, } }), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors); - processWebAppBot(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, user, dismissLoading, false, false, botCompact, openedTelegram); + processWebAppBot(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, user, dismissLoading, false, false, botCompact, openedTelegram, openProfile); }); } else { - processWebAppBot(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, user, dismissLoading, false, false, botCompact, openedTelegram); + processWebAppBot(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, user, dismissLoading, false, false, botCompact, openedTelegram, openProfile); } } })); } else { - processWebAppBot(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, user, dismissLoading, false, false, botCompact, openedTelegram); + processWebAppBot(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, botAppMaybe, botAppStartParam, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, user, dismissLoading, false, false, botCompact, openedTelegram, openProfile); } return; } @@ -4033,7 +4149,12 @@ private void runLinkRequest(final int intentAccount, } } - if ((setAsAttachBot != null || botAppStartParam != null) && attachMenuBotToOpen == null) { + if (botAppStartParam != null) { + TLRPC.User user = MessagesController.getInstance(intentAccount).getUser(peerId); + if (user != null && user.bot) { + MessagesController.getInstance(intentAccount).openApp(null, user, 0, progress); + } + } else if (setAsAttachBot != null && attachMenuBotToOpen == null) { TLRPC.User user = MessagesController.getInstance(intentAccount).getUser(peerId); if (user != null && user.bot) { if (user.bot_attach_menu) { @@ -4312,7 +4433,21 @@ public void didChangeOwner(TLRPC.User user) { ((ChatActivity) lastFragment).openAttachBotLayout(attachMenuBotToOpen); } else { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-dialog_id); - if (chat != null && chat.forum) { + if (openProfile) { + try { + dismissLoading.run(); + } catch (Exception e) { + FileLog.e(e); + } + if (LaunchActivity.this.isFinishing()) return; + Bundle profile_args = new Bundle(); + if (peerId < 0) { + profile_args.putLong("chat_id", -peerId); + } else { + profile_args.putLong("user_id", peerId); + } + getActionBarLayout().presentFragment(new ProfileActivity(profile_args)); + } else if (chat != null && chat.forum) { Long topicId = threadId; if (topicId == null && messageId != null) { topicId = (long) (int) messageId; @@ -4501,6 +4636,26 @@ public void onError() { } } + } else if (invite.subscription_pricing != null && !invite.can_refulfill_subscription) { + final long stars = invite.subscription_pricing.amount; + MessagesController.getInstance(intentAccount).putChat(invite.chat, false); + StarsController.getInstance(currentAccount).subscribeTo(group, invite, (status, dialogId) -> { + if ("paid".equals(status) && dialogId != 0) { + AndroidUtilities.runOnUIThread(() -> { + BaseFragment lastFragment = getSafeLastFragment(); + if (lastFragment == null) return; + BaseFragment chatActivity = ChatActivity.of(dialogId); + lastFragment.presentFragment(chatActivity); + + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-dialogId); + if (chat != null) { + AndroidUtilities.runOnUIThread(() -> { + BulletinFactory.of(chatActivity).createSimpleBulletin(R.raw.stars_send, getString(R.string.StarsSubscriptionCompleted), AndroidUtilities.replaceTags(formatPluralString("StarsSubscriptionCompletedText", (int) stars, chat.title))).show(true); + }, 250); + } + }); + } + }); } else { BaseFragment fragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1); fragment.showDialog(new JoinGroupAlert(LaunchActivity.this, invite, group, fragment, (fragment instanceof ChatActivity ? ((ChatActivity) fragment).themeDelegate : null))); @@ -4640,7 +4795,7 @@ public void onError() { }); presentFragment(fragment, false, true); } else if (auth != null) { - final int bot_id = Utilities.parseInt(auth.get("bot_id")); + final long bot_id = Utilities.parseLong(auth.get("bot_id")); if (bot_id == 0) { return; } @@ -5035,7 +5190,7 @@ private void processWebAppBot(final int intentAccount, final boolean isBoost, final String chatLinkSlug, TLRPC.User user, - Runnable dismissLoading, boolean botAttachable, boolean ignoreInactive, boolean botCompact, boolean openedTelegram) { + Runnable dismissLoading, boolean botAttachable, boolean ignoreInactive, boolean botCompact, boolean openedTelegram, boolean openProfile) { TLRPC.TL_messages_getBotApp getBotApp = new TLRPC.TL_messages_getBotApp(); TLRPC.TL_inputBotAppShortName app = new TLRPC.TL_inputBotAppShortName(); @@ -5047,7 +5202,7 @@ private void processWebAppBot(final int intentAccount, progress.end(); } if (error1 != null) { - AndroidUtilities.runOnUIThread(() -> runLinkRequest(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, null, null, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, botCompact, openedTelegram)); + AndroidUtilities.runOnUIThread(() -> runLinkRequest(intentAccount, username, group, sticker, emoji, botUser, botChat, botChannel, botChatAdminParams, message, contactToken, folderSlug, text, hasUrl, messageId, channelId, threadId, commentId, game, auth, lang, unsupportedUrl, code, loginToken, wallPaper, inputInvoiceSlug, theme, voicechat, videochat, livestream, state, videoTimestamp, setAsAttachBot, attachMenuBotToOpen, attachMenuBotChoose, null, null, progress, forceNotInternalForApps, storyId, isBoost, chatLinkSlug, botCompact, openedTelegram, openProfile)); } else { TLRPC.TL_messages_botApp botApp = (TLRPC.TL_messages_botApp) response1; AndroidUtilities.runOnUIThread(() -> { @@ -5057,7 +5212,7 @@ private void processWebAppBot(final int intentAccount, BaseFragment lastFragment = mainFragmentsStack == null || mainFragmentsStack.isEmpty() ? null : mainFragmentsStack.get(mainFragmentsStack.size() - 1); Runnable loadBotSheet = () -> { if (lastFragment == null || !isActive || isFinishing() || isDestroyed()) return; - BotWebViewAttachedSheet.WebViewRequestProps props = BotWebViewAttachedSheet.WebViewRequestProps.of(intentAccount, user.id, user.id, null, null, BotWebViewSheet.TYPE_WEB_VIEW_BOT_APP, 0, false, botApp.app, allowWrite.get(), botAppStartParam, user, 0, botCompact); + WebViewRequestProps props = WebViewRequestProps.of(intentAccount, user.id, user.id, null, null, BotWebViewAttachedSheet.TYPE_WEB_VIEW_BOT_APP, 0, false, botApp.app, allowWrite.get(), botAppStartParam, user, 0, botCompact); if (getBottomSheetTabs() != null && getBottomSheetTabs().tryReopenTab(props) != null) { return; } @@ -5073,12 +5228,16 @@ private void processWebAppBot(final int intentAccount, sheet.showJustAddedBulletin(); } } else { - BotWebViewAttachedSheet sheet = lastFragment.createBotViewer(); + BaseFragment fragment = lastFragment; + if (fragment.getParentLayout() instanceof ActionBarLayout) { + fragment = ((ActionBarLayout) fragment.getParentLayout()).getSheetFragment(); + } + BotWebViewAttachedSheet sheet = fragment.createBotViewer(); sheet.setWasOpenedByLinkIntent(openedTelegram); sheet.setDefaultFullsize(!botCompact); sheet.setNeedsContext(false); sheet.setParentActivity(LaunchActivity.this); - sheet.requestWebView(lastFragment, props); + sheet.requestWebView(fragment, props); sheet.show(); if (botApp.inactive || forceNotInternalForApps) { sheet.showJustAddedBulletin(); @@ -5091,7 +5250,7 @@ private void processWebAppBot(final int intentAccount, } else if (botApp.inactive && botAttachable) { WebAppDisclaimerAlert.show(this, (allowSendMessage) -> { loadBotSheet.run(); - }, null); + }, null, progress != null ? progress::end : null); } else if (botApp.request_write_access || forceNotInternalForApps) { AlertsCreator.createBotLaunchAlert(lastFragment, allowWrite, user, loadBotSheet); } else { @@ -5324,7 +5483,7 @@ private void processAttachMenuBot(int intentAccount, long peerId, String attachM }); } }), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors); - }, attachMenuBot.request_write_access ? user : null); + }, attachMenuBot.request_write_access ? user : null, null); } } else { BulletinFactory.of(mainFragmentsStack.get(mainFragmentsStack.size() - 1)).createErrorBulletin(LocaleController.getString(R.string.BotCantAddToAttachMenu)).show(); @@ -5994,6 +6153,11 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { } } else if (requestCode == PLAY_SERVICES_REQUEST_CHECK_SETTINGS) { LocationController.getInstance(currentAccount).startFusedLocationRequest(resultCode == Activity.RESULT_OK); + } else if (requestCode == WEBVIEW_SHARE_API_REQUEST_CODE) { + if (webviewShareAPIDoneListener != null) { + webviewShareAPIDoneListener.run(resultCode == RESULT_OK); + webviewShareAPIDoneListener = null; + } } else { ThemeEditorView editorView = ThemeEditorView.getInstance(); if (editorView != null) { @@ -6022,6 +6186,11 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { } } + private Utilities.Callback<Boolean> webviewShareAPIDoneListener; + public void whenWebviewShareAPIDone(Utilities.Callback<Boolean> listener) { + webviewShareAPIDoneListener = listener; + } + @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); @@ -6046,6 +6215,9 @@ public void onRequestPermissionsResult(int requestCode, String[] permissions, in VoIPFragment.onRequestPermissionsResult(requestCode, permissions, grantResults); StoryRecorder.onRequestPermissionsResult(requestCode, permissions, grantResults); NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.onRequestPermissionResultReceived, requestCode, permissions, grantResults); + if (requestCode == Weather.LOCATION_REQUEST) { + Weather.receivePermissionIntent(permissions, grantResults); + } if (requestedPermissions.get(requestCode, -1) >= 0) { int type = requestedPermissions.get(requestCode, -1); @@ -6280,8 +6452,14 @@ protected void onResume() { if (ApplicationLoader.applicationLoaderInstance != null) { ApplicationLoader.applicationLoaderInstance.onResume(); } + if (whenResumed != null) { + whenResumed.run(); + whenResumed = null; + } } + public static Runnable whenResumed; + private void invalidateTabletMode() { Boolean wasTablet = AndroidUtilities.getWasTablet(); if (wasTablet == null) { @@ -6531,8 +6709,11 @@ public void updateDrawState(@NonNull TextPaint ds) { if (mainFragmentsStack.isEmpty()) { return; } - ArticleViewer.getInstance().setParentActivity(this, mainFragmentsStack.get(mainFragmentsStack.size() - 1)); - ArticleViewer.getInstance().open((TLRPC.TL_webPage) args[0], (String) args[1]); + if (LaunchActivity.instance != null && LaunchActivity.instance.getBottomSheetTabs() != null && LaunchActivity.instance.getBottomSheetTabs().tryReopenTab((TLRPC.TL_webPage) args[0]) != null) { + return; + } + BaseFragment fragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1); + fragment.createArticleViewer(false).open((TLRPC.TL_webPage) args[0], (String) args[1]); } else if (id == NotificationCenter.hasNewContactsToImport) { if (actionBarLayout == null || actionBarLayout.getFragmentStack().isEmpty()) { return; @@ -7610,14 +7791,14 @@ public boolean dispatchKeyEvent(KeyEvent event) { } } else if (!mainFragmentsStack.isEmpty() && (!PhotoViewer.hasInstance() || !PhotoViewer.getInstance().isVisible()) && event.getRepeatCount() == 0) { BaseFragment fragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1); - if (fragment instanceof ChatActivity) { + if (fragment instanceof ChatActivity && !BaseFragment.hasSheets(fragment)) { if (((ChatActivity) fragment).maybePlayVisibleVideo()) { return true; } } if (AndroidUtilities.isTablet() && !rightFragmentsStack.isEmpty()) { fragment = rightFragmentsStack.get(rightFragmentsStack.size() - 1); - if (fragment instanceof ChatActivity) { + if (fragment instanceof ChatActivity && !BaseFragment.hasSheets(fragment)) { if (((ChatActivity) fragment).maybePlayVisibleVideo()) { return true; } @@ -8276,4 +8457,50 @@ private void openStories(long[] dialogIds, boolean requestWhenNeeded) { } } } + + public static void dismissAllWeb() { + BaseFragment lastFragment = getSafeLastFragment(); + if (lastFragment == null) return; + + BaseFragment sheetFragment = + lastFragment.getParentLayout() instanceof ActionBarLayout ? + ((ActionBarLayout) lastFragment.getParentLayout()).getSheetFragment(false) : + null; + + if (sheetFragment != null && sheetFragment.sheetsStack != null) { + for (int i = sheetFragment.sheetsStack.size() - 1; i >= 0; --i) { + BaseFragment.AttachedSheet sheet = sheetFragment.sheetsStack.get(i); + sheet.dismiss(true); + } + } + if (lastFragment != null && lastFragment.sheetsStack != null) { + for (int i = lastFragment.sheetsStack.size() - 1; i >= 0; --i) { + BaseFragment.AttachedSheet sheet = lastFragment.sheetsStack.get(i); + sheet.dismiss(true); + } + } + } + + public static void makeRipple(float x, float y, float intensity) { + if (instance == null) return; + instance.makeRippleInternal(x, y, intensity); + } + + private ISuperRipple currentRipple; + private void makeRippleInternal(float x, float y, float intensity) { + View parent = getWindow().getDecorView(); + if (parent == null) return; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + if (currentRipple == null || currentRipple.view != parent) { + currentRipple = new SuperRipple(parent); + } + } else if (Build.VERSION.SDK_INT >= 26) { + if (currentRipple == null || currentRipple.view != parent) { + currentRipple = new SuperRippleFallback(parent); + } + } + if (currentRipple != null) { + currentRipple.animate(x, y, intensity); + } + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LinkEditActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LinkEditActivity.java index 1b503e1dc93..4c038b5fb22 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LinkEditActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LinkEditActivity.java @@ -1,5 +1,9 @@ package org.telegram.ui; +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.LocaleController.formatString; +import static org.telegram.messenger.LocaleController.getString; + import android.animation.LayoutTransition; import android.annotation.SuppressLint; import android.content.Context; @@ -17,14 +21,21 @@ import android.view.MotionEvent; import android.view.View; import android.widget.EditText; +import android.widget.FrameLayout; +import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.TextView; import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.BillingController; +import org.telegram.messenger.ChatObject; import org.telegram.messenger.Emoji; +import org.telegram.messenger.FileLog; import org.telegram.messenger.LocaleController; +import org.telegram.messenger.MessagesController; import org.telegram.messenger.R; +import org.telegram.messenger.browser.Browser; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.ActionBar; @@ -33,14 +44,18 @@ import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.ActionBar.ThemeDescription; +import org.telegram.ui.Cells.EditTextCell; import org.telegram.ui.Cells.HeaderCell; import org.telegram.ui.Cells.TextCheckCell; import org.telegram.ui.Cells.TextInfoPrivacyCell; import org.telegram.ui.Cells.TextSettingsCell; import org.telegram.ui.Components.AlertsCreator; +import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.SizeNotifierFrameLayout; import org.telegram.ui.Components.SlideChooseView; +import org.telegram.ui.Stars.StarsController; +import org.telegram.ui.Stories.recorder.KeyboardNotifier; import java.util.ArrayList; @@ -56,18 +71,25 @@ public class LinkEditActivity extends BaseFragment { TLRPC.TL_chatInviteExported inviteToEdit; private TextCheckCell approveCell; + private TextInfoPrivacyCell approveHintCell; + private TextCheckCell subCell; + private EditTextCell subEditPriceCell; + private TextView subPriceView; + private TextInfoPrivacyCell subInfoCell; private TextView timeEditText; private HeaderCell timeHeaderCell; private TextInfoPrivacyCell divider; private HeaderCell usesHeaderCell; private EditText usesEditText; private TextInfoPrivacyCell dividerUses; + private FrameLayout buttonLayout; private TextView buttonTextView; private TextSettingsCell revokeLink; private ScrollView scrollView; private EditText nameEditText; private TextInfoPrivacyCell dividerName; private TextView createTextView; + private int shakeDp = -3; private boolean ignoreSet; private boolean finished; @@ -96,9 +118,9 @@ public View createView(Context context) { actionBar.setBackButtonImage(R.drawable.ic_ab_back); actionBar.setAllowOverlayTitle(true); if (type == CREATE_TYPE) { - actionBar.setTitle(LocaleController.getString("NewLink", R.string.NewLink)); + actionBar.setTitle(getString("NewLink", R.string.NewLink)); } else if (type == EDIT_TYPE) { - actionBar.setTitle(LocaleController.getString("EditLink", R.string.EditLink)); + actionBar.setTitle(getString("EditLink", R.string.EditLink)); } actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { @Override @@ -116,85 +138,83 @@ public void onItemClick(int id) { createTextView.setOnClickListener(this::onCreateClicked); createTextView.setSingleLine(); if (type == CREATE_TYPE) { - createTextView.setText(LocaleController.getString("CreateLinkHeader", R.string.CreateLinkHeader)); + createTextView.setText(getString("CreateLinkHeader", R.string.CreateLinkHeader)); } else if (type == EDIT_TYPE) { - createTextView.setText(LocaleController.getString("SaveLinkHeader", R.string.SaveLinkHeader)); + createTextView.setText(getString("SaveLinkHeader", R.string.SaveLinkHeader)); } createTextView.setTextColor(Theme.getColor(Theme.key_actionBarDefaultTitle)); createTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14f); createTextView.setTypeface(AndroidUtilities.bold()); - createTextView.setPadding(AndroidUtilities.dp(18), AndroidUtilities.dp(8), AndroidUtilities.dp(18), AndroidUtilities.dp(8)); - int topSpace = actionBar.getOccupyStatusBar() ? (AndroidUtilities.statusBarHeight / AndroidUtilities.dp(2)) : 0; + createTextView.setPadding(dp(18), dp(8), dp(18), dp(8)); + int topSpace = actionBar.getOccupyStatusBar() ? (AndroidUtilities.statusBarHeight / dp(2)) : 0; actionBar.addView(createTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.END | Gravity.CENTER_VERTICAL, 0, topSpace, 0, 0)); scrollView = new ScrollView(context); SizeNotifierFrameLayout contentView = new SizeNotifierFrameLayout(context) { - int oldKeyboardHeight; - - @Override - protected AdjustPanLayoutHelper createAdjustPanLayoutHelper() { - AdjustPanLayoutHelper panLayoutHelper = new AdjustPanLayoutHelper(this) { - - @Override - protected void onTransitionStart(boolean keyboardVisible, int contentHeight) { - super.onTransitionStart(keyboardVisible, contentHeight); - scrollView.getLayoutParams().height = contentHeight; - } - - @Override - protected void onTransitionEnd() { - super.onTransitionEnd(); - scrollView.getLayoutParams().height = LinearLayout.LayoutParams.MATCH_PARENT; - scrollView.requestLayout(); - } - - @Override - protected void onPanTranslationUpdate(float y, float progress, boolean keyboardVisible) { - super.onPanTranslationUpdate(y, progress, keyboardVisible); - setTranslationY(0); - } - - @Override - protected boolean heightAnimationEnabled() { - return !finished; - } - }; - panLayoutHelper.setCheckHierarchyHeight(true); - return panLayoutHelper; - } - - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - adjustPanLayoutHelper.onAttach(); - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - adjustPanLayoutHelper.onDetach(); - } +// int oldKeyboardHeight; +// +// @Override +// protected AdjustPanLayoutHelper createAdjustPanLayoutHelper() { +// AdjustPanLayoutHelper panLayoutHelper = new AdjustPanLayoutHelper(this) { +// @Override +// protected void onTransitionStart(boolean keyboardVisible, int contentHeight) { +// super.onTransitionStart(keyboardVisible, contentHeight); +// scrollView.getLayoutParams().height = contentHeight; +// } +// @Override +// protected void onTransitionEnd() { +// super.onTransitionEnd(); +// scrollView.getLayoutParams().height = LinearLayout.LayoutParams.MATCH_PARENT; +// scrollView.requestLayout(); +// } +// @Override +// protected void onPanTranslationUpdate(float y, float progress, boolean keyboardVisible) { +// super.onPanTranslationUpdate(y, progress, keyboardVisible); +// setTranslationY(0); +// buttonLayout.setTranslationY(y); +// } +// @Override +// protected boolean heightAnimationEnabled() { +// return !finished; +// } +// }; +// panLayoutHelper.setCheckHierarchyHeight(true); +// return panLayoutHelper; +// } +// +// @Override +// protected void onAttachedToWindow() { +// super.onAttachedToWindow(); +// adjustPanLayoutHelper.onAttach(); +// } +// +// @Override +// protected void onDetachedFromWindow() { +// super.onDetachedFromWindow(); +// adjustPanLayoutHelper.onDetach(); +// } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); measureKeyboardHeight(); - boolean isNeedScrollToEnd = usesEditText.isCursorVisible() || nameEditText.isCursorVisible(); - if (oldKeyboardHeight != keyboardHeight && keyboardHeight > AndroidUtilities.dp(20) && isNeedScrollToEnd) { - scrollToEnd = true; - invalidate(); - } else if (scrollView.getScrollY() == 0 && !isNeedScrollToEnd) { - scrollToStart = true; - invalidate(); - } - - if (keyboardHeight != 0 && keyboardHeight < AndroidUtilities.dp(20)) { +// boolean isNeedScrollToEnd = usesEditText.isCursorVisible() || nameEditText.isCursorVisible(); +// if (oldKeyboardHeight != keyboardHeight && keyboardHeight > dp(20) && isNeedScrollToEnd) { +// scrollToEnd = true; +// invalidate(); +// } else if (scrollView.getScrollY() == 0 && !isNeedScrollToEnd) { +// scrollToStart = true; +// invalidate(); +// } + + if (keyboardHeight != 0 && keyboardHeight < dp(20)) { usesEditText.clearFocus(); nameEditText.clearFocus(); } + buttonLayout.setVisibility(keyboardHeight > dp(20) ? GONE : VISIBLE); - oldKeyboardHeight = keyboardHeight; +// oldKeyboardHeight = keyboardHeight; } @Override @@ -228,33 +248,33 @@ protected void dispatchDraw(Canvas canvas) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { +// super.onMeasure(widthMeasureSpec, heightMeasureSpec); +// int elementsHeight = 0; +// int h = MeasureSpec.getSize(heightMeasureSpec); +// for (int i = 0; i < getChildCount(); i++) { +// View child = getChildAt(i); +// if (child != buttonTextView && child.getVisibility() != View.GONE) { +// elementsHeight += child.getMeasuredHeight(); +// } +// } +// elementsHeight += dp(79); +// +// int topMargin; +// int buttonH = dp(48) + dp(24) + dp(16); +// if (elementsHeight >= h - buttonH) { +// topMargin = dp(24); +// } else { +// topMargin = dp(24) + (h - buttonH) - elementsHeight; +// } +// +// if (((LayoutParams) buttonLayout.getLayoutParams()).topMargin != topMargin) { +// int oldMargin = ((LayoutParams) buttonLayout.getLayoutParams()).topMargin; +// ((LayoutParams) buttonLayout.getLayoutParams()).topMargin = topMargin; +// if (!firstLayout) { +// buttonLayout.setTranslationY(oldMargin - topMargin); +// buttonLayout.animate().translationY(0).setDuration(AdjustPanLayoutHelper.keyboardDuration).setInterpolator(AdjustPanLayoutHelper.keyboardInterpolator).start(); +// } super.onMeasure(widthMeasureSpec, heightMeasureSpec); - int elementsHeight = 0; - int h = MeasureSpec.getSize(heightMeasureSpec); - for (int i = 0; i < getChildCount(); i++) { - View child = getChildAt(i); - if (child != buttonTextView && child.getVisibility() != View.GONE) { - elementsHeight += child.getMeasuredHeight(); - } - } - - int topMargin; - int buttonH = AndroidUtilities.dp(48) + AndroidUtilities.dp(24) + AndroidUtilities.dp(16); - if (elementsHeight >= h - buttonH) { - topMargin = AndroidUtilities.dp(24); - } else { - topMargin = AndroidUtilities.dp(24) + (h - buttonH) - elementsHeight; - } - - if (((LayoutParams) buttonTextView.getLayoutParams()).topMargin != topMargin) { - int oldMargin = ((LayoutParams) buttonTextView.getLayoutParams()).topMargin; - ((LayoutParams) buttonTextView.getLayoutParams()).topMargin = topMargin; - if (!firstLayout) { - buttonTextView.setTranslationY(oldMargin - topMargin); - buttonTextView.animate().translationY(0).setDuration(AdjustPanLayoutHelper.keyboardDuration).setInterpolator(AdjustPanLayoutHelper.keyboardInterpolator).start(); - } - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } } @Override @@ -264,28 +284,32 @@ protected void dispatchDraw(Canvas canvas) { } }; LayoutTransition transition = new LayoutTransition(); - transition.setDuration(100); + transition.setDuration(420); + transition.setInterpolator(LayoutTransition.APPEARING, CubicBezierInterpolator.EASE_OUT_QUINT); + transition.setInterpolator(LayoutTransition.CHANGE_APPEARING, CubicBezierInterpolator.EASE_OUT_QUINT); + transition.setInterpolator(LayoutTransition.CHANGING, CubicBezierInterpolator.EASE_OUT_QUINT); + transition.setInterpolator(LayoutTransition.CHANGE_DISAPPEARING, CubicBezierInterpolator.EASE_OUT_QUINT); + transition.setInterpolator(LayoutTransition.DISAPPEARING, CubicBezierInterpolator.EASE_OUT_QUINT); linearLayout.setLayoutTransition(transition); linearLayout.setOrientation(LinearLayout.VERTICAL); + linearLayout.setPadding(0, 0, 0, dp(79)); scrollView.addView(linearLayout); buttonTextView = new TextView(context); - buttonTextView.setPadding(AndroidUtilities.dp(34), 0, AndroidUtilities.dp(34), 0); + buttonTextView.setPadding(dp(34), 0, dp(34), 0); buttonTextView.setGravity(Gravity.CENTER); buttonTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); buttonTextView.setTypeface(AndroidUtilities.bold()); if (type == CREATE_TYPE) { - buttonTextView.setText(LocaleController.getString("CreateLink", R.string.CreateLink)); + buttonTextView.setText(getString("CreateLink", R.string.CreateLink)); } else if (type == EDIT_TYPE) { - buttonTextView.setText(LocaleController.getString("SaveLink", R.string.SaveLink)); + buttonTextView.setText(getString("SaveLink", R.string.SaveLink)); } TLRPC.Chat chatLocal = getMessagesController().getChat(chatId); - boolean hasApproveCell = false; if (chatLocal == null || chatLocal.username == null) { - hasApproveCell = true; approveCell = new TextCheckCell(context) { @Override protected void onDraw(Canvas canvas) { @@ -300,37 +324,148 @@ protected void onDraw(Canvas canvas) { approveCell.setDrawCheckRipple(true); approveCell.setHeight(56); approveCell.setTag(Theme.key_windowBackgroundUnchecked); - approveCell.setTextAndCheck(LocaleController.getString("ApproveNewMembers", R.string.ApproveNewMembers), false, false); + approveCell.setTextAndCheck(getString(R.string.ApproveNewMembers), false, false); approveCell.setTypeface(AndroidUtilities.bold()); approveCell.setOnClickListener(view -> { + if (subCell != null && subCell.isChecked()) { + AndroidUtilities.shakeViewSpring(subCell, shakeDp = -shakeDp); + return; + } + TextCheckCell cell = (TextCheckCell) view; boolean newIsChecked = !cell.isChecked(); cell.setBackgroundColorAnimated(newIsChecked, Theme.getColor(newIsChecked ? Theme.key_windowBackgroundChecked : Theme.key_windowBackgroundUnchecked)); cell.setChecked(newIsChecked); setUsesVisible(!newIsChecked); firstLayout = true; + + if (subCell != null) { + if (cell.isChecked()) { + subCell.setChecked(false); + subCell.setCheckBoxIcon(R.drawable.permission_locked); + subEditPriceCell.setVisibility(View.GONE); + } else if (inviteToEdit == null) { + subCell.setCheckBoxIcon(0); + } + } }); linearLayout.addView(approveCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 56)); - } - TextInfoPrivacyCell hintCell = new TextInfoPrivacyCell(context); - hintCell.setBackground(Theme.getThemedDrawableByKey(context, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); - if (hasApproveCell) { - hintCell.setText(LocaleController.getString("ApproveNewMembersDescription", R.string.ApproveNewMembersDescription)); + approveHintCell = new TextInfoPrivacyCell(context); + approveHintCell.setBackground(Theme.getThemedDrawableByKey(context, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); + approveHintCell.setText(getString(R.string.ApproveNewMembersDescription)); + linearLayout.addView(approveHintCell); + + TLRPC.ChatFull chatFull = MessagesController.getInstance(currentAccount).getChatFull(chatId); + if (inviteToEdit == null && ChatObject.isChannelAndNotMegaGroup(MessagesController.getInstance(currentAccount).getChat(chatId)) && chatFull != null && chatFull.paid_media_allowed || inviteToEdit != null && inviteToEdit.subscription_pricing != null) { + subCell = new TextCheckCell(context); + subCell.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + subCell.setDrawCheckRipple(true); + subCell.setTextAndCheck(getString(R.string.RequireMonthlyFee), false, true); + if (inviteToEdit != null) { + subCell.setCheckBoxIcon(R.drawable.permission_locked); + subCell.setEnabled(false); + } + final Runnable[] keyboardUpdate = new Runnable[1]; + subCell.setOnClickListener(view -> { + if (inviteToEdit != null) { + return; + } + if (approveCell.isChecked()) { + AndroidUtilities.shakeViewSpring(approveCell, shakeDp = -shakeDp); + return; + } + + TextCheckCell cell = (TextCheckCell) view; + cell.setChecked(!cell.isChecked()); + subEditPriceCell.setVisibility(cell.isChecked() ? View.VISIBLE : View.GONE); + AndroidUtilities.cancelRunOnUIThread(keyboardUpdate[0]); + if (cell.isChecked()) { + approveCell.setChecked(false); + approveCell.setCheckBoxIcon(R.drawable.permission_locked); + approveHintCell.setText(getString(R.string.ApproveNewMembersDescriptionFrozen)); + AndroidUtilities.runOnUIThread(keyboardUpdate[0] = () -> { + subEditPriceCell.editText.requestFocus(); + AndroidUtilities.showKeyboard(subEditPriceCell.editText); + }, 60); + } else { + approveCell.setCheckBoxIcon(0); + approveHintCell.setText(getString(R.string.ApproveNewMembersDescription)); + AndroidUtilities.runOnUIThread(keyboardUpdate[0] = () -> { + subEditPriceCell.editText.clearFocus(); + AndroidUtilities.hideKeyboard(subEditPriceCell.editText); + }); + } + }); + linearLayout.addView(subCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48)); + + subPriceView = new TextView(context); + subPriceView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + subPriceView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText3)); + subEditPriceCell = new EditTextCell(context, getString(getConnectionsManager().isTestBackend() ? R.string.RequireMonthlyFeePriceHintTest5Minutes : R.string.RequireMonthlyFeePriceHint), false, -1, resourceProvider) { + private boolean ignoreTextChanged; + @Override + protected void onTextChanged(CharSequence newText) { + super.onTextChanged(newText); + if (ignoreTextChanged) return; + if (TextUtils.isEmpty(newText)) { + subPriceView.setText(""); + } else { + try { + long stars = Long.parseLong(newText.toString()); + if (stars > getMessagesController().starsSubscriptionAmountMax) { + ignoreTextChanged = true; + stars = getMessagesController().starsSubscriptionAmountMax; + setText(Long.toString(stars)); + ignoreTextChanged = false; + } + subPriceView.setText(formatString( + getConnectionsManager().isTestBackend() ? R.string.RequireMonthlyFeePriceTest5Minutes : R.string.RequireMonthlyFeePrice, + BillingController.getInstance().formatCurrency((long) (stars / 1000.0 * MessagesController.getInstance(currentAccount).starsUsdWithdrawRate1000), "USD") + )); + } catch (Exception e) { + FileLog.e(e); + } + } + } + }; + subEditPriceCell.editText.setInputType(InputType.TYPE_CLASS_NUMBER); + subEditPriceCell.editText.setRawInputType(InputType.TYPE_CLASS_NUMBER); + subEditPriceCell.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); + subEditPriceCell.hideKeyboardOnEnter(); + subEditPriceCell.addView(subPriceView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL | Gravity.RIGHT, 0, 0, 19, 0)); + + ImageView star = subEditPriceCell.setLeftDrawable(getContext().getResources().getDrawable(R.drawable.star_small_inner).mutate()); + star.setScaleX(.83f); + star.setScaleY(.83f); + star.setTranslationY(dp(-1)); + star.setTranslationX(dp(1)); + linearLayout.addView(subEditPriceCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48)); + subEditPriceCell.setVisibility(View.GONE); + + subInfoCell = new TextInfoPrivacyCell(context); + if (inviteToEdit != null) { + subInfoCell.setText(getString(R.string.RequireMonthlyFeeInfoFrozen)); + } else { + subInfoCell.setText(AndroidUtilities.withLearnMore(getString(R.string.RequireMonthlyFeeInfo), () -> { + Browser.openUrl(getContext(), getString(R.string.RequireMonthlyFeeInfoLink)); + })); + } + linearLayout.addView(subInfoCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + } } - linearLayout.addView(hintCell); timeHeaderCell = new HeaderCell(context); - timeHeaderCell.setText(LocaleController.getString("LimitByPeriod", R.string.LimitByPeriod)); + timeHeaderCell.setText(getString(R.string.LimitByPeriod)); linearLayout.addView(timeHeaderCell); timeChooseView = new SlideChooseView(context); linearLayout.addView(timeChooseView); timeEditText = new TextView(context); - timeEditText.setPadding(AndroidUtilities.dp(22), 0, AndroidUtilities.dp(22), 0); + timeEditText.setPadding(dp(22), 0, dp(22), 0); timeEditText.setGravity(Gravity.CENTER_VERTICAL); timeEditText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); - timeEditText.setHint(LocaleController.getString("TimeLimitHint", R.string.TimeLimitHint)); - timeEditText.setOnClickListener(view -> AlertsCreator.createDatePickerDialog(context, LocaleController.getString(R.string.ExpireAfter), LocaleController.getString(R.string.SetTimeLimit), -1, (notify, scheduleDate) -> chooseDate(scheduleDate))); + timeEditText.setHint(getString("TimeLimitHint", R.string.TimeLimitHint)); + timeEditText.setOnClickListener(view -> AlertsCreator.createDatePickerDialog(context, getString(R.string.ExpireAfter), getString(R.string.SetTimeLimit), -1, (notify, scheduleDate) -> chooseDate(scheduleDate))); timeChooseView.setCallback(index -> { if (index < dispalyedDates.size()) { @@ -344,11 +479,11 @@ protected void onDraw(Canvas canvas) { linearLayout.addView(timeEditText, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 50)); divider = new TextInfoPrivacyCell(context); - divider.setText(LocaleController.getString("TimeLimitHelp", R.string.TimeLimitHelp)); + divider.setText(getString("TimeLimitHelp", R.string.TimeLimitHelp)); linearLayout.addView(divider); usesHeaderCell = new HeaderCell(context); - usesHeaderCell.setText(LocaleController.getString("LimitNumberOfUses", R.string.LimitNumberOfUses)); + usesHeaderCell.setText(getString("LimitNumberOfUses", R.string.LimitNumberOfUses)); linearLayout.addView(usesHeaderCell); usesChooseView = new SlideChooseView(context); usesChooseView.setCallback(index -> { @@ -373,10 +508,10 @@ public boolean onTouchEvent(MotionEvent event) { return super.onTouchEvent(event); } }; - usesEditText.setPadding(AndroidUtilities.dp(22), 0, AndroidUtilities.dp(22), 0); + usesEditText.setPadding(dp(22), 0, dp(22), 0); usesEditText.setGravity(Gravity.CENTER_VERTICAL); usesEditText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); - usesEditText.setHint(LocaleController.getString("UsesLimitHint", R.string.UsesLimitHint)); + usesEditText.setHint(getString("UsesLimitHint", R.string.UsesLimitHint)); usesEditText.setKeyListener(DigitsKeyListener.getInstance("0123456789.")); usesEditText.setInputType(InputType.TYPE_CLASS_NUMBER); usesEditText.addTextChangedListener(new TextWatcher() { @@ -416,7 +551,7 @@ public void afterTextChanged(Editable editable) { linearLayout.addView(usesEditText, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 50)); dividerUses = new TextInfoPrivacyCell(context); - dividerUses.setText(LocaleController.getString("UsesLimitHelp", R.string.UsesLimitHelp)); + dividerUses.setText(getString("UsesLimitHelp", R.string.UsesLimitHelp)); linearLayout.addView(dividerUses); nameEditText = new EditText(context) { @@ -440,10 +575,10 @@ public void afterTextChanged(Editable s) { nameEditText.setCursorVisible(false); nameEditText.setFilters(new InputFilter[]{ new InputFilter.LengthFilter(32) }); nameEditText.setGravity(Gravity.CENTER_VERTICAL); - nameEditText.setHint(LocaleController.getString("LinkNameHint", R.string.LinkNameHint)); + nameEditText.setHint(getString("LinkNameHint", R.string.LinkNameHint)); nameEditText.setHintTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText)); nameEditText.setLines(1); - nameEditText.setPadding(AndroidUtilities.dp(22), 0, AndroidUtilities.dp(22), 0); + nameEditText.setPadding(dp(22), 0, dp(22), 0); nameEditText.setSingleLine(); nameEditText.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); nameEditText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); @@ -451,23 +586,23 @@ public void afterTextChanged(Editable s) { dividerName = new TextInfoPrivacyCell(context); dividerName.setBackground(Theme.getThemedDrawableByKey(context, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); - dividerName.setText(LocaleController.getString("LinkNameHelp", R.string.LinkNameHelp)); + dividerName.setText(getString("LinkNameHelp", R.string.LinkNameHelp)); linearLayout.addView(dividerName); if (type == EDIT_TYPE) { revokeLink = new TextSettingsCell(context); revokeLink.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - revokeLink.setText(LocaleController.getString("RevokeLink", R.string.RevokeLink), false); + revokeLink.setText(getString("RevokeLink", R.string.RevokeLink), false); revokeLink.setTextColor(Theme.getColor(Theme.key_text_RedRegular)); revokeLink.setOnClickListener(view -> { AlertDialog.Builder builder2 = new AlertDialog.Builder(getParentActivity()); - builder2.setMessage(LocaleController.getString("RevokeAlert", R.string.RevokeAlert)); - builder2.setTitle(LocaleController.getString("RevokeLink", R.string.RevokeLink)); - builder2.setPositiveButton(LocaleController.getString("RevokeButton", R.string.RevokeButton), (dialogInterface2, i2) -> { + builder2.setMessage(getString("RevokeAlert", R.string.RevokeAlert)); + builder2.setTitle(getString("RevokeLink", R.string.RevokeLink)); + builder2.setPositiveButton(getString("RevokeButton", R.string.RevokeButton), (dialogInterface2, i2) -> { callback.revokeLink(inviteToEdit); finishFragment(); }); - builder2.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder2.setNegativeButton(getString("Cancel", R.string.Cancel), null); showDialog(builder2.create()); }); @@ -475,7 +610,14 @@ public void afterTextChanged(Editable s) { } contentView.addView(scrollView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); - linearLayout.addView(buttonTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.BOTTOM, 16, 15, 16, 16)); + + buttonLayout = new FrameLayout(context); + buttonLayout.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundGray)); + new KeyboardNotifier(contentView, keyboardHeight -> { +// buttonLayout.setVisibility((keyboardHeight > dp(40)) ? View.GONE : View.VISIBLE); + }); + buttonLayout.addView(buttonTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.BOTTOM | Gravity.FILL_HORIZONTAL, 16, 15, 16, 16)); + contentView.addView(buttonLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.BOTTOM)); timeHeaderCell.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); timeChooseView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); @@ -491,7 +633,7 @@ public void afterTextChanged(Editable s) { dividerUses.setBackgroundDrawable(Theme.getThemedDrawableByKey(context, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); divider.setBackgroundDrawable(Theme.getThemedDrawableByKey(context, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); - buttonTextView.setBackgroundDrawable(Theme.createSimpleSelectorRoundRectDrawable(AndroidUtilities.dp(6), Theme.getColor(Theme.key_featuredStickers_addButton), Theme.getColor(Theme.key_featuredStickers_addButtonPressed))); + buttonTextView.setBackgroundDrawable(Theme.createSimpleSelectorRoundRectDrawable(dp(6), Theme.getColor(Theme.key_featuredStickers_addButton), Theme.getColor(Theme.key_featuredStickers_addButtonPressed))); usesEditText.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); usesEditText.setHintTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText)); @@ -524,6 +666,15 @@ private void onCreateClicked(View view) { return; } + long stars = 0; + if (subCell != null && subCell.isChecked()) { + try { + stars = Long.parseLong(subEditPriceCell.editText.getText().toString()); + } catch (Exception e) { + FileLog.e(e); + } + } + if (type == CREATE_TYPE) { if (progressDialog != null) { progressDialog.dismiss(); @@ -561,6 +712,13 @@ private void onCreateClicked(View view) { req.flags |= 16; } + if (stars > 0) { + req.flags |= 32; + req.subscription_pricing = new TLRPC.TL_starsSubscriptionPricing(); + req.subscription_pricing.period = getConnectionsManager().isTestBackend() ? StarsController.PERIOD_5MINUTES : StarsController.PERIOD_MONTHLY; + req.subscription_pricing.amount = stars; + } + getConnectionsManager().sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> { loading = false; if (progressDialog != null) { @@ -685,7 +843,7 @@ private void chooseUses(int customUses) { String[] options = new String[dispalyedUses.size() + 1]; for (int i = 0; i < options.length; i++) { if (i == options.length - 1) { - options[i] = LocaleController.getString("NoLimit", R.string.NoLimit); + options[i] = getString("NoLimit", R.string.NoLimit); } else { options[i] = dispalyedUses.get(i).toString(); } @@ -717,7 +875,7 @@ private void chooseDate(int selectedDate) { String[] options = new String[dispalyedDates.size() + 1]; for (int i = 0; i < options.length; i++) { if (i == options.length - 1) { - options[i] = LocaleController.getString("NoLimit", R.string.NoLimit); + options[i] = getString("NoLimit", R.string.NoLimit); } else { if (dispalyedDates.get(i) == defaultDates[0]) { options[i] = LocaleController.formatPluralString("Hours", 1); @@ -727,7 +885,7 @@ private void chooseDate(int selectedDate) { options[i] = LocaleController.formatPluralString("Weeks", 1); } else { if (selectedDate < 86400L) { - options[i] = LocaleController.getString("MessageScheduleToday", R.string.MessageScheduleToday); + options[i] = getString("MessageScheduleToday", R.string.MessageScheduleToday); } else if (selectedDate < 364 * 86400L) { options[i] = LocaleController.getInstance().getFormatterScheduleDay().format(originDate * 1000L); } else { @@ -744,7 +902,7 @@ private void resetDates() { for (int i = 0; i < defaultDates.length; i++) { dispalyedDates.add(defaultDates[i]); } - String[] options = new String[]{ LocaleController.formatPluralString("Hours", 1), LocaleController.formatPluralString("Days", 1), LocaleController.formatPluralString("Weeks", 1), LocaleController.getString("NoLimit", R.string.NoLimit) }; + String[] options = new String[]{ LocaleController.formatPluralString("Hours", 1), LocaleController.formatPluralString("Days", 1), LocaleController.formatPluralString("Weeks", 1), getString("NoLimit", R.string.NoLimit) }; timeChooseView.setOptions(options.length - 1, options); } @@ -757,7 +915,7 @@ private void resetUses() { for (int i = 0; i < defaultUses.length; i++) { dispalyedUses.add(defaultUses[i]); } - String[] options = new String[]{ "1", "10", "100", LocaleController.getString("NoLimit", R.string.NoLimit) }; + String[] options = new String[]{ "1", "10", "100", getString("NoLimit", R.string.NoLimit) }; usesChooseView.setOptions(options.length - 1, options); } @@ -784,6 +942,27 @@ public void setInviteToEdit(TLRPC.TL_chatInviteExported invite) { Emoji.replaceEmoji(builder, nameEditText.getPaint().getFontMetricsInt(), (int) nameEditText.getPaint().getTextSize(), false); nameEditText.setText(builder); } + + if (subCell != null) { + subCell.setChecked(invite.subscription_pricing != null); + } + if (invite.subscription_pricing != null) { + if (approveCell != null) { + approveCell.setChecked(false); + approveCell.setCheckBoxIcon(R.drawable.permission_locked); + } + if (approveHintCell != null) { + approveHintCell.setText(getString(R.string.ApproveNewMembersDescriptionFrozen)); + } + } + if (subEditPriceCell != null) { + subEditPriceCell.setVisibility(invite.subscription_pricing != null ? View.VISIBLE : View.GONE); + subEditPriceCell.setText(Long.toString(invite.subscription_pricing.amount)); + subEditPriceCell.editText.setClickable(false); + subEditPriceCell.editText.setFocusable(false); + subEditPriceCell.editText.setFocusableInTouchMode(false); + subEditPriceCell.editText.setLongClickable(false); + } } } @@ -820,7 +999,7 @@ public ArrayList<ThemeDescription> getThemeDescriptions() { Context context = dividerUses.getContext(); dividerUses.setBackgroundDrawable(Theme.getThemedDrawableByKey(context, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); divider.setBackgroundDrawable(Theme.getThemedDrawableByKey(context, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow)); - buttonTextView.setBackgroundDrawable(Theme.createSimpleSelectorRoundRectDrawable(AndroidUtilities.dp(6), Theme.getColor(Theme.key_featuredStickers_addButton), Theme.getColor(Theme.key_featuredStickers_addButtonPressed))); + buttonTextView.setBackgroundDrawable(Theme.createSimpleSelectorRoundRectDrawable(dp(6), Theme.getColor(Theme.key_featuredStickers_addButton), Theme.getColor(Theme.key_featuredStickers_addButtonPressed))); usesEditText.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); usesEditText.setHintTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ManageLinksActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ManageLinksActivity.java index da8e5fb68c9..735aeeef4a1 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ManageLinksActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ManageLinksActivity.java @@ -1,5 +1,9 @@ package org.telegram.ui; +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.LocaleController.formatString; +import static org.telegram.messenger.LocaleController.getString; + import android.content.Context; import android.content.Intent; import android.graphics.Canvas; @@ -24,6 +28,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.collection.LongSparseArray; import androidx.core.content.ContextCompat; import androidx.core.graphics.ColorUtils; import androidx.recyclerview.widget.DefaultItemAnimator; @@ -36,6 +41,7 @@ import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.ChatObject; import org.telegram.messenger.ContactsController; +import org.telegram.messenger.DialogObject; import org.telegram.messenger.DocumentObject; import org.telegram.messenger.Emoji; import org.telegram.messenger.FileLog; @@ -62,16 +68,23 @@ import org.telegram.ui.Cells.TextInfoPrivacyCell; import org.telegram.ui.Cells.TextSettingsCell; import org.telegram.ui.Components.BackupImageView; +import org.telegram.ui.Components.Bulletin; import org.telegram.ui.Components.BulletinFactory; import org.telegram.ui.Components.CombinedDrawable; +import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.DotDividerSpan; import org.telegram.ui.Components.FlickerLoadingView; import org.telegram.ui.Components.InviteLinkBottomSheet; +import org.telegram.ui.Components.ItemOptions; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.LinkActionView; import org.telegram.ui.Components.RecyclerItemsEnterAnimator; import org.telegram.ui.Components.RecyclerListView; +import org.telegram.ui.Components.ShareAlert; import org.telegram.ui.Components.TimerParticles; +import org.telegram.ui.Stars.StarsController; +import org.telegram.ui.Stars.StarsIntroActivity; +import org.telegram.ui.Stories.recorder.HintView2; import java.util.ArrayList; import java.util.HashMap; @@ -99,6 +112,7 @@ public class ManageLinksActivity extends BaseFragment { private int linksStartRow; private int linksEndRow; private int linksLoadingRow; + private int linksInfoRow; private int revokedLinksStartRow; private int revokedLinksEndRow; private int revokedDivider; @@ -123,6 +137,7 @@ public class ManageLinksActivity extends BaseFragment { Drawable linkIcon; Drawable linkIconRevoked; + Drawable linkIconRevenue; boolean hasMore; boolean deletingRevokedLinks; @@ -177,7 +192,7 @@ private static class EmptyView extends LinearLayout implements NotificationCente public EmptyView(Context context) { super(context); - setPadding(0, AndroidUtilities.dp(12), 0, AndroidUtilities.dp(12)); + setPadding(0, dp(12), 0, dp(12)); setOrientation(LinearLayout.VERTICAL); stickerView = new BackupImageView(context); @@ -445,6 +460,7 @@ private void updateRows(boolean notify) { adminsHeaderRow = -1; linksHeaderRow = -1; dividerRow = -1; + linksInfoRow = -1; rowCount = 0; @@ -507,7 +523,9 @@ private void updateRows(boolean notify) { linksLoadingRow = rowCount++; } - if (!invites.isEmpty() || !revokedInvites.isEmpty()) { + if (!invites.isEmpty() && linksEndRow == rowCount) { + linksInfoRow = rowCount++; + } else if (!invites.isEmpty() || !revokedInvites.isEmpty()) { lastDivider = rowCount++; } @@ -520,7 +538,7 @@ private void updateRows(boolean notify) { public View createView(Context context) { actionBar.setBackButtonImage(R.drawable.ic_ab_back); actionBar.setAllowOverlayTitle(true); - actionBar.setTitle(LocaleController.getString("InviteLinks", R.string.InviteLinks)); + actionBar.setTitle(getString("InviteLinks", R.string.InviteLinks)); actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { @Override public void onItemClick(int id) { @@ -571,6 +589,8 @@ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { }); recyclerItemsEnterAnimator = new RecyclerItemsEnterAnimator(listView, false); DefaultItemAnimator defaultItemAnimator = new DefaultItemAnimator(); + defaultItemAnimator.setDurations(420); + defaultItemAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); defaultItemAnimator.setDelayAnimations(false); defaultItemAnimator.setSupportsChangeAnimations(false); listView.setItemAnimator(defaultItemAnimator); @@ -606,9 +626,9 @@ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { } AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); - builder.setTitle(LocaleController.getString("DeleteAllRevokedLinks", R.string.DeleteAllRevokedLinks)); - builder.setMessage(LocaleController.getString("DeleteAllRevokedLinkHelp", R.string.DeleteAllRevokedLinkHelp)); - builder.setPositiveButton(LocaleController.getString("Delete", R.string.Delete), (dialogInterface2, i2) -> { + builder.setTitle(getString("DeleteAllRevokedLinks", R.string.DeleteAllRevokedLinks)); + builder.setMessage(getString("DeleteAllRevokedLinkHelp", R.string.DeleteAllRevokedLinkHelp)); + builder.setPositiveButton(getString("Delete", R.string.Delete), (dialogInterface2, i2) -> { TLRPC.TL_messages_deleteRevokedExportedChatInvites req = new TLRPC.TL_messages_deleteRevokedExportedChatInvites(); req.peer = getMessagesController().getInputPeer(-currentChatId); if (adminId == getUserConfig().getClientUserId()) { @@ -626,7 +646,7 @@ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { } })); }); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder.setNegativeButton(getString("Cancel", R.string.Cancel), null); showDialog(builder.create()); } else if (position >= adminsStartRow && position < adminsEndRow) { int p = position - adminsStartRow; @@ -651,6 +671,7 @@ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { linkIcon = ContextCompat.getDrawable(context, R.drawable.msg_link_1); linkIconRevoked = ContextCompat.getDrawable(context, R.drawable.msg_link_2); + linkIconRevenue = ContextCompat.getDrawable(context, R.drawable.large_income); linkIcon.setColorFilter(new PorterDuffColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY)); updateRows(true); @@ -690,7 +711,7 @@ public HintInnerCell(Context context) { messageTextView.setTextColor(Theme.getColor(Theme.key_chats_message)); messageTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); messageTextView.setGravity(Gravity.CENTER); - messageTextView.setText(isChannel ? LocaleController.getString("PrimaryLinkHelpChannel", R.string.PrimaryLinkHelpChannel) : LocaleController.getString("PrimaryLinkHelp", R.string.PrimaryLinkHelp)); + messageTextView.setText(isChannel ? getString("PrimaryLinkHelpChannel", R.string.PrimaryLinkHelpChannel) : getString("PrimaryLinkHelp", R.string.PrimaryLinkHelp)); addView(messageTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.LEFT, 52, 143, 52, 18)); } @@ -765,7 +786,7 @@ public void showUsersForPermanentLink() { view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); break; case 3: - view = new CreationTextCell(mContext); + view = new CreationTextCell(mContext, 64, resourceProvider); view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); break; case 4: @@ -789,13 +810,12 @@ public void showUsersForPermanentLink() { case 8: TextSettingsCell revokeAll = new TextSettingsCell(mContext); revokeAll.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - revokeAll.setText(LocaleController.getString("DeleteAllRevokedLinks", R.string.DeleteAllRevokedLinks), false); + revokeAll.setText(getString("DeleteAllRevokedLinks", R.string.DeleteAllRevokedLinks), false); revokeAll.setTextColor(Theme.getColor(Theme.key_text_RedRegular)); view = revokeAll; break; case 9: TextInfoPrivacyCell cell = new TextInfoPrivacyCell(mContext); - cell.setText(LocaleController.getString("CreateNewLinkHelp", R.string.CreateNewLinkHelp)); cell.setBackground(Theme.getThemedDrawableByKey(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); view = cell; break; @@ -804,6 +824,9 @@ public void showUsersForPermanentLink() { userCell.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); view = userCell; break; + case 11: + view = new TextInfoPrivacyCell(mContext, resourceProvider); + break; } view.setLayoutParams(new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); return new RecyclerListView.Holder(view); @@ -837,18 +860,18 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { HeaderCell headerCell = (HeaderCell) holder.itemView; if (position == permanentLinkHeaderRow) { if (isPublic && adminId == getAccountInstance().getUserConfig().clientUserId) { - headerCell.setText(LocaleController.getString("PublicLink", R.string.PublicLink)); + headerCell.setText(getString("PublicLink", R.string.PublicLink)); } else if (adminId == getAccountInstance().getUserConfig().clientUserId) { - headerCell.setText(LocaleController.getString("ChannelInviteLinkTitle", R.string.ChannelInviteLinkTitle)); + headerCell.setText(getString("ChannelInviteLinkTitle", R.string.ChannelInviteLinkTitle)); } else { - headerCell.setText(LocaleController.getString("PermanentLinkForThisAdmin", R.string.PermanentLinkForThisAdmin)); + headerCell.setText(getString("PermanentLinkForThisAdmin", R.string.PermanentLinkForThisAdmin)); } } else if (position == revokedHeader) { - headerCell.setText(LocaleController.getString("RevokedLinks", R.string.RevokedLinks)); + headerCell.setText(getString("RevokedLinks", R.string.RevokedLinks)); } else if (position == linksHeaderRow) { - headerCell.setText(LocaleController.getString("LinksCreatedByThisAdmin", R.string.LinksCreatedByThisAdmin)); + headerCell.setText(getString("LinksCreatedByThisAdmin", R.string.LinksCreatedByThisAdmin)); } else if (position == adminsHeaderRow) { - headerCell.setText(LocaleController.getString("LinksCreatedByOtherAdmins", R.string.LinksCreatedByOtherAdmins)); + headerCell.setText(getString("LinksCreatedByOtherAdmins", R.string.LinksCreatedByOtherAdmins)); } break; case 3: @@ -859,7 +882,7 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { drawable2.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_checkboxCheck), PorterDuff.Mode.MULTIPLY)); CombinedDrawable combinedDrawable = new CombinedDrawable(drawable1, drawable2); - textCell.setTextAndIcon(LocaleController.getString("CreateNewLink", R.string.CreateNewLink), combinedDrawable, !invites.isEmpty()); + textCell.setTextAndIcon(getString("CreateNewLink", R.string.CreateNewLink), combinedDrawable, !invites.isEmpty()); break; case 5: TLRPC.TL_chatInviteExported invite; @@ -901,6 +924,30 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (user != null) { userCell.setData(user, ContactsController.formatName(user.first_name, user.last_name), LocaleController.formatPluralString("InviteLinkCount", count), drawDivider); } + break; + case 11: + TextInfoPrivacyCell infoCell = (TextInfoPrivacyCell) holder.itemView; + infoCell.setBackground(Theme.getThemedDrawableByKey(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); + if (position == linksInfoRow) { + final TLRPC.ChatFull chatFull = getMessagesController().getChatFull(currentChatId); + final TLRPC.Chat chat = getMessagesController().getChat(currentChatId); + if (chatFull != null && chatFull.paid_media_allowed && ChatObject.isChannelAndNotMegaGroup(chat)) { + infoCell.setText(getString(R.string.ChannelLinksInfoPaid)); + } else { + infoCell.setText(getString(R.string.ChannelLinksInfo)); + } + } + break; + case 9: + TextInfoPrivacyCell infoCell2 = (TextInfoPrivacyCell) holder.itemView; + final TLRPC.ChatFull chatFull = getMessagesController().getChatFull(currentChatId); + final TLRPC.Chat chat = getMessagesController().getChat(currentChatId); + if (chatFull != null && chatFull.paid_media_allowed && ChatObject.isChannelAndNotMegaGroup(chat)) { + infoCell2.setText(getString(R.string.ChannelLinksInfoPaid)); + } else { + infoCell2.setText(getString(R.string.ChannelLinksInfo)); + } + break; } } @@ -935,6 +982,8 @@ public int getItemViewType(int position) { return 9; } else if (position == creatorRow || (position >= adminsStartRow && position < adminsEndRow)) { return 10; + } else if (position == linksInfoRow) { + return 11; } return 1; } @@ -963,7 +1012,7 @@ private void revokePermanent() { DiffCallback callback = saveListState(); revokedInvites.add(0, oldInvite); updateRecyclerViewAnimated(callback); - BulletinFactory.of(this).createSimpleBulletin(R.raw.linkbroken, LocaleController.getString("InviteRevokedHint", R.string.InviteRevokedHint)).show(); + BulletinFactory.of(this).createSimpleBulletin(R.raw.linkbroken, getString("InviteRevokedHint", R.string.InviteRevokedHint)).show(); } })); @@ -984,8 +1033,14 @@ private class LinkCell extends FrameLayout { int lastDrawingState; - TextView titleView; - TextView subtitleView; + private final LinearLayout textLayout; + private final TextView titleView; + private final TextView subtitleView; + + private final LinearLayout priceLayout; + private final TextView priceTitleView; + private final TextView priceSubitleView; + TLRPC.TL_chatInviteExported invite; int position; Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); @@ -1007,23 +1062,21 @@ public LinkCell(@NonNull Context context) { paint2.setStyle(Paint.Style.STROKE); paint2.setStrokeCap(Paint.Cap.ROUND); - LinearLayout linearLayout = new LinearLayout(context); - linearLayout.setOrientation(LinearLayout.VERTICAL); - - addView(linearLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL, 70, 0, 30, 0)); + textLayout = new LinearLayout(context); + textLayout.setOrientation(LinearLayout.VERTICAL); + addView(textLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL, 64, 0, 30, 0)); titleView = new TextView(context); titleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); titleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); titleView.setLines(1); titleView.setEllipsize(TextUtils.TruncateAt.END); + textLayout.addView(titleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); subtitleView = new TextView(context); subtitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); subtitleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText)); - - linearLayout.addView(titleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); - linearLayout.addView(subtitleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 6, 0, 0)); + textLayout.addView(subtitleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 4.33f, 0, 0)); optionsView = new ImageView(context); optionsView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_ab_other)); @@ -1033,121 +1086,116 @@ public LinkCell(@NonNull Context context) { if (invite == null) { return; } - ArrayList<String> items = new ArrayList<>(); - ArrayList<Integer> icons = new ArrayList<>(); - final ArrayList<Integer> actions = new ArrayList<>(); + if (!(fragmentView instanceof ViewGroup)) { + return; + } - boolean redLastItem = false; + ItemOptions options = ItemOptions.makeOptions((ViewGroup) fragmentView, LinkCell.this); if (invite.revoked) { - items.add(LocaleController.getString("Delete", R.string.Delete)); - icons.add(R.drawable.msg_delete); - actions.add(4); - redLastItem = true; + options.add(R.drawable.msg_delete, getString(R.string.Delete), true, () -> { + TLRPC.TL_chatInviteExported inviteFinal = invite; + new AlertDialog.Builder(getParentActivity()) + .setTitle(getString("DeleteLink", R.string.DeleteLink)) + .setMessage(getString("DeleteLinkHelp", R.string.DeleteLinkHelp)) + .setPositiveButton(getString("Delete", R.string.Delete), (dialogInterface2, i2) -> deleteLink(inviteFinal)) + .setNegativeButton(getString("Cancel", R.string.Cancel), null) + .show(); + }); } else { - items.add(LocaleController.getString("CopyLink", R.string.CopyLink)); - icons.add(R.drawable.msg_copy); - actions.add(0); - - items.add(LocaleController.getString("ShareLink", R.string.ShareLink)); - icons.add(R.drawable.msg_share); - actions.add(1); - - if (!invite.permanent && canEdit) { - items.add(LocaleController.getString("EditLink", R.string.EditLink)); - icons.add(R.drawable.msg_edit); - actions.add(2); - } - - if (canEdit) { - items.add(LocaleController.getString("RevokeLink", R.string.RevokeLink)); - icons.add(R.drawable.msg_delete); - actions.add(3); - redLastItem = true; - } - } - - AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); - builder.setItems(items.toArray(new CharSequence[0]), AndroidUtilities.toIntArray(icons), (dialogInterface, i) -> { - switch (actions.get(i)) { - case 0: - try { - if (invite.link == null) { - return; - } - android.content.ClipboardManager clipboard = (android.content.ClipboardManager) ApplicationLoader.applicationContext.getSystemService(Context.CLIPBOARD_SERVICE); - android.content.ClipData clip = android.content.ClipData.newPlainText("label", invite.link); - clipboard.setPrimaryClip(clip); - BulletinFactory.createCopyLinkBulletin(ManageLinksActivity.this).show(); - } catch (Exception e) { - FileLog.e(e); - } - break; - case 1: - try { - if (invite.link == null) { - return; + options.add(R.drawable.msg_copy, getString(R.string.CopyLink), () -> { + try { + if (invite.link == null) return; + android.content.ClipboardManager clipboard = (android.content.ClipboardManager) ApplicationLoader.applicationContext.getSystemService(Context.CLIPBOARD_SERVICE); + android.content.ClipData clip = android.content.ClipData.newPlainText("label", invite.link); + clipboard.setPrimaryClip(clip); + BulletinFactory.createCopyLinkBulletin(ManageLinksActivity.this).show(); + } catch (Exception e) { + FileLog.e(e); + } + }); + options.add(R.drawable.msg_share, getString(R.string.ShareLink), () -> { + try { + if (invite.link == null) return; + showDialog(new ShareAlert(getContext(), null, invite.link, false, invite.link, false, getResourceProvider()) { + @Override + protected void onSend(LongSparseArray<TLRPC.Dialog> dids, int count, TLRPC.TL_forumTopic topic) { + final String str; + if (dids != null && dids.size() == 1) { + long did = dids.valueAt(0).id; + if (did == 0 || did == getUserConfig().getClientUserId()) { + str = getString(R.string.InvLinkToSavedMessages); + } else { + str = formatString(R.string.InvLinkToUser, getMessagesController().getPeerName(did, true)); + } + } else { + str = formatString(R.string.InvLinkToChats, LocaleController.formatPluralString("Chats", count)); + } + Bulletin b = BulletinFactory.of(ManageLinksActivity.this).createSimpleBulletin(R.raw.forward, AndroidUtilities.replaceTags(str)); + b.hideAfterBottomSheet = false; + b.show(true); } - Intent intent = new Intent(Intent.ACTION_SEND); - intent.setType("text/plain"); - intent.putExtra(Intent.EXTRA_TEXT, invite.link); - startActivityForResult(Intent.createChooser(intent, LocaleController.getString("InviteToGroupByLink", R.string.InviteToGroupByLink)), 500); - } catch (Exception e) { - FileLog.e(e); - } - break; - case 2: - editLink(invite); - break; - case 3: - TLRPC.TL_chatInviteExported inviteFinal = invite; - AlertDialog.Builder builder2 = new AlertDialog.Builder(getParentActivity()); - builder2.setMessage(LocaleController.getString("RevokeAlert", R.string.RevokeAlert)); - builder2.setTitle(LocaleController.getString("RevokeLink", R.string.RevokeLink)); - builder2.setPositiveButton(LocaleController.getString("RevokeButton", R.string.RevokeButton), (dialogInterface2, i2) -> revokeLink(inviteFinal)); - builder2.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); - showDialog(builder2.create()); - break; - case 4: - inviteFinal = invite; - builder2 = new AlertDialog.Builder(getParentActivity()); - builder2.setTitle(LocaleController.getString("DeleteLink", R.string.DeleteLink)); - builder2.setMessage(LocaleController.getString("DeleteLinkHelp", R.string.DeleteLinkHelp)); - builder2.setPositiveButton(LocaleController.getString("Delete", R.string.Delete), (dialogInterface2, i2) -> deleteLink(inviteFinal)); - builder2.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); - showDialog(builder2.create()); - break; - } - }); - builder.setTitle(LocaleController.getString("InviteLink", R.string.InviteLink)); - AlertDialog alert = builder.create(); - builder.show(); - if (redLastItem) { - alert.setItemColor(items.size() - 1, Theme.getColor(Theme.key_text_RedBold), Theme.getColor(Theme.key_text_RedRegular)); + }); + } catch (Exception e) { + FileLog.e(e); + } + }); + options.addIf(!invite.permanent && canEdit, R.drawable.msg_edit, getString(R.string.EditLink), () -> editLink(invite)); + options.addIf(canEdit, R.drawable.msg_delete, getString(R.string.RevokeLink), true, () -> { + TLRPC.TL_chatInviteExported inviteFinal = invite; + new AlertDialog.Builder(getParentActivity()) + .setMessage(getString("RevokeAlert", R.string.RevokeAlert)) + .setTitle(getString("RevokeLink", R.string.RevokeLink)) + .setPositiveButton(getString("RevokeButton", R.string.RevokeButton), (dialogInterface2, i2) -> revokeLink(inviteFinal)) + .setNegativeButton(getString("Cancel", R.string.Cancel), null) + .show(); + }); } + options.show(); }); optionsView.setBackground(Theme.createSelectorDrawable(Theme.getColor(Theme.key_listSelector), 1)); - addView(optionsView, LayoutHelper.createFrame(40, 48, Gravity.RIGHT | Gravity.CENTER_VERTICAL)); - + addView(optionsView, LayoutHelper.createFrame(48, 48, Gravity.RIGHT | Gravity.CENTER_VERTICAL, 0, 0, 8, 0)); setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); setWillNotDraw(false); + + priceLayout = new LinearLayout(context); + priceLayout.setOrientation(LinearLayout.VERTICAL); + + priceTitleView = new TextView(context); + priceTitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + priceTitleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + priceTitleView.setLines(1); + priceTitleView.setEllipsize(TextUtils.TruncateAt.END); + priceTitleView.setTypeface(AndroidUtilities.bold()); + priceTitleView.setGravity(Gravity.RIGHT); + priceLayout.addView(priceTitleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.RIGHT)); + + priceSubitleView = new TextView(context); + priceSubitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + priceSubitleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText)); + priceSubitleView.setGravity(Gravity.RIGHT); + priceLayout.addView(priceSubitleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.RIGHT, 0, 1, 0, 0)); + addView(priceLayout, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.RIGHT | Gravity.CENTER_VERTICAL, 0, 0, 18, 0)); + + priceLayout.setVisibility(View.GONE); } + boolean timerRunning; @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(64), MeasureSpec.EXACTLY)); - paint2.setStrokeWidth(AndroidUtilities.dp(2)); + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(dp(60), MeasureSpec.EXACTLY)); + paint2.setStrokeWidth(dp(2)); } - private TimerParticles timerParticles = new TimerParticles(); + private final TimerParticles timerParticles = new TimerParticles(); @Override protected void onDraw(Canvas canvas) { if (invite == null) { return; } - int cX = AndroidUtilities.dp(36); + int cX = dp(32); int cY = getMeasuredHeight() / 2; int drawState; @@ -1210,14 +1258,14 @@ protected void onDraw(Canvas canvas) { } paint.setColor(color); - canvas.drawCircle(cX, cY, AndroidUtilities.dp(32) / 2f, paint); + canvas.drawCircle(cX, cY, dp(32) / 2f, paint); if (animateHideExpiring || (!invite.expired && invite.expire_date > 0 && !invite.revoked)) { if (animateHideExpiring) { timeProgress = lastDrawExpringProgress; } paint2.setColor(color); - rectF.set(cX - AndroidUtilities.dp(20), cY - AndroidUtilities.dp(20), cX + AndroidUtilities.dp(20), cY + AndroidUtilities.dp(20)); + rectF.set(cX - dp(20), cY - dp(20), cX + dp(20), cY + dp(20)); if (animateToStateProgress != 1f && (!hasProgress(animateFromState) || animateHideExpiring)) { canvas.save(); @@ -1237,16 +1285,19 @@ protected void onDraw(Canvas canvas) { lastDrawExpringProgress = timeProgress; } - if (invite.revoked) { - linkIconRevoked.setBounds(cX - AndroidUtilities.dp(12), cY - AndroidUtilities.dp(12), cX + AndroidUtilities.dp(12), cY + AndroidUtilities.dp(12)); + if (invite.subscription_pricing != null) { + linkIconRevenue.setBounds(cX - dp(12), cY - dp(12), cX + dp(12), cY + dp(12)); + linkIconRevenue.draw(canvas); + } else if (invite.revoked) { + linkIconRevoked.setBounds(cX - dp(12), cY - dp(12), cX + dp(12), cY + dp(12)); linkIconRevoked.draw(canvas); } else { - linkIcon.setBounds(cX - AndroidUtilities.dp(12), cY - AndroidUtilities.dp(12), cX + AndroidUtilities.dp(12), cY + AndroidUtilities.dp(12)); + linkIcon.setBounds(cX - dp(12), cY - dp(12), cX + dp(12), cY + dp(12)); linkIcon.draw(canvas); } if (drawDivider) { - canvas.drawLine(AndroidUtilities.dp(70), getMeasuredHeight() - 1, getMeasuredWidth() + AndroidUtilities.dp(23), getMeasuredHeight(), Theme.dividerPaint); + canvas.drawLine(dp(70), getMeasuredHeight() - 1, getMeasuredWidth() + dp(23), getMeasuredHeight(), Theme.dividerPaint); } } @@ -1255,7 +1306,9 @@ private boolean hasProgress(int state) { } private int getColor(int state, float progress) { - if (state == LINK_STATE_RED) { + if (invite != null && invite.subscription_pricing != null) { + return Theme.getColor(Theme.key_color_green); + } else if (state == LINK_STATE_RED) { return Theme.getColor(Theme.key_chat_attachAudioBackground); } else if (state == LINK_STATE_GREEN) { if (progress > 0.5f) { @@ -1287,12 +1340,32 @@ public void setLink(TLRPC.TL_chatInviteExported invite, int position) { return; } + int rightMargin = dp(30); + if (invite.subscription_pricing != null) { + priceLayout.setVisibility(View.VISIBLE); + optionsView.setVisibility(View.GONE); + + priceTitleView.setText(StarsIntroActivity.replaceStarsWithPlain("⭐️ " + LocaleController.formatNumber(invite.subscription_pricing.amount, ','), .75f)); + if (invite.subscription_pricing.period == StarsController.PERIOD_MONTHLY) { + priceSubitleView.setText(getString(R.string.StarsParticipantSubscriptionPerMonth)); + } else if (invite.subscription_pricing.period == StarsController.PERIOD_5MINUTES) { + priceSubitleView.setText("per 5 minutes"); + } else if (invite.subscription_pricing.period == StarsController.PERIOD_MINUTE) { + priceSubitleView.setText("each minute"); + } + rightMargin = dp(18 + 10) + (int) Math.max(HintView2.measureCorrectly(priceTitleView.getText(), priceTitleView.getPaint()), HintView2.measureCorrectly(priceSubitleView.getText(), priceSubitleView.getPaint())); + } else { + priceLayout.setVisibility(View.GONE); + optionsView.setVisibility(View.GONE); + } + ((MarginLayoutParams) textLayout.getLayoutParams()).rightMargin = rightMargin; + if (!TextUtils.isEmpty(invite.title)) { SpannableStringBuilder builder = new SpannableStringBuilder(invite.title); Emoji.replaceEmoji(builder, titleView.getPaint().getFontMetricsInt(), (int) titleView.getPaint().getTextSize(), false); titleView.setText(builder); } else if (invite.link.startsWith("https://t.me/+")) { - titleView.setText(invite.link.substring("https://t.me/+".length())); + titleView.setText(MessagesController.getInstance(currentAccount).linkPrefix + "/" + invite.link.substring("https://t.me/+".length())); } else if (invite.link.startsWith("https://t.me/joinchat/")) { titleView.setText(invite.link.substring("https://t.me/joinchat/".length())); } else if (invite.link.startsWith("https://")) { @@ -1303,7 +1376,7 @@ public void setLink(TLRPC.TL_chatInviteExported invite, int position) { String joinedString = ""; if (invite.usage == 0 && invite.usage_limit == 0 && invite.requested == 0) { - joinedString = LocaleController.getString("NoOneJoinedYet", R.string.NoOneJoinedYet); + joinedString = getString(invite.subscription_pricing != null ? R.string.NoOneSubscribed : R.string.NoOneJoined); } else { if (invite.usage_limit > 0 && invite.usage == 0 && !invite.expired && !invite.revoked) { joinedString = LocaleController.formatPluralString("CanJoin", invite.usage_limit); @@ -1324,28 +1397,28 @@ public void setLink(TLRPC.TL_chatInviteExported invite, int position) { if (invite.permanent && !invite.revoked) { SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(joinedString); DotDividerSpan dotDividerSpan = new DotDividerSpan(); - dotDividerSpan.setTopPadding(AndroidUtilities.dp(1.5f)); + dotDividerSpan.setTopPadding(dp(1.5f)); spannableStringBuilder.append(" . ").setSpan(dotDividerSpan, spannableStringBuilder.length() - 3, spannableStringBuilder.length() - 2, 0); - spannableStringBuilder.append(LocaleController.getString("Permanent", R.string.Permanent)); + spannableStringBuilder.append(getString("Permanent", R.string.Permanent)); subtitleView.setText(spannableStringBuilder); } else if (invite.expired || invite.revoked) { if (invite.revoked && invite.usage == 0) { - joinedString = LocaleController.getString("NoOneJoined", R.string.NoOneJoined); + joinedString = getString(invite.subscription_pricing != null ? R.string.NoOneSubscribed : R.string.NoOneJoined); } SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(joinedString); DotDividerSpan dotDividerSpan = new DotDividerSpan(); - dotDividerSpan.setTopPadding(AndroidUtilities.dp(1.5f)); + dotDividerSpan.setTopPadding(dp(1.5f)); spannableStringBuilder.append(" . ").setSpan(dotDividerSpan, spannableStringBuilder.length() - 3, spannableStringBuilder.length() - 2, 0); if (!invite.revoked && invite.usage_limit > 0 && invite.usage >= invite.usage_limit) { - spannableStringBuilder.append(LocaleController.getString("LinkLimitReached", R.string.LinkLimitReached)); + spannableStringBuilder.append(getString("LinkLimitReached", R.string.LinkLimitReached)); } else { - spannableStringBuilder.append(invite.revoked ? LocaleController.getString("Revoked", R.string.Revoked) : LocaleController.getString("Expired", R.string.Expired)); + spannableStringBuilder.append(invite.revoked ? getString("Revoked", R.string.Revoked) : getString("Expired", R.string.Expired)); } subtitleView.setText(spannableStringBuilder); } else if (invite.expire_date > 0) { SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(joinedString); DotDividerSpan dotDividerSpan = new DotDividerSpan(); - dotDividerSpan.setTopPadding(AndroidUtilities.dp(1.5f)); + dotDividerSpan.setTopPadding(dp(1.5f)); spannableStringBuilder.append(" . ").setSpan(dotDividerSpan, spannableStringBuilder.length() - 3, spannableStringBuilder.length() - 2, 0); long currentTime = System.currentTimeMillis() + timeDif * 1000L; @@ -1422,7 +1495,7 @@ public void revokeLink(TLRPC.TL_chatInviteExported invite) { } } if (getParentActivity() != null) { - BulletinFactory.of(this).createSimpleBulletin(R.raw.linkbroken, LocaleController.getString("InviteRevokedHint", R.string.InviteRevokedHint)).show(); + BulletinFactory.of(this).createSimpleBulletin(R.raw.linkbroken, getString("InviteRevokedHint", R.string.InviteRevokedHint)).show(); } } })); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/MessageSendPreview.java b/TMessagesProj/src/main/java/org/telegram/ui/MessageSendPreview.java index 1c359a17ba1..781f3a70275 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/MessageSendPreview.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/MessageSendPreview.java @@ -13,19 +13,14 @@ import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; import android.graphics.Insets; -import android.graphics.LinearGradient; import android.graphics.Matrix; import android.graphics.Paint; -import android.graphics.Path; -import android.graphics.PorterDuff; -import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Shader; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; -import android.util.Log; import android.view.Gravity; import android.view.KeyEvent; import android.view.TextureView; @@ -49,25 +44,20 @@ import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.BuildVars; import org.telegram.messenger.ChatMessageSharedResources; -import org.telegram.messenger.ChatObject; import org.telegram.messenger.Emoji; import org.telegram.messenger.FileLog; -import org.telegram.messenger.ImageReceiver; import org.telegram.messenger.LocaleController; import org.telegram.messenger.MessageObject; import org.telegram.messenger.MessagesController; import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.R; import org.telegram.messenger.UserConfig; -import org.telegram.messenger.UserObject; import org.telegram.messenger.Utilities; import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.ActionBarPopupWindow; import org.telegram.ui.ActionBar.AdjustPanLayoutHelper; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.Theme; -import org.telegram.ui.Cells.BotHelpCell; -import org.telegram.ui.Cells.ChatActionCell; import org.telegram.ui.Cells.ChatMessageCell; import org.telegram.ui.Components.AnimatedEmojiDrawable; import org.telegram.ui.Components.AnimatedFloat; @@ -77,12 +67,10 @@ import org.telegram.ui.Components.EditTextCaption; import org.telegram.ui.Components.ItemOptions; import org.telegram.ui.Components.LayoutHelper; -import org.telegram.ui.Components.MessageBackgroundDrawable; import org.telegram.ui.Components.Reactions.ReactionsLayoutInBubble; import org.telegram.ui.Components.ReactionsContainerLayout; import org.telegram.ui.Components.RecyclerListView; import org.telegram.ui.Components.SizeNotifierFrameLayout; -import org.telegram.ui.Components.SmoothScroller; import org.telegram.ui.Components.Text; import org.telegram.ui.Components.spoilers.SpoilerEffect2; import org.telegram.ui.Stars.StarsIntroActivity; @@ -522,7 +510,7 @@ public boolean drawChild(Canvas canvas, View child, long drawingTime) { cell.drawCaptionLayout(canvas, false, cell.getAlpha()); } if ((cell.getCurrentPosition() != null && ((cell.getCurrentPosition().flags & MessageObject.POSITION_FLAG_BOTTOM) != 0 && (cell.getCurrentPosition().flags & MessageObject.POSITION_FLAG_LEFT) != 0 || cell.getCurrentMessagesGroup() != null && cell.getCurrentMessagesGroup().isDocuments))) { - cell.drawReactionsLayout(canvas, cell.getAlpha()); + cell.drawReactionsLayout(canvas, cell.getAlpha(), null); } if (cell.getCurrentPosition() != null) { cell.drawNamesLayout(canvas, cell.getAlpha()); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/MultiContactsSelectorBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/MultiContactsSelectorBottomSheet.java index 107f932352d..13349114105 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/MultiContactsSelectorBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/MultiContactsSelectorBottomSheet.java @@ -486,7 +486,7 @@ protected CharSequence getTitle() { @Override protected RecyclerListView.SelectionAdapter createAdapter(RecyclerListView listView) { - selectorAdapter = new SelectorAdapter(getContext(), resourcesProvider); + selectorAdapter = new SelectorAdapter(getContext(), true, resourcesProvider); selectorAdapter.setGreenSelector(true); return selectorAdapter; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/NewContactBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/NewContactBottomSheet.java index c262eaea7ad..5bac35160c3 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/NewContactBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/NewContactBottomSheet.java @@ -669,7 +669,7 @@ private void doOnDone() { if (res != null) { if (!res.users.isEmpty()) { MessagesController.getInstance(currentAccount).putUsers(res.users, false); - MessagesController.openChatOrProfileWith(res.users.get(0), null, parentFragment, 1, false); + MessagesController.getInstance(currentAccount).openChatOrProfileWith(res.users.get(0), null, parentFragment, 1, false); dismiss(); } else { if (parentFragment.getParentActivity() == null) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/NotificationsSoundActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/NotificationsSoundActivity.java index 992e3208b53..e335f463f81 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/NotificationsSoundActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/NotificationsSoundActivity.java @@ -639,7 +639,7 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite, resourcesProvider)); break; case 2: - CreationTextCell creationTextCell = new CreationTextCell(context, resourcesProvider); + CreationTextCell creationTextCell = new CreationTextCell(context, 70, resourcesProvider); creationTextCell.startPadding = 61; view = creationTextCell; view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite, resourcesProvider)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PaymentFormActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/PaymentFormActivity.java index cd2b469d86c..3bd86e877d5 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PaymentFormActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PaymentFormActivity.java @@ -106,6 +106,7 @@ import org.telegram.messenger.SRPHelper; import org.telegram.messenger.SharedConfig; import org.telegram.messenger.UserConfig; +import org.telegram.messenger.UserObject; import org.telegram.messenger.Utilities; import org.telegram.messenger.browser.Browser; import org.telegram.tgnet.ConnectionsManager; @@ -1161,6 +1162,11 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setDomStorageEnabled(true); + webView.getSettings().setSupportZoom(true); + webView.getSettings().setBuiltInZoomControls(true); + webView.getSettings().setDisplayZoomControls(false); + webView.getSettings().setUseWideViewPort(true); + if (Build.VERSION.SDK_INT >= 21) { webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); CookieManager cookieManager = CookieManager.getInstance(); @@ -2411,6 +2417,11 @@ public boolean onTouchEvent(MotionEvent event) { webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setDomStorageEnabled(true); + webView.getSettings().setSupportZoom(true); + webView.getSettings().setBuiltInZoomControls(true); + webView.getSettings().setDisplayZoomControls(false); + webView.getSettings().setUseWideViewPort(true); + if (Build.VERSION.SDK_INT >= 21) { webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); CookieManager cookieManager = CookieManager.getInstance(); @@ -4130,9 +4141,15 @@ private void sendData() { } getMessagesController().processUpdates(updates, false); AndroidUtilities.runOnUIThread(() -> { + Context context = getContext(); + if (context == null) context = ApplicationLoader.applicationContext; + if (context == null) context = LaunchActivity.instance; + if (context == null) return; + paymentStatusSent = true; invoiceStatus = InvoiceStatus.PAID; final boolean isStars = invoiceInput instanceof TLRPC.TL_inputInvoiceStars; + final boolean isStarsGift = isStars && ((TLRPC.TL_inputInvoiceStars) invoiceInput).purpose instanceof TLRPC.TL_inputStorePaymentStarsGift; if (!isStars && paymentFormCallback != null) { paymentFormCallback.onInvoiceStatusChanged(invoiceStatus); } @@ -4141,21 +4158,46 @@ private void sendData() { if (isStars && paymentFormCallback != null) { paymentFormCallback.onInvoiceStatusChanged(invoiceStatus); } + final long giftUserId = getStarsGiftUserId(); + String giftUser = ""; + if (giftUserId != 0) { + giftUser = UserObject.getForcedFirstName(getMessagesController().getUser(giftUserId)); + } + long stars = getStars(); + int icon = isStars ? (isStarsGift ? R.raw.stars_send : R.raw.stars_topup) : R.raw.payment_success; + CharSequence bulletinTitle = !isStars ? null : (isStarsGift ? getString(R.string.StarsGiftSentPopup) : getString(R.string.StarsAcquired)); CharSequence bulletinText = AndroidUtilities.replaceTags( isStars ? - LocaleController.formatPluralString("PaymentInfoHintStars", (int) ((TLRPC.TL_inputInvoiceStars) invoiceInput).option.stars, totalPrice[0]) : + LocaleController.formatPluralString(isStarsGift ? "StarsGiftSentPopupInfo" : "StarsAcquiredInfo", (int) stars, giftUser) : LocaleController.formatString(R.string.PaymentInfoHint, totalPrice[0], currentItemName) ); - if (parentFragment instanceof ChatActivity) { - UndoView undoView = ((ChatActivity) parentFragment).getUndoView(); - if (undoView != null) { - undoView.showWithAction(0, UndoView.ACTION_PAYMENT_SUCCESS, bulletinText, message[0], null, null); - } + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment == null) return; + BulletinFactory factory = BulletinFactory.of(lastFragment); + Bulletin bulletin; + if (giftUserId != 0 && bulletinTitle != null) { + bulletin = factory.createSimpleBulletin(icon, bulletinTitle, bulletinText, getString(R.string.ViewInChat), () -> { + BaseFragment lastFragment2 = LaunchActivity.getSafeLastFragment(); + if (lastFragment2 != null) { + lastFragment2.presentFragment(ChatActivity.of(giftUserId)); + } + }); + } else if (bulletinTitle != null) { + bulletin = factory.createSimpleBulletin(icon, bulletinTitle, bulletinText); } else { - Bulletin bulletin = BulletinFactory.global().createSimpleBulletin(R.raw.payment_success, bulletinText); - if (message[0] != null) { - bulletin.setOnClickListener(v -> { - bulletin.hide(); + bulletin = factory.createSimpleBulletin(icon, bulletinText); + } + bulletin.hideAfterBottomSheet = false; + bulletin.setDuration(Bulletin.DURATION_PROLONG); + if (message[0] != null) { + bulletin.setOnClickListener(v -> { + bulletin.hide(); + if (isStarsGift) { + BaseFragment fragment = LaunchActivity.getSafeLastFragment(); + if (fragment != null) { + fragment.presentFragment(ChatActivity.of(MessageObject.getDialogId(message[0]), message[0].id)); + } + } else { TLRPC.TL_payments_getPaymentReceipt req2 = new TLRPC.TL_payments_getPaymentReceipt(); req2.msg_id = message[0].id; req2.peer = MessagesController.getInstance(currentAccount).getInputPeer(message[0].peer_id); @@ -4163,19 +4205,19 @@ private void sendData() { if (response2 instanceof TLRPC.TL_payments_paymentReceiptStars) { StarsIntroActivity.showTransactionSheet(getContext(), false, currentAccount, (TLRPC.TL_payments_paymentReceiptStars) response2, getResourceProvider()); } else if (response2 instanceof TLRPC.PaymentReceipt) { - BaseFragment lastFragment = LaunchActivity.getLastFragment(); - if (lastFragment != null) { + BaseFragment lastFragment3 = LaunchActivity.getLastFragment(); + if (lastFragment3 != null) { BaseFragment.BottomSheetParams params = new BaseFragment.BottomSheetParams(); params.transitionFromLeft = true; params.allowNestedScroll = false; - lastFragment.showAsSheet(new PaymentFormActivity((TLRPC.PaymentReceipt) response2), params); + lastFragment3.showAsSheet(new PaymentFormActivity((TLRPC.PaymentReceipt) response2), params); } } }), ConnectionsManager.RequestFlagFailOnServerErrors); - }); - } - bulletin.show(); + } + }); } + bulletin.show(); }); } else if (response instanceof TLRPC.TL_payments_paymentVerificationNeeded) { AndroidUtilities.runOnUIThread(() -> { @@ -4203,9 +4245,10 @@ private void sendData() { onCheckoutSuccess(parentLayout, parentActivity); + long stars = getStars(); CharSequence bulletinText = AndroidUtilities.replaceTags( invoiceInput instanceof TLRPC.TL_inputInvoiceStars ? - LocaleController.formatPluralString("PaymentInfoHintStars", (int) ((TLRPC.TL_inputInvoiceStars) invoiceInput).option.stars, totalPrice[0]) : + LocaleController.formatPluralString("PaymentInfoHintStars", (int) stars, totalPrice[0]) : LocaleController.formatString(R.string.PaymentInfoHint, totalPrice[0], currentItemName) ); if (parentFragment instanceof ChatActivity) { @@ -4215,6 +4258,7 @@ private void sendData() { } } else { Bulletin bulletin = BulletinFactory.global().createSimpleBulletin(R.raw.payment_success, bulletinText); + bulletin.hideAfterBottomSheet = false; if (message != null) { bulletin.setOnClickListener(v -> { bulletin.hide(); @@ -4272,6 +4316,31 @@ private void sendData() { }, ConnectionsManager.RequestFlagFailOnServerErrors); } + private long getStars() { + if (invoiceInput instanceof TLRPC.TL_inputInvoiceStars) { + TLRPC.TL_inputInvoiceStars invoiceInputStars = (TLRPC.TL_inputInvoiceStars) invoiceInput; + final TLRPC.InputStorePaymentPurpose purpose = invoiceInputStars.purpose; + if (purpose instanceof TLRPC.TL_inputStorePaymentStarsGift) { + return ((TLRPC.TL_inputStorePaymentStarsGift) purpose).stars; + } else if (purpose instanceof TLRPC.TL_inputStorePaymentStarsTopup) { + return ((TLRPC.TL_inputStorePaymentStarsTopup) purpose).stars; + } + } + return 0; + } + + private long getStarsGiftUserId() { + if (invoiceInput instanceof TLRPC.TL_inputInvoiceStars) { + TLRPC.TL_inputInvoiceStars invoiceInputStars = (TLRPC.TL_inputInvoiceStars) invoiceInput; + final TLRPC.InputStorePaymentPurpose purpose = invoiceInputStars.purpose; + if (purpose instanceof TLRPC.TL_inputStorePaymentStarsGift) { + TLRPC.TL_inputStorePaymentStarsGift p = (TLRPC.TL_inputStorePaymentStarsGift) purpose; + if (p.user_id != null) return p.user_id.user_id; + } + } + return 0; + } + private void shakeField(int field) { shakeView(inputFields[field]); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java b/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java index 1d8f2e60c1a..1f35fa1ebc9 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java @@ -10,6 +10,7 @@ import static org.telegram.messenger.AndroidUtilities.dp; import static org.telegram.messenger.AndroidUtilities.lerp; +import static org.telegram.messenger.LocaleController.getString; import android.Manifest; import android.animation.Animator; @@ -70,6 +71,7 @@ import android.text.TextPaint; import android.text.TextUtils; import android.text.style.ClickableSpan; +import android.text.style.LineHeightSpan; import android.text.style.URLSpan; import android.text.util.Linkify; import android.transition.ChangeBounds; @@ -196,6 +198,7 @@ import org.telegram.ui.ActionBar.BottomSheet; import org.telegram.ui.ActionBar.SimpleTextView; import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.Cells.ChatActionCell; import org.telegram.ui.Cells.CheckBoxCell; import org.telegram.ui.Cells.PhotoPickerPhotoCell; import org.telegram.ui.Cells.TextSelectionHelper; @@ -225,6 +228,7 @@ import org.telegram.ui.Components.GroupedPhotosListView; import org.telegram.ui.Components.HideViewAfterAnimation; import org.telegram.ui.Components.ImageUpdater; +import org.telegram.ui.Components.ItemOptions; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.LinkPath; import org.telegram.ui.Components.LinkSpanDrawable; @@ -245,6 +249,7 @@ import org.telegram.ui.Components.PipVideoOverlay; import org.telegram.ui.Components.PlayPauseDrawable; import org.telegram.ui.Components.Premium.LimitReachedBottomSheet; +import org.telegram.ui.Components.Premium.PremiumFeatureBottomSheet; import org.telegram.ui.Components.QuoteSpan; import org.telegram.ui.Components.RLottieDrawable; import org.telegram.ui.Components.RadialProgressView; @@ -259,6 +264,7 @@ import org.telegram.ui.Components.ThanosEffect; import org.telegram.ui.Components.Tooltip; import org.telegram.ui.Components.TranslateAlert2; +import org.telegram.ui.Components.TypefaceSpan; import org.telegram.ui.Components.URLSpanReplacement; import org.telegram.ui.Components.UndoView; import org.telegram.ui.Components.VideoCompressButton; @@ -279,6 +285,7 @@ import java.io.FileOutputStream; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.net.IDN; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; @@ -654,7 +661,7 @@ private void setCenterText() { private String getOf() { lng = LocaleController.getInstance().getCurrentLocaleInfo().shortName; - String text = LocaleController.getString("Of"); // %1$d of %2$d + String text = getString("Of"); // %1$d of %2$d text = text.replace("%1$d", ""); text = text.replace("%2$d", ""); return text; @@ -868,6 +875,8 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { private boolean maskPaintViewShuttingDown; private AlertDialog visibleDialog; private CaptionTextViewSwitcher captionTextViewSwitcher; + private FrameLayout adButtonView; + private TextView adButtonTextView; private CaptionScrollView captionScrollView; private CaptionPhotoViewer captionEdit; private float shiftDp = -8; @@ -1122,10 +1131,10 @@ public void setAvatarFor(ImageUpdater.AvatarFor avatarFor) { } if (avatarFor != null) { if (avatarFor.type == ImageUpdater.TYPE_SUGGEST_PHOTO_FOR_USER) { - setTitle(avatarFor.isVideo ? LocaleController.getString("SuggestVideo", R.string.SuggestVideo) : LocaleController.getString("SuggestPhoto", R.string.SuggestPhoto)); + setTitle(avatarFor.isVideo ? getString("SuggestVideo", R.string.SuggestVideo) : getString("SuggestPhoto", R.string.SuggestPhoto)); } if (avatarFor.isVideo) { - videoAvatarTooltip.setText(LocaleController.getString("SetCover", R.string.SetCover)); + videoAvatarTooltip.setText(getString("SetCover", R.string.SetCover)); } actionBar.setBackground(null); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { @@ -1197,7 +1206,7 @@ private void onLinkLongPress(URLSpan link, TextView widget, Runnable onDismiss) builder.setTitle(link.getURL()); } final int finalTimestamp = timestamp; - builder.setItems(new CharSequence[]{LocaleController.getString("Open", R.string.Open), LocaleController.getString("Copy", R.string.Copy)}, (dialog, which) -> { + builder.setItems(new CharSequence[]{getString("Open", R.string.Open), getString("Copy", R.string.Copy)}, (dialog, which) -> { if (which == 0) { onLinkClick(link, widget); } else if (which == 1) { @@ -1246,13 +1255,13 @@ private void onLinkLongPress(URLSpan link, TextView widget, Runnable onDismiss) AndroidUtilities.addToClipboard(url1); String bulletinMessage; if (tel) { - bulletinMessage = LocaleController.getString("PhoneCopied", R.string.PhoneCopied); + bulletinMessage = getString("PhoneCopied", R.string.PhoneCopied); } else if (url1.startsWith("#")) { - bulletinMessage = LocaleController.getString("HashtagCopied", R.string.HashtagCopied); + bulletinMessage = getString("HashtagCopied", R.string.HashtagCopied); } else if (url1.startsWith("@")) { - bulletinMessage = LocaleController.getString("UsernameCopied", R.string.UsernameCopied); + bulletinMessage = getString("UsernameCopied", R.string.UsernameCopied); } else { - bulletinMessage = LocaleController.getString("LinkCopied", R.string.LinkCopied); + bulletinMessage = getString("LinkCopied", R.string.LinkCopied); } if (AndroidUtilities.shouldShowClipboardToast()) { BulletinFactory.of(containerView, resourcesProvider).createSimpleBulletin(R.raw.voip_invite, bulletinMessage).show(); @@ -1996,6 +2005,12 @@ public interface PageBlocksAdapter { private final static int gallery_menu_hide_translation = 22; private final static int gallery_menu_reply = 23; + private final static int ads_sponsor_info = 101; + private final static int ads_about = 102; + private final static int ads_report = 103; + private final static int ads_separator = 104; + private final static int ads_remove = 105; + private static DecelerateInterpolator decelerateInterpolator; private static Paint progressPaint; @@ -2583,6 +2598,11 @@ public void replaceButtonPressed(int index, VideoEditedInfo videoEditedInfo) { } + @Override + public boolean canEdit(int index) { + return false; + } + @Override public boolean canReplace(int index) { return false; @@ -2726,6 +2746,7 @@ public interface PhotoViewerProvider { void needAddMorePhotos(); void sendButtonPressed(int index, VideoEditedInfo videoEditedInfo, boolean notify, int scheduleDate, boolean forceDocument); void replaceButtonPressed(int index, VideoEditedInfo videoEditedInfo); + boolean canEdit(int index); boolean canReplace(int index); int getSelectedCount(); void updatePhotoAtIndex(int index); @@ -3574,7 +3595,7 @@ public int calculateNewContainerMarginTop(int width, int height) { final int lineCount = layout.getLineCount(); if (isLandscape && lineCount <= 2 || !isLandscape && lineCount <= 5) { - return height - textView.getMeasuredHeight(); + return height - textView.getMeasuredHeight() - captionTextViewSwitcher.getPaddingBottom(); } int i = Math.min(isLandscape ? 2 : 5, lineCount); @@ -4196,13 +4217,13 @@ public void didReceivedNotification(int id, int account, Object... args) { private void showDownloadAlert() { AlertDialog.Builder builder = new AlertDialog.Builder(parentActivity, resourcesProvider); - builder.setTitle(LocaleController.getString("AppName", R.string.AppName)); - builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null); + builder.setTitle(getString("AppName", R.string.AppName)); + builder.setPositiveButton(getString("OK", R.string.OK), null); boolean alreadyDownloading = currentMessageObject != null && currentMessageObject.isVideo() && FileLoader.getInstance(currentMessageObject.currentAccount).isLoadingFile(currentFileNames[0]); if (alreadyDownloading) { - builder.setMessage(LocaleController.getString("PleaseStreamDownload", R.string.PleaseStreamDownload)); + builder.setMessage(getString("PleaseStreamDownload", R.string.PleaseStreamDownload)); } else { - builder.setMessage(LocaleController.getString("PleaseDownload", R.string.PleaseDownload)); + builder.setMessage(getString("PleaseDownload", R.string.PleaseDownload)); } showAlertDialog(builder); } @@ -4261,7 +4282,7 @@ private void onSharePressed() { intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f)); } - parentActivity.startActivityForResult(Intent.createChooser(intent, LocaleController.getString("ShareFile", R.string.ShareFile)), 500); + parentActivity.startActivityForResult(Intent.createChooser(intent, getString("ShareFile", R.string.ShareFile)), 500); } else { showDownloadAlert(); } @@ -4783,10 +4804,10 @@ public void onItemClick(int id) { } final boolean isVideo = isVideo_; AlertDialog dialog = new AlertDialog.Builder(parentActivity, resourcesProvider) - .setTitle(LocaleController.getString("SaveGroupMedia", R.string.SaveGroupMedia)) - .setMessage(LocaleController.getString("SaveGroupMediaMessage", R.string.SaveGroupMediaMessage)) + .setTitle(getString("SaveGroupMedia", R.string.SaveGroupMedia)) + .setMessage(getString("SaveGroupMediaMessage", R.string.SaveGroupMediaMessage)) .setDialogButtonColorKey(Theme.key_voipgroup_listeningText) - .setNegativeButton((!isVideo ? LocaleController.getString("ThisPhoto", R.string.ThisPhoto) : LocaleController.getString("ThisMedia", R.string.ThisMedia)), (di, a) -> { + .setNegativeButton((!isVideo ? getString("ThisPhoto", R.string.ThisPhoto) : getString("ThisMedia", R.string.ThisMedia)), (di, a) -> { if (currentMessageObject == null) { return; } @@ -4835,7 +4856,7 @@ public void onItemClick(int id) { } } }) - .setNeutralButton(LocaleController.getString("Cancel", R.string.Cancel), (di, a) -> { + .setNeutralButton(getString("Cancel", R.string.Cancel), (di, a) -> { di.dismiss(); }).create(); dialog.setBackgroundColor(getThemedColor(Theme.key_voipgroup_dialogBackground)); @@ -4930,10 +4951,10 @@ public void onItemClick(int id) { } AlertDialog dialog = new AlertDialog.Builder(parentActivity, resourcesProvider) - .setTitle(LocaleController.getString("ForwardGroupMedia", R.string.ForwardGroupMedia)) - .setMessage(LocaleController.getString("ForwardGroupMediaMessage", R.string.ForwardGroupMediaMessage)) + .setTitle(getString("ForwardGroupMedia", R.string.ForwardGroupMedia)) + .setMessage(getString("ForwardGroupMediaMessage", R.string.ForwardGroupMediaMessage)) .setDialogButtonColorKey(Theme.key_voipgroup_listeningText) - .setNegativeButton((photos ? LocaleController.getString("ThisPhoto", R.string.ThisPhoto) : LocaleController.getString("ThisMedia", R.string.ThisMedia)), (di, a) -> { + .setNegativeButton((photos ? getString("ThisPhoto", R.string.ThisPhoto) : getString("ThisMedia", R.string.ThisMedia)), (di, a) -> { ArrayList<MessageObject> singleMessage = new ArrayList<>(1); singleMessage.add(currentMessageObject); showShareAlert(singleMessage); @@ -4941,7 +4962,7 @@ public void onItemClick(int id) { .setPositiveButton(photos ? LocaleController.formatPluralString("AllNPhotos", msgs.size()) : LocaleController.formatPluralString("AllNMedia", msgs.size()), (di, a) -> { showShareAlert(msgs); }) - .setNeutralButton(LocaleController.getString("Cancel", R.string.Cancel), (di, a) -> { + .setNeutralButton(getString("Cancel", R.string.Cancel), (di, a) -> { di.dismiss(); }).create(); dialog.setBackgroundColor(getThemedColor(Theme.key_voipgroup_dialogBackground)); @@ -5027,24 +5048,24 @@ public void onItemClick(int id) { AlertDialog.Builder builder = new AlertDialog.Builder(parentActivity); String text = placeProvider.getDeleteMessageString(); if (text != null) { - builder.setTitle(LocaleController.getString("AreYouSureDeletePhotoTitle", R.string.AreYouSureDeletePhotoTitle)); + builder.setTitle(getString("AreYouSureDeletePhotoTitle", R.string.AreYouSureDeletePhotoTitle)); builder.setMessage(text); } else if (isEmbedVideo || currentFileLocationVideo != null && currentFileLocationVideo != currentFileLocation || currentMessageObject != null && currentMessageObject.isVideo()) { - builder.setTitle(LocaleController.getString("AreYouSureDeleteVideoTitle", R.string.AreYouSureDeleteVideoTitle)); + builder.setTitle(getString("AreYouSureDeleteVideoTitle", R.string.AreYouSureDeleteVideoTitle)); if (isChannel) { builder.setMessage(LocaleController.formatString("AreYouSureDeleteVideoEveryone", R.string.AreYouSureDeleteVideoEveryone)); } else { builder.setMessage(LocaleController.formatString("AreYouSureDeleteVideo", R.string.AreYouSureDeleteVideo)); } } else if (currentMessageObject != null && currentMessageObject.isGif()) { - builder.setTitle(LocaleController.getString("AreYouSureDeleteGIFTitle", R.string.AreYouSureDeleteGIFTitle)); + builder.setTitle(getString("AreYouSureDeleteGIFTitle", R.string.AreYouSureDeleteGIFTitle)); if (isChannel) { builder.setMessage(LocaleController.formatString("AreYouSureDeleteGIFEveryone", R.string.AreYouSureDeleteGIFEveryone)); } else { builder.setMessage(LocaleController.formatString("AreYouSureDeleteGIF", R.string.AreYouSureDeleteGIF)); } } else { - builder.setTitle(LocaleController.getString("AreYouSureDeletePhotoTitle", R.string.AreYouSureDeletePhotoTitle)); + builder.setTitle(getString("AreYouSureDeletePhotoTitle", R.string.AreYouSureDeletePhotoTitle)); if (isChannel) { builder.setMessage(LocaleController.formatString("AreYouSureDeletePhotoEveryone", R.string.AreYouSureDeletePhotoEveryone)); } else { @@ -5083,7 +5104,7 @@ public void onItemClick(int id) { CheckBoxCell cell = new CheckBoxCell(parentActivity, 1, resourcesProvider); cell.setBackgroundDrawable(Theme.getSelectorDrawable(false)); if (currentChat != null) { - cell.setText(LocaleController.getString("DeleteForAll", R.string.DeleteForAll), "", false, false); + cell.setText(getString("DeleteForAll", R.string.DeleteForAll), "", false, false); } else { cell.setText(LocaleController.formatString("DeleteForUser", R.string.DeleteForUser, UserObject.getFirstName(currentUser)), "", false, false); } @@ -5101,7 +5122,7 @@ public void onItemClick(int id) { } } } - builder.setPositiveButton(LocaleController.getString("Delete", R.string.Delete), (dialogInterface, i) -> { + builder.setPositiveButton(getString("Delete", R.string.Delete), (dialogInterface, i) -> { if (!placeProvider.onDeletePhoto(currentIndex)) { closePhoto(false, false); return; @@ -5201,7 +5222,7 @@ public void onItemClick(int id) { } } }); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder.setNegativeButton(getString("Cancel", R.string.Cancel), null); AlertDialog alertDialog = builder.create(); showAlertDialog(builder); TextView button = (TextView) alertDialog.getButton(DialogInterface.BUTTON_POSITIVE); @@ -5449,15 +5470,22 @@ public boolean canOpenMenu() { menu.setOnLayoutListener(this::updateActionBarTitlePadding); masksItem = menu.addItem(gallery_menu_masks, R.drawable.msg_mask); - masksItem.setContentDescription(LocaleController.getString("Masks", R.string.Masks)); + masksItem.setContentDescription(getString("Masks", R.string.Masks)); pipItem = menu.addItem(gallery_menu_pip, R.drawable.ic_goinline); - pipItem.setContentDescription(LocaleController.getString("AccDescrPipMode", R.string.AccDescrPipMode)); + pipItem.setContentDescription(getString("AccDescrPipMode", R.string.AccDescrPipMode)); editItem = menu.addItem(gallery_menu_paint, R.drawable.msg_header_draw); - editItem.setContentDescription(LocaleController.getString("AccDescrPhotoEditor", R.string.AccDescrPhotoEditor)); + editItem.setContentDescription(getString("AccDescrPhotoEditor", R.string.AccDescrPhotoEditor)); sendItem = menu.addItem(gallery_menu_send, R.drawable.msg_header_share); - sendItem.setContentDescription(LocaleController.getString("Forward", R.string.Forward)); + sendItem.setContentDescription(getString("Forward", R.string.Forward)); menuItem = menu.addItem(0, menuItemIcon = new OptionsSpeedIconDrawable()); + menuItem.setOnClickListener(v -> { + if (currentMessageObject != null && currentMessageObject.isSponsored()) { + openAdsMenu(); + } else if (actionBar.actionBarMenuOnItemClick.canOpenMenu()) { + menuItem.toggleSubMenu(); + } + }); menuItem.setOnMenuDismiss(byClick -> checkProgress(0, false, false)); menuItem.getPopupLayout().swipeBackGravityRight = true; @@ -5488,30 +5516,30 @@ public void onSpeedSelected(float speed, boolean isFinal, boolean closeMenu) { } } }); - speedItem = menuItem.addSwipeBackItem(R.drawable.msg_speed, null, LocaleController.getString("Speed", R.string.Speed), chooseSpeedLayout.speedSwipeBackLayout); + speedItem = menuItem.addSwipeBackItem(R.drawable.msg_speed, null, getString("Speed", R.string.Speed), chooseSpeedLayout.speedSwipeBackLayout); menuItem.getPopupLayout().setSwipeBackForegroundColor(0xff222222); - speedItem.setSubtext(LocaleController.getString("SpeedNormal", R.string.SpeedNormal)); + speedItem.setSubtext(getString("SpeedNormal", R.string.SpeedNormal)); speedItem.setColors(0xfffafafa, 0xfffafafa); speedGap = menuItem.addColoredGap(); speedGap.setColor(0xff181818); menuItem.getPopupLayout().setFitItems(true); - menuItem.addSubItem(gallery_menu_openin, R.drawable.msg_openin, LocaleController.getString("OpenInExternalApp", R.string.OpenInExternalApp)).setColors(0xfffafafa, 0xfffafafa); - menuItem.setContentDescription(LocaleController.getString("AccDescrMoreOptions", R.string.AccDescrMoreOptions)); - allMediaItem = menuItem.addSubItem(gallery_menu_showall, R.drawable.msg_media, LocaleController.getString(R.string.ShowAllMedia)); + menuItem.addSubItem(gallery_menu_openin, R.drawable.msg_openin, getString("OpenInExternalApp", R.string.OpenInExternalApp)).setColors(0xfffafafa, 0xfffafafa); + menuItem.setContentDescription(getString("AccDescrMoreOptions", R.string.AccDescrMoreOptions)); + allMediaItem = menuItem.addSubItem(gallery_menu_showall, R.drawable.msg_media, getString(R.string.ShowAllMedia)); allMediaItem.setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_savegif, R.drawable.msg_gif, LocaleController.getString("SaveToGIFs", R.string.SaveToGIFs)).setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_showinchat, R.drawable.msg_message, LocaleController.getString("ShowInChat", R.string.ShowInChat)).setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_masks2, R.drawable.msg_sticker, LocaleController.getString("ShowStickers", R.string.ShowStickers)).setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_reply, R.drawable.menu_reply, LocaleController.getString(R.string.Reply)).setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_share, R.drawable.msg_shareout, LocaleController.getString("ShareFile", R.string.ShareFile)).setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_save, R.drawable.msg_gallery, LocaleController.getString("SaveToGallery", R.string.SaveToGallery)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_savegif, R.drawable.msg_gif, getString("SaveToGIFs", R.string.SaveToGIFs)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_showinchat, R.drawable.msg_message, getString("ShowInChat", R.string.ShowInChat)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_save, R.drawable.msg_gallery, getString("SaveToGallery", R.string.SaveToGallery)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_reply, R.drawable.menu_reply, getString(R.string.Reply)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_share, R.drawable.msg_shareout, getString("ShareFile", R.string.ShareFile)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_masks2, R.drawable.msg_sticker, getString("ShowStickers", R.string.ShowStickers)).setColors(0xfffafafa, 0xfffafafa); //menuItem.addSubItem(gallery_menu_edit_avatar, R.drawable.photo_paint, LocaleController.getString("EditPhoto", R.string.EditPhoto)).setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_set_as_main, R.drawable.msg_openprofile, LocaleController.getString("SetAsMain", R.string.SetAsMain)).setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_translate, R.drawable.msg_translate, LocaleController.getString(R.string.TranslateMessage)).setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_hide_translation, R.drawable.msg_translate, LocaleController.getString(R.string.HideTranslation)).setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_delete, R.drawable.msg_delete, LocaleController.getString("Delete", R.string.Delete)).setColors(0xfffafafa, 0xfffafafa); - menuItem.addSubItem(gallery_menu_cancel_loading, R.drawable.msg_cancel, LocaleController.getString("StopDownload", R.string.StopDownload)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_set_as_main, R.drawable.msg_openprofile, getString("SetAsMain", R.string.SetAsMain)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_translate, R.drawable.msg_translate, getString(R.string.TranslateMessage)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_hide_translation, R.drawable.msg_translate, getString(R.string.HideTranslation)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_delete, R.drawable.msg_delete, getString("Delete", R.string.Delete)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_cancel_loading, R.drawable.msg_cancel, getString("StopDownload", R.string.StopDownload)).setColors(0xfffafafa, 0xfffafafa); menuItem.redrawPopup(0xf9222222); menuItem.hideSubItem(gallery_menu_translate); menuItem.hideSubItem(gallery_menu_hide_translation); @@ -5638,7 +5666,7 @@ public boolean forceAll() { for (int a = 0; a < 3; a++) { fullscreenButton[a] = new ImageView(parentActivity); fullscreenButton[a].setImageResource(R.drawable.msg_maxvideo); - fullscreenButton[a].setContentDescription(LocaleController.getString("AccSwitchToFullscreen", R.string.AccSwitchToFullscreen)); + fullscreenButton[a].setContentDescription(getString("AccSwitchToFullscreen", R.string.AccSwitchToFullscreen)); fullscreenButton[a].setScaleType(ImageView.ScaleType.CENTER); fullscreenButton[a].setBackground(Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); fullscreenButton[a].setVisibility(View.INVISIBLE); @@ -5732,7 +5760,7 @@ public void invalidate() { qualityPicker.setBackgroundColor(0x7f000000); qualityPicker.updateSelectedCount(0, false); qualityPicker.setTranslationY(dp(120)); - qualityPicker.doneButton.setText(LocaleController.getString("Done", R.string.Done).toUpperCase()); + qualityPicker.doneButton.setText(getString("Done", R.string.Done).toUpperCase()); qualityPicker.doneButton.setTextColor(getThemedColor(Theme.key_chat_editMediaButton)); containerView.addView(qualityPicker, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.BOTTOM | Gravity.LEFT)); qualityPicker.cancelButton.setOnClickListener(view -> { @@ -5878,7 +5906,7 @@ protected void onLayout(boolean changed, int left, int top, int right, int botto doneButtonFullWidth.setGravity(Gravity.CENTER); doneButtonFullWidth.setLines(1); doneButtonFullWidth.setSingleLine(true); - doneButtonFullWidth.setText(LocaleController.getString("SetAsMyPhoto", R.string.SetAsMyPhoto)); + doneButtonFullWidth.setText(getString("SetAsMyPhoto", R.string.SetAsMyPhoto)); doneButtonFullWidth.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15); doneButtonFullWidth.setTypeface(AndroidUtilities.bold()); doneButtonFullWidth.setOnClickListener(v -> sendPressed(false, 0)); @@ -6387,7 +6415,7 @@ public void setTranslationY(float translationY) { videoAvatarTooltip = new TextView(parentActivity); videoAvatarTooltip.setSingleLine(true); videoAvatarTooltip.setVisibility(View.GONE); - videoAvatarTooltip.setText(LocaleController.getString("ChooseCover", R.string.ChooseCover)); + videoAvatarTooltip.setText(getString("ChooseCover", R.string.ChooseCover)); videoAvatarTooltip.setGravity(Gravity.CENTER_HORIZONTAL); videoAvatarTooltip.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); videoAvatarTooltip.setTextColor(0xff8c8c8c); @@ -6400,7 +6428,7 @@ public void setTranslationY(float translationY) { pickerViewSendButton.setImageResource(R.drawable.msg_input_send_mini); pickerViewSendButton.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_dialogFloatingIcon), PorterDuff.Mode.MULTIPLY)); containerView.addView(pickerViewSendButton, LayoutHelper.createFrame(48, 48, Gravity.RIGHT | Gravity.BOTTOM, 0, 0, 14, 2.33f)); - pickerViewSendButton.setContentDescription(LocaleController.getString("Send", R.string.Send)); + pickerViewSendButton.setContentDescription(getString("Send", R.string.Send)); ScaleStateListAnimator.apply(pickerViewSendButton); pickerViewSendButton.setOnClickListener(v -> { if (captionEdit.isCaptionOverLimit()) { @@ -6455,11 +6483,15 @@ public void setTranslationY(float translationY) { sendPopupLayout.setShownFromBottom(false); sendPopupLayout.setBackgroundColor(0xf9222222); + final boolean canEdit = placeProvider != null && placeProvider.canEdit(currentIndex); final boolean canReplace = placeProvider != null && placeProvider.canReplace(currentIndex); final int[] order = {4, 3, 2, 0, 1}; for (int i = 0; i < 5; i++) { final int a = order[i]; - if (a != 2 && a != 3 && canReplace) { + if (a != 2 && a != 3 && canEdit && canReplace) { + continue; + } + if (a != 1 && canEdit && !canReplace) { continue; } if (a == 0 && !parentChatActivity.canScheduleMessage()) { @@ -6497,21 +6529,21 @@ public void setTranslationY(float translationY) { ActionBarMenuSubItem cell = new ActionBarMenuSubItem(parentActivity, a == 0, a == 3, resourcesProvider); if (a == 0) { if (UserObject.isUserSelf(user)) { - cell.setTextAndIcon(LocaleController.getString("SetReminder", R.string.SetReminder), R.drawable.msg_calendar2); + cell.setTextAndIcon(getString("SetReminder", R.string.SetReminder), R.drawable.msg_calendar2); } else { - cell.setTextAndIcon(LocaleController.getString("ScheduleMessage", R.string.ScheduleMessage), R.drawable.msg_calendar2); + cell.setTextAndIcon(getString("ScheduleMessage", R.string.ScheduleMessage), R.drawable.msg_calendar2); } } else if (a == 1) { - cell.setTextAndIcon(LocaleController.getString("SendWithoutSound", R.string.SendWithoutSound), R.drawable.input_notify_off); + cell.setTextAndIcon(getString("SendWithoutSound", R.string.SendWithoutSound), R.drawable.input_notify_off); } else if (a == 2) { - cell.setTextAndIcon(LocaleController.getString("ReplacePhoto", R.string.ReplacePhoto), R.drawable.msg_replace); + cell.setTextAndIcon(getString("ReplacePhoto", R.string.ReplacePhoto), R.drawable.msg_replace); } else if (a == 3) { - cell.setTextAndIcon(LocaleController.getString("SendAsNewPhoto", R.string.SendAsNewPhoto), R.drawable.msg_send); + cell.setTextAndIcon(getString("SendAsNewPhoto", R.string.SendAsNewPhoto), R.drawable.msg_send); } else if (a == 4) { if (placeProvider != null && placeProvider.getSelectedCount() > 1) { - cell.setTextAndIcon(LocaleController.getString(R.string.SendAsFiles), R.drawable.msg_sendfile); + cell.setTextAndIcon(getString(R.string.SendAsFiles), R.drawable.msg_sendfile); } else { - cell.setTextAndIcon(LocaleController.getString(R.string.SendAsFile), R.drawable.msg_sendfile); + cell.setTextAndIcon(getString(R.string.SendAsFile), R.drawable.msg_sendfile); } } cell.setMinimumWidth(dp(196)); @@ -6632,7 +6664,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } switchToEditMode(EDIT_MODE_CROP); }); - cropItem.setContentDescription(LocaleController.getString("CropImage", R.string.CropImage)); + cropItem.setContentDescription(getString("CropImage", R.string.CropImage)); rotateItem = new ImageView(parentActivity); rotateItem.setScaleType(ImageView.ScaleType.CENTER); @@ -6640,7 +6672,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { rotateItem.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); itemsLayout.addView(rotateItem, LayoutHelper.createLinear(48, 48)); rotateItem.setOnClickListener(v -> cropRotate(-90)); - rotateItem.setContentDescription(LocaleController.getString("AccDescrRotate", R.string.AccDescrRotate)); + rotateItem.setContentDescription(getString("AccDescrRotate", R.string.AccDescrRotate)); mirrorItem = new ImageView(parentActivity); mirrorItem.setScaleType(ImageView.ScaleType.CENTER); @@ -6648,7 +6680,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { mirrorItem.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); itemsLayout.addView(mirrorItem, LayoutHelper.createLinear(48, 48)); mirrorItem.setOnClickListener(v -> cropMirror()); - mirrorItem.setContentDescription(LocaleController.getString("AccDescrMirror", R.string.AccDescrMirror)); + mirrorItem.setContentDescription(getString("AccDescrMirror", R.string.AccDescrMirror)); paintItem = new ImageView(parentActivity); paintItem.setScaleType(ImageView.ScaleType.CENTER); @@ -6675,7 +6707,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } switchToEditMode(EDIT_MODE_PAINT); }); - paintItem.setContentDescription(LocaleController.getString("AccDescrPhotoEditor", R.string.AccDescrPhotoEditor)); + paintItem.setContentDescription(getString("AccDescrPhotoEditor", R.string.AccDescrPhotoEditor)); muteItem = new ImageView(parentActivity); muteItem.setScaleType(ImageView.ScaleType.CENTER); @@ -6704,7 +6736,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { selectedCompression = selectCompression(); compressItem.setState(videoConvertSupported && compressionsCount > 1, muteVideo, Math.min(resultWidth, resultHeight)); - compressItem.setContentDescription(LocaleController.getString("AccDescrVideoQuality", R.string.AccDescrVideoQuality)); + compressItem.setContentDescription(getString("AccDescrVideoQuality", R.string.AccDescrVideoQuality)); itemsLayout.addView(compressItem, LayoutHelper.createLinear(48, 48)); compressItem.setOnClickListener(v -> { if (isCaptionOpen() || muteVideo) { @@ -6715,7 +6747,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (tooltip == null) { tooltip = new Tooltip(activity, containerView, 0xcc111111, Color.WHITE); } - tooltip.setText(LocaleController.getString("VideoQualityIsTooLow", R.string.VideoQualityIsTooLow)); + tooltip.setText(getString("VideoQualityIsTooLow", R.string.VideoQualityIsTooLow)); tooltip.show(compressItem); } return; @@ -6750,7 +6782,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } switchToEditMode(EDIT_MODE_FILTER); }); - tuneItem.setContentDescription(LocaleController.getString("AccDescrPhotoAdjust", R.string.AccDescrPhotoAdjust)); + tuneItem.setContentDescription(getString("AccDescrPhotoAdjust", R.string.AccDescrPhotoAdjust)); editorDoneLayout = new PickerBottomLayoutViewer(activityContext); editorDoneLayout.setBackgroundColor(0xcc000000); @@ -6805,7 +6837,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { resetButton.setGravity(Gravity.CENTER); resetButton.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.ACTION_BAR_PICKER_SELECTOR_COLOR, 0)); resetButton.setPadding(dp(20), 0, dp(20), 0); - resetButton.setText(LocaleController.getString("Reset", R.string.CropReset).toUpperCase()); + resetButton.setText(getString("Reset", R.string.CropReset).toUpperCase()); resetButton.setTypeface(AndroidUtilities.bold()); editorDoneLayout.addView(resetButton, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.CENTER)); resetButton.setOnClickListener(v -> { @@ -6931,7 +6963,7 @@ protected int calculateTimeForDeceleration(int dx) { if (AndroidUtilities.isAccessibilityScreenReaderEnabled()) { playButtonAccessibilityOverlay = new View(activityContext); - playButtonAccessibilityOverlay.setContentDescription(LocaleController.getString("AccActionPlay", R.string.AccActionPlay)); + playButtonAccessibilityOverlay.setContentDescription(getString("AccActionPlay", R.string.AccActionPlay)); playButtonAccessibilityOverlay.setFocusable(true); containerView.addView(playButtonAccessibilityOverlay, LayoutHelper.createFrame(64, 64, Gravity.CENTER)); } @@ -7048,14 +7080,14 @@ private void sendPressed(boolean notify, int scheduleDate, boolean replace, bool String confirmMessage; if (setAvatarFor.type == ImageUpdater.TYPE_SET_PHOTO_FOR_USER) { if (UserConfig.getInstance(currentAccount).clientUserId == dialog_id) { - builder.setMessage(AndroidUtilities.replaceTags(LocaleController.getString("SetUserPhotoSelfAlertMessage", R.string.SetUserPhotoSelfAlertMessage))); + builder.setMessage(AndroidUtilities.replaceTags(getString("SetUserPhotoSelfAlertMessage", R.string.SetUserPhotoSelfAlertMessage))); } else { builder.setMessage(AndroidUtilities.replaceTags(LocaleController.formatString("SetUserPhotoAlertMessage", R.string.SetUserPhotoAlertMessage, userName, userName))); } if (centerImageIsVideo) { - confirmMessage = LocaleController.getString("SetVideo", R.string.SetVideo); + confirmMessage = getString("SetVideo", R.string.SetVideo); } else { - confirmMessage = LocaleController.getString("SetPhoto", R.string.SetPhoto); + confirmMessage = getString("SetPhoto", R.string.SetPhoto); } } else { if (centerImageIsVideo) { @@ -7063,9 +7095,9 @@ private void sendPressed(boolean notify, int scheduleDate, boolean replace, bool } else { builder.setMessage(AndroidUtilities.replaceTags(LocaleController.formatString("SuggestPhotoAlertMessage", R.string.SuggestPhotoAlertMessage, userName))); } - confirmMessage = LocaleController.getString("SuggestPhotoShort", R.string.SuggestPhotoShort); + confirmMessage = getString("SuggestPhotoShort", R.string.SuggestPhotoShort); } - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), (dialog, which) -> { + builder.setNegativeButton(getString("Cancel", R.string.Cancel), (dialog, which) -> { }); builder.setPositiveButton(confirmMessage, (dialog, which) -> { @@ -7137,11 +7169,11 @@ public void onDismiss(DialogInterface dialog) { if (parentChatActivity != null && parentChatActivity.getCurrentChat() != null) { boolean isVideo = (isCurrentVideo || videoEditedInfo != null); if (isVideo && !ChatObject.canSendVideo(parentChatActivity.getCurrentChat())) { - BulletinFactory.of(containerView, resourcesProvider).createErrorBulletin(LocaleController.getString(R.string.GlobalAttachVideoRestricted)).show(); + BulletinFactory.of(containerView, resourcesProvider).createErrorBulletin(getString(R.string.GlobalAttachVideoRestricted)).show(); return; } if (!isVideo && !ChatObject.canSendPhoto(parentChatActivity.getCurrentChat())) { - BulletinFactory.of(containerView, resourcesProvider).createErrorBulletin(LocaleController.getString(R.string.GlobalAttachPhotoRestricted)).show(); + BulletinFactory.of(containerView, resourcesProvider).createErrorBulletin(getString(R.string.GlobalAttachPhotoRestricted)).show(); return; } } @@ -7491,15 +7523,15 @@ private void setMenuItemIcon(boolean animated, boolean isFinal) { menuItemIcon.setSpeed(Math.abs(currentVideoSpeed - 1f) < 0.001f ? null : currentVideoSpeed, animated); if (isFinal) { if (Math.abs(currentVideoSpeed - 0.2f) < 0.05f) { - speedItem.setSubtext(LocaleController.getString("VideoSpeedVerySlow", R.string.VideoSpeedVerySlow)); + speedItem.setSubtext(getString("VideoSpeedVerySlow", R.string.VideoSpeedVerySlow)); } else if (Math.abs(currentVideoSpeed - 0.5f) < 0.05f) { - speedItem.setSubtext(LocaleController.getString("VideoSpeedSlow", R.string.VideoSpeedSlow)); + speedItem.setSubtext(getString("VideoSpeedSlow", R.string.VideoSpeedSlow)); } else if (Math.abs(currentVideoSpeed - 1.0f) < 0.05f) { - speedItem.setSubtext(LocaleController.getString("VideoSpeedNormal", R.string.VideoSpeedNormal)); + speedItem.setSubtext(getString("VideoSpeedNormal", R.string.VideoSpeedNormal)); } else if (Math.abs(currentVideoSpeed - 1.5f) < 0.05f) { - speedItem.setSubtext(LocaleController.getString("VideoSpeedFast", R.string.VideoSpeedFast)); + speedItem.setSubtext(getString("VideoSpeedFast", R.string.VideoSpeedFast)); } else if (Math.abs(currentVideoSpeed - 2f) < 0.05f) { - speedItem.setSubtext(LocaleController.getString("VideoSpeedVeryFast", R.string.VideoSpeedVeryFast)); + speedItem.setSubtext(getString("VideoSpeedVeryFast", R.string.VideoSpeedVeryFast)); } else { speedItem.setSubtext(LocaleController.formatString("VideoSpeedCustom", R.string.VideoSpeedCustom, SpeedIconDrawable.formatNumber(currentVideoSpeed) + "x")); } @@ -8491,7 +8523,7 @@ public void setVisibility(int visibility) { exitFullscreenButton = new ImageView(containerView.getContext()); exitFullscreenButton.setImageResource(R.drawable.msg_minvideo); - exitFullscreenButton.setContentDescription(LocaleController.getString("AccExitFullscreen", R.string.AccExitFullscreen)); + exitFullscreenButton.setContentDescription(getString("AccExitFullscreen", R.string.AccExitFullscreen)); exitFullscreenButton.setScaleType(ImageView.ScaleType.CENTER); exitFullscreenButton.setBackground(Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); exitFullscreenButton.setVisibility(View.INVISIBLE); @@ -8834,7 +8866,7 @@ private void checkBufferedProgress(float progress) { if (autoDownload && progress < 0.9f && (document.size * progress >= 5 * 1024 * 1024 || progress >= 0.5f && document.size >= 2 * 1024 * 1024) && Math.abs(SystemClock.elapsedRealtime() - startedPlayTime) >= (bigFile ? 10000 : 3000)) { long duration = videoPlayer.getDuration(); if (duration == C.TIME_UNSET) { - Toast toast = Toast.makeText(parentActivity, LocaleController.getString(R.string.VideoDoesNotSupportStreaming), Toast.LENGTH_LONG); + Toast toast = Toast.makeText(parentActivity, getString(R.string.VideoDoesNotSupportStreaming), Toast.LENGTH_LONG); toast.show(); } streamingAlertShown = true; @@ -9295,9 +9327,9 @@ public void onError(VideoPlayer player, Exception e) { return; } AlertDialog.Builder builder = new AlertDialog.Builder(parentActivity, resourcesProvider); - builder.setTitle(LocaleController.getString("AppName", R.string.AppName)); - builder.setMessage(LocaleController.getString("CantPlayVideo", R.string.CantPlayVideo)); - builder.setPositiveButton(LocaleController.getString("Open", R.string.Open), (dialog, which) -> { + builder.setTitle(getString("AppName", R.string.AppName)); + builder.setMessage(getString("CantPlayVideo", R.string.CantPlayVideo)); + builder.setPositiveButton(getString("Open", R.string.Open), (dialog, which) -> { try { AndroidUtilities.openForView(currentMessageObject, parentActivity, resourcesProvider, true); closePhoto(false, false); @@ -9305,7 +9337,7 @@ public void onError(VideoPlayer player, Exception e) { FileLog.e(e1); } }); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder.setNegativeButton(getString("Cancel", R.string.Cancel), null); showAlertDialog(builder); } @@ -10413,7 +10445,7 @@ private void setPhotoChecked() { if (allowOrder && parentChatActivity != null) { TLRPC.Chat chat = parentChatActivity.getCurrentChat(); if (chat != null && !ChatObject.hasAdminRights(chat) && chat.slowmode_enabled) { - AlertsCreator.createSimpleAlert(parentActivity, LocaleController.getString("Slowmode", R.string.Slowmode), LocaleController.getString("SlowmodeSelectSendError", R.string.SlowmodeSelectSendError)).show(); + AlertsCreator.createSimpleAlert(parentActivity, getString("Slowmode", R.string.Slowmode), getString("SlowmodeSelectSendError", R.string.SlowmodeSelectSendError)).show(); } } return; @@ -10951,7 +10983,7 @@ public void onAnimationEnd(Animator animation) { previousCropMirrored = cropTransform.isMirrored(); photoCropView.onAppear(); - editorDoneLayout.doneButton.setText(LocaleController.getString("Crop", R.string.Crop)); + editorDoneLayout.doneButton.setText(getString("Crop", R.string.Crop)); editorDoneLayout.doneButton.setTextColor(getThemedColor(Theme.key_chat_editMediaButton)); changeModeAnimation = new AnimatorSet(); @@ -11141,10 +11173,10 @@ public void onAnimationEnd(Animator animation) { return; } AlertDialog.Builder builder = new AlertDialog.Builder(parentActivity, resourcesProvider); - builder.setMessage(LocaleController.getString("DiscardChanges", R.string.DiscardChanges)); - builder.setTitle(LocaleController.getString("AppName", R.string.AppName)); - builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), (dialogInterface, i) -> switchToEditMode(0)); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder.setMessage(getString("DiscardChanges", R.string.DiscardChanges)); + builder.setTitle(getString("AppName", R.string.AppName)); + builder.setPositiveButton(getString("OK", R.string.OK), (dialogInterface, i) -> switchToEditMode(0)); + builder.setNegativeButton(getString("Cancel", R.string.Cancel), null); showAlertDialog(builder); } else { switchToEditMode(EDIT_MODE_NONE); @@ -12187,7 +12219,27 @@ private ImageLocation getImageLocation(int index, long[] size) { size[0] = -1; } } - } else if (MessageObject.getMedia(message.messageOwner) instanceof TLRPC.TL_messageMediaPhoto && MessageObject.getMedia(message.messageOwner).photo != null || MessageObject.getMedia(message.messageOwner) instanceof TLRPC.TL_messageMediaWebPage && MessageObject.getMedia(message.messageOwner).webpage != null) { + } else if (message.sponsoredMedia != null) { + if (message.sponsoredMedia.document != null) { + return ImageLocation.getForDocument(message.sponsoredMedia.document); + } else if (message.sponsoredMedia.photo != null) { + final TLRPC.PhotoSize sizeFull = FileLoader.getClosestPhotoSizeWithSize(message.sponsoredMedia.photo.sizes, AndroidUtilities.getPhotoSize(), false, null, true); + if (sizeFull != null) { + if (size != null) { + size[0] = sizeFull.size; + if (size[0] == 0) { + size[0] = -1; + } + } + return ImageLocation.getForObject(sizeFull, message.sponsoredMedia.photo); + } else if (size != null) { + size[0] = -1; + } + } + } else if ( + MessageObject.getMedia(message.messageOwner) instanceof TLRPC.TL_messageMediaPhoto && MessageObject.getMedia(message.messageOwner).photo != null || + MessageObject.getMedia(message.messageOwner) instanceof TLRPC.TL_messageMediaWebPage && MessageObject.getMedia(message.messageOwner).webpage != null + ) { if (message.isGif()) { return ImageLocation.getForDocument(message.getDocument()); } else { @@ -12272,6 +12324,30 @@ private TLObject getFileLocation(int index, long[] size) { size[0] = -1; } } + } else if (message.sponsoredMedia != null) { + if (message.sponsoredMedia.document != null) { + TLRPC.PhotoSize thumb = FileLoader.getClosestPhotoSizeWithSize(message.sponsoredMedia.document.thumbs, 90); + if (size != null) { + size[0] = thumb.size; + if (size[0] == 0) { + size[0] = -1; + } + } + return thumb; + } else if (message.sponsoredMedia.photo != null) { + TLRPC.PhotoSize sizeFull = FileLoader.getClosestPhotoSizeWithSize(message.sponsoredMedia.photo.sizes, AndroidUtilities.getPhotoSize(), false, null, true); + if (sizeFull != null) { + if (size != null) { + size[0] = sizeFull.size; + if (size[0] == 0) { + size[0] = -1; + } + } + return sizeFull; + } else if (size != null) { + size[0] = -1; + } + } } else if (MessageObject.getMedia(message.messageOwner) instanceof TLRPC.TL_messageMediaPhoto && MessageObject.getMedia(message.messageOwner).photo != null || MessageObject.getMedia(message.messageOwner) instanceof TLRPC.TL_messageMediaWebPage && MessageObject.getMedia(message.messageOwner).webpage != null) { TLRPC.FileLocation location; TLRPC.PhotoSize sizeFull = FileLoader.getClosestPhotoSizeWithSize(message.photoThumbs, AndroidUtilities.getPhotoSize(), false, null, true); @@ -12428,7 +12504,7 @@ private void onPhotoShow(final MessageObject messageObject, final TLRPC.FileLoca currentThumb = object != null ? object.thumb : null; isEvent = object != null && object.isEvent; sharedMediaType = MediaDataController.MEDIA_PHOTOVIDEO; - allMediaItem.setText(LocaleController.getString("ShowAllMedia", R.string.ShowAllMedia)); + allMediaItem.setText(getString("ShowAllMedia", R.string.ShowAllMedia)); setItemVisible(sendItem, false, false); setItemVisible(pipItem, false, true); if (photoCropView != null) { @@ -12591,10 +12667,10 @@ private void onPhotoShow(final MessageObject messageObject, final TLRPC.FileLoca } if (messageObject.canPreviewDocument()) { sharedMediaType = MediaDataController.MEDIA_FILE; - allMediaItem.setText(LocaleController.getString("ShowAllFiles", R.string.ShowAllFiles)); + allMediaItem.setText(getString("ShowAllFiles", R.string.ShowAllFiles)); } else if (messageObject.isGif()) { sharedMediaType = MediaDataController.MEDIA_GIF; - allMediaItem.setText(LocaleController.getString("ShowAllGIFs", R.string.ShowAllGIFs)); + allMediaItem.setText(getString("ShowAllGIFs", R.string.ShowAllGIFs)); } if (isEmbedVideo && !(photoViewerWebView != null && photoViewerWebView.isControllable())) { bottomLayout.setTag(null); @@ -12609,7 +12685,7 @@ private void onPhotoShow(final MessageObject messageObject, final TLRPC.FileLoca if (messageObject.canForwardMessage() && !noforwards) { setItemVisible(sendItem, true, false); } - } else if (!messageObject.scheduled && !messageObject.isQuickReply() && !(MessageObject.getMedia(messageObject.messageOwner) instanceof TLRPC.TL_messageMediaInvoice) && !(MessageObject.getMedia(messageObject.messageOwner) instanceof TLRPC.TL_messageMediaWebPage) && (messageObject.messageOwner.action == null || messageObject.messageOwner.action instanceof TLRPC.TL_messageActionEmpty)) { + } else if (!messageObject.scheduled && !messageObject.isQuickReply() && !messageObject.isSponsored() && !(MessageObject.getMedia(messageObject.messageOwner) instanceof TLRPC.TL_messageMediaInvoice) && !(MessageObject.getMedia(messageObject.messageOwner) instanceof TLRPC.TL_messageMediaWebPage) && (messageObject.messageOwner.action == null || messageObject.messageOwner.action instanceof TLRPC.TL_messageActionEmpty)) { needSearchImageInArr = true; imagesByIds[0].put(messageObject.getId(), messageObject); if (parentChatActivity == null || !parentChatActivity.isThreadChat() && parentChatActivity.getChatMode() != ChatActivity.MODE_SAVED && parentChatActivity.getChatMode() != ChatActivity.MODE_QUICK_REPLIES) { @@ -12686,7 +12762,7 @@ private void onPhotoShow(final MessageObject messageObject, final TLRPC.FileLoca imagesByIds[message.getDialogId() == currentDialogId ? 0 : 1].put(message.getId(), message); } MessageObject openingObject = imagesArr.get(index); - if (!openingObject.scheduled && !openingObject.isQuickReply() && (parentChatActivity == null || !parentChatActivity.isThreadChat())) { + if (!openingObject.scheduled && !openingObject.isQuickReply() && !openingObject.isSponsored() && (parentChatActivity == null || !parentChatActivity.isThreadChat())) { opennedFromMedia = parentChatActivity == null; if (parentFragment instanceof ProfileActivity) { openedFromProfile = true; @@ -12711,10 +12787,10 @@ private void onPhotoShow(final MessageObject messageObject, final TLRPC.FileLoca } if (openingObject.canPreviewDocument()) { sharedMediaType = MediaDataController.MEDIA_FILE; - allMediaItem.setText(LocaleController.getString("ShowAllFiles", R.string.ShowAllFiles)); + allMediaItem.setText(getString("ShowAllFiles", R.string.ShowAllFiles)); } else if (openingObject.isGif()) { sharedMediaType = MediaDataController.MEDIA_GIF; - allMediaItem.setText(LocaleController.getString("ShowAllGIFs", R.string.ShowAllGIFs)); + allMediaItem.setText(getString("ShowAllGIFs", R.string.ShowAllGIFs)); } } else { totalImagesCount = imagesArr.size(); @@ -12956,7 +13032,7 @@ private void setIsAboutToSwitchToIndex(int index, boolean init, boolean animated title = FilteredSearchView.createFromInfoString(newMessageObject, opennedFromMedia && !openedFromProfile, 0); CharSequence subtitle = null; - if (!newMessageObject.isQuickReply() && newMessageObject.messageOwner != null) { + if (!newMessageObject.isQuickReply() && !newMessageObject.isSponsored() && newMessageObject.messageOwner != null) { subtitle = LocaleController.formatDateAudio(newMessageObject.messageOwner.date, false); } actionBarContainer.setSubtitle(subtitle, animated); @@ -13073,7 +13149,7 @@ private void setIsAboutToSwitchToIndex(int index, boolean init, boolean animated setItemVisible(editItem, canPaint, animated && !pipItemVisible && !shouldMasksItemBeVisible); setItemVisible(masksItem, shouldMasksItemBeVisible, !pipItemVisible); } - String restrictionReason = MessagesController.getRestrictionReason(newMessageObject.messageOwner.restriction_reason); + String restrictionReason = MessagesController.getInstance(newMessageObject.currentAccount).getRestrictionReason(newMessageObject.messageOwner.restriction_reason); if (!TextUtils.isEmpty(restrictionReason)) { caption = restrictionReason; } else if (captionTranslated && newMessageObject.messageOwner != null && newMessageObject.messageOwner.translatedText != null && TextUtils.equals(newMessageObject.messageOwner.translatedToLanguage, TranslateAlert2.getToLanguage())) { @@ -13093,7 +13169,11 @@ private void setIsAboutToSwitchToIndex(int index, boolean init, boolean animated } allowShare = !noforwards; } - if (parentChatActivity != null && parentChatActivity.getChatMode() == ChatActivity.MODE_QUICK_REPLIES) { + if (newMessageObject.isSponsored()) { + if (countView != null) { + countView.updateShow(false, animated); + } + } else if (parentChatActivity != null && parentChatActivity.getChatMode() == ChatActivity.MODE_QUICK_REPLIES) { if (countView != null) { countView.updateShow(false, animated); } @@ -13158,13 +13238,13 @@ private void setIsAboutToSwitchToIndex(int index, boolean init, boolean animated if (isEmbedVideo) { title = "YouTube"; } else if (newMessageObject.canPreviewDocument()) { - title = LocaleController.getString("AttachDocument", R.string.AttachDocument); + title = getString("AttachDocument", R.string.AttachDocument); } else if (newMessageObject.isVideo()) { - title = LocaleController.getString("AttachVideo", R.string.AttachVideo); + title = getString("AttachVideo", R.string.AttachVideo); } else if (newMessageObject.isGif()) { - title = LocaleController.getString("AttachGif", R.string.AttachGif); + title = getString("AttachGif", R.string.AttachGif); } else { - title = LocaleController.getString("AttachPhoto", R.string.AttachPhoto); + title = getString("AttachPhoto", R.string.AttachPhoto); } } else if (isInvoice) { if (countView != null) { @@ -13175,17 +13255,17 @@ private void setIsAboutToSwitchToIndex(int index, boolean init, boolean animated if (countView != null) { countView.updateShow(false, animated); } - title = LocaleController.getString("AttachVideo", R.string.AttachVideo); + title = getString("AttachVideo", R.string.AttachVideo); } else if (newMessageObject.isGif()) { if (countView != null) { countView.updateShow(false, animated); } - title = LocaleController.getString("AttachGif", R.string.AttachGif); + title = getString("AttachGif", R.string.AttachGif); } else if (newMessageObject.getDocument() != null) { if (countView != null) { countView.updateShow(false, animated); } - title = LocaleController.getString("AttachDocument", R.string.AttachDocument); + title = getString("AttachDocument", R.string.AttachDocument); } if (DialogObject.isEncryptedDialog(currentDialogId) && !isEmbedVideo || noforwards) { setItemVisible(sendItem, false, false); @@ -13271,7 +13351,7 @@ private void setIsAboutToSwitchToIndex(int index, boolean init, boolean animated if (customTitle != null) { title = customTitle; } else if (isEvent) { - title = LocaleController.getString("AttachPhoto", R.string.AttachPhoto); + title = getString("AttachPhoto", R.string.AttachPhoto); } boolean noforwards = avatarsDialogId != 0 && MessagesController.getInstance(currentAccount).isChatNoForwards(-avatarsDialogId); if (noforwards) { @@ -13452,9 +13532,9 @@ private void setIsAboutToSwitchToIndex(int index, boolean init, boolean animated } if (fromCamera) { if (isVideo) { - title = LocaleController.getString("AttachVideo", R.string.AttachVideo); + title = getString("AttachVideo", R.string.AttachVideo); } else { - title = LocaleController.getString("AttachPhoto", R.string.AttachPhoto); + title = getString("AttachPhoto", R.string.AttachPhoto); } } if (parentChatActivity != null) { @@ -13475,9 +13555,9 @@ private void setIsAboutToSwitchToIndex(int index, boolean init, boolean animated title = chat.title; } else { if (UserObject.isUserSelf(user)) { - title = LocaleController.getString(parentChatActivity.getChatMode() == ChatActivity.MODE_SAVED ? R.string.MyNotes : R.string.SavedMessages); + title = getString(parentChatActivity.getChatMode() == ChatActivity.MODE_SAVED ? R.string.MyNotes : R.string.SavedMessages); } else if (UserObject.isAnonymous(user)) { - title = LocaleController.getString(R.string.AnonymousForward); + title = getString(R.string.AnonymousForward); } else { title = UserObject.getUserName(user); } @@ -13546,13 +13626,13 @@ private void setIsAboutToSwitchToIndex(int index, boolean init, boolean animated menuItem.hideSubItem(gallery_menu_savegif); } menuItem.checkHideMenuItem(); - title = LocaleController.getString("AttachGif", R.string.AttachGif); + title = getString("AttachGif", R.string.AttachGif); } else { if (size == 1) { if (isVideo) { - title = LocaleController.getString("AttachVideo", R.string.AttachVideo); + title = getString("AttachVideo", R.string.AttachVideo); } else { - title = LocaleController.getString("AttachPhoto", R.string.AttachPhoto); + title = getString("AttachPhoto", R.string.AttachPhoto); } } menuItem.showSubItem(gallery_menu_save); @@ -14357,6 +14437,17 @@ public void onAnimationEnd(Animator animation) { captionContainer.addView(captionTextViewSwitcher, LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT); videoPreviewFrame.bringToFront(); } + if (messageObject != null && messageObject.isSponsored()) { + createAdButtonView(); + AndroidUtilities.removeFromParent(adButtonView); + adButtonTextView.setText(messageObject.sponsoredButtonText); + captionContainer.addView(adButtonView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 44, Gravity.BOTTOM | Gravity.FILL_HORIZONTAL, 16, 0, 16, 12)); + captionTextViewSwitcher.setPadding(0, 0, 0, dp(64)); + adButtonView.bringToFront(); + } else if (adButtonView != null) { + AndroidUtilities.removeFromParent(adButtonView); + captionTextViewSwitcher.setPadding(0, 0, 0, 0); + } } final boolean isCaptionEmpty = TextUtils.isEmpty(caption); @@ -14539,6 +14630,9 @@ public void onAnimationEnd(Animator animation) { } else { str = Emoji.replaceEmoji(new SpannableStringBuilder(caption), captionTextView.getPaint().getFontMetricsInt(), dp(20), false); } + if (messageObject != null && messageObject.isSponsored()) { + str = sponsoredCaption(messageObject, str); + } captionTextViewSwitcher.setTag(str); try { switchedToNext = captionTextViewSwitcher.setText(str, animated, lastCaptionTranslating != translating); @@ -14554,7 +14648,7 @@ public void onAnimationEnd(Animator animation) { captionTextViewSwitcher.setVisibility(visible ? View.VISIBLE : View.INVISIBLE); } else { if (needCaptionLayout) { - captionTextViewSwitcher.setText(LocaleController.getString("AddCaption", R.string.AddCaption), animated); + captionTextViewSwitcher.setText(getString("AddCaption", R.string.AddCaption), animated); captionTextViewSwitcher.getCurrentView().setTextColor(0xb2ffffff); captionTextViewSwitcher.setTag("empty"); captionTextViewSwitcher.setVisibility(View.VISIBLE); @@ -15013,7 +15107,7 @@ private void setIndexToImage(ImageReceiver imageReceiver, int index, CropTransfo } if (messageObject != null) { - String restrictionReason = MessagesController.getRestrictionReason(messageObject.messageOwner.restriction_reason); + String restrictionReason = MessagesController.getInstance(messageObject.currentAccount).getRestrictionReason(messageObject.messageOwner.restriction_reason); if (!TextUtils.isEmpty(restrictionReason)) { imageReceiver.setImageBitmap(parentActivity.getResources().getDrawable(R.drawable.photoview_placeholder)); return; @@ -15344,12 +15438,14 @@ private void openCurrentPhotoInPaintModeForSelect() { File file = null; boolean isVideo = false; + boolean canEdit = false; boolean capReplace = false; MessageObject messageObject = null; if (currentMessageObject != null) { messageObject = currentMessageObject; - capReplace = currentMessageObject.canEditMedia() && !currentMessageObject.isDocument(); + canEdit = currentMessageObject.canEditMedia() && !currentMessageObject.isDocument(); + capReplace = canEdit && currentMessageObject.isOutOwner(); isVideo = currentMessageObject.isVideo(); if (!TextUtils.isEmpty(currentMessageObject.messageOwner.attachPath)) { file = new File(currentMessageObject.messageOwner.attachPath); @@ -15370,6 +15466,7 @@ private void openCurrentPhotoInPaintModeForSelect() { File finalFile = file; boolean finalIsVideo = isVideo; + boolean finalCanEdit = canEdit; boolean finalCanReplace = capReplace; MessageObject finalMessageObject = messageObject; AndroidUtilities.runOnUIThread(() -> { @@ -15405,6 +15502,11 @@ public void replaceButtonPressed(int index, VideoEditedInfo videoEditedInfo) { } } + @Override + public boolean canEdit(int index) { + return chatPhotoProvider != null && finalCanEdit; + } + @Override public boolean canReplace(int index) { return chatPhotoProvider != null && finalCanReplace; @@ -16034,7 +16136,7 @@ public void onAnimationEnd(Animator animation) { if (am.isTouchExplorationEnabled()) { AccessibilityEvent event = AccessibilityEvent.obtain(); event.setEventType(AccessibilityEvent.TYPE_ANNOUNCEMENT); - event.getText().add(LocaleController.getString("AccDescrPhotoViewer", R.string.AccDescrPhotoViewer)); + event.getText().add(getString("AccDescrPhotoViewer", R.string.AccDescrPhotoViewer)); am.sendAccessibilityEvent(event); } @@ -18958,8 +19060,8 @@ public QualityChooseView(Context context) { textPaint.setTextSize(dp(14)); textPaint.setColor(0xffcdcdcd); - lowQualityDescription = LocaleController.getString("AccDescrVideoCompressLow", R.string.AccDescrVideoCompressLow); - hightQualityDescription = LocaleController.getString("AccDescrVideoCompressHigh", R.string.AccDescrVideoCompressHigh); + lowQualityDescription = getString("AccDescrVideoCompressLow", R.string.AccDescrVideoCompressLow); + hightQualityDescription = getString("AccDescrVideoCompressHigh", R.string.AccDescrVideoCompressHigh); } @Override @@ -19048,7 +19150,7 @@ public void updateMuteButton() { muteItem.animate().alpha(1f).setDuration(180).start(); if (muteVideo) { if (customTitle == null) { - actionBarContainer.setSubtitle(LocaleController.getString("SoundMuted", R.string.SoundMuted)); + actionBarContainer.setSubtitle(getString("SoundMuted", R.string.SoundMuted)); } muteItem.setImageResource(R.drawable.video_send_mute); if (compressItem.getTag() != null) { @@ -19063,11 +19165,11 @@ public void updateMuteButton() { videoTimelineView.setMaxProgressDiff(1.0f); videoTimelineView.setMode(VideoTimelinePlayView.MODE_VIDEO); } - muteItem.setContentDescription(LocaleController.getString("NoSound", R.string.NoSound)); + muteItem.setContentDescription(getString("NoSound", R.string.NoSound)); } else { actionBarContainer.setSubtitle(currentSubtitle); muteItem.setImageResource(R.drawable.video_send_unmute); - muteItem.setContentDescription(LocaleController.getString("Sound", R.string.Sound)); + muteItem.setContentDescription(getString("Sound", R.string.Sound)); if (compressItem.getTag() != null) { compressItem.setAlpha(1.0f); compressItem.setEnabled(true); @@ -19164,7 +19266,7 @@ private void updateVideoInfo() { currentSubtitle = String.format("%s, %s", videoDimension, videoTimeSize); actionBar.beginDelayedTransition(); if (customTitle == null) { - actionBarContainer.setSubtitle(muteVideo ? LocaleController.getString("SoundMuted", R.string.SoundMuted) : currentSubtitle); + actionBarContainer.setSubtitle(muteVideo ? getString("SoundMuted", R.string.SoundMuted) : currentSubtitle); } } @@ -19543,13 +19645,13 @@ private void updateAccessibilityOverlayVisibility() { final int state = photoProgressViews[0].backgroundState; if (photoProgressViews[0].isVisible() && (state == PROGRESS_PLAY || state == PROGRESS_PAUSE || state == PROGRESS_LOAD || state == PROGRESS_CANCEL)) { if (state == PROGRESS_PLAY) { - playButtonAccessibilityOverlay.setContentDescription(LocaleController.getString("AccActionPlay", R.string.AccActionPlay)); + playButtonAccessibilityOverlay.setContentDescription(getString("AccActionPlay", R.string.AccActionPlay)); } else if (state == PROGRESS_LOAD) { - playButtonAccessibilityOverlay.setContentDescription(LocaleController.getString("AccActionDownload", R.string.AccActionDownload)); + playButtonAccessibilityOverlay.setContentDescription(getString("AccActionDownload", R.string.AccActionDownload)); } else if (state == PROGRESS_CANCEL) { - playButtonAccessibilityOverlay.setContentDescription(LocaleController.getString("AccActionCancelDownload", R.string.AccActionCancelDownload)); + playButtonAccessibilityOverlay.setContentDescription(getString("AccActionCancelDownload", R.string.AccActionCancelDownload)); } else { - playButtonAccessibilityOverlay.setContentDescription(LocaleController.getString("AccActionPause", R.string.AccActionPause)); + playButtonAccessibilityOverlay.setContentDescription(getString("AccActionPause", R.string.AccActionPause)); } playButtonAccessibilityOverlay.setVisibility(View.VISIBLE); } else { @@ -20670,4 +20772,262 @@ private void applyTransformToMatrix(Matrix matrix) { matrix.preSkew(0, 4 * currentMirror * (1f - currentMirror) * .25f); } } + + public void openAdsMenu() { + if (currentMessageObject == null || !currentMessageObject.isSponsored() || menuItem.getAlpha() <= 0.5f) return; + + final int account = currentMessageObject.currentAccount; + final Theme.ResourcesProvider resourcesProvider = new DarkThemeResourceProvider(); + + final ItemOptions o = ItemOptions.makeOptions(containerView, resourcesProvider, menuItem, true); + o.translate(0, -dp(46)); + o.setGravity(Gravity.RIGHT); + +// if (!currentMessageObject.sponsoredCanReport) { +// FrameLayout sponsoredAbout = new FrameLayout(activityContext); +// sponsoredAbout.setMinimumHeight(AndroidUtilities.dp(56)); +// sponsoredAbout.setBackground(Theme.createRadSelectorDrawable(Theme.getColor(Theme.key_dialogButtonSelector, resourcesProvider), 6, 0)); +// sponsoredAbout.setPadding(AndroidUtilities.dp(18), 0, AndroidUtilities.dp(18), 0); +// +// ImageView infoImage = new ImageView(activityContext); +// infoImage.setScaleType(ImageView.ScaleType.CENTER); +// infoImage.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_actionBarDefaultSubmenuItemIcon, resourcesProvider), PorterDuff.Mode.MULTIPLY)); +// infoImage.setImageResource(R.drawable.msg_info); +// sponsoredAbout.addView(infoImage, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, 40, Gravity.CENTER_VERTICAL | (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT))); +// +// TextView infoText = new TextView(activityContext) { +// @Override +// protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { +// if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.AT_MOST && getLayout() != null) { +// Layout layout = getLayout(); +// int width = 0; +// for (int i = 0; i < layout.getLineCount(); ++i) { +// width = Math.max(width, (int) Math.ceil(layout.getLineWidth(i))); +// } +// widthMeasureSpec = MeasureSpec.makeMeasureSpec(getPaddingLeft() + width + getPaddingRight(), MeasureSpec.EXACTLY); +// } +// super.onMeasure(widthMeasureSpec, heightMeasureSpec); +// } +// }; +// infoText.setMaxLines(3); +// infoText.setGravity(Gravity.LEFT); +// infoText.setEllipsize(TextUtils.TruncateAt.END); +// infoText.setTextColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuItem, resourcesProvider)); +// infoText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); +// infoText.setMaxWidth(AndroidUtilities.dp(240)); +// infoText.setText(LocaleController.getString(R.string.SponsoredMessageInfo)); +// infoText.setPadding(LocaleController.isRTL ? 0 : AndroidUtilities.dp(43), 0, LocaleController.isRTL ? AndroidUtilities.dp(43) : 0, 0); +// sponsoredAbout.addView(infoText, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL)); +// +// o.addView(sponsoredAbout); +// sponsoredAbout.setOnClickListener(v1 -> { +// if (activityContext == null) { +// return; +// } +// BottomSheet.Builder builder = new BottomSheet.Builder(activityContext, false, resourcesProvider); +// BottomSheet[] sheet = new BottomSheet[1]; +// builder.setCustomView(new SponsoredMessageInfoView(activityContext, () -> { +// sheet[0].dismiss(); +// closePhoto(true, false); +// }, resourcesProvider)); +// sheet[0] = builder.show(); +// o.dismiss(); +// }); +// o.addGap(); +// } + + if (currentMessageObject.sponsoredInfo != null || currentMessageObject.sponsoredAdditionalInfo != null || currentMessageObject.sponsoredUrl != null && !currentMessageObject.sponsoredUrl.startsWith("https://" + MessagesController.getInstance(currentAccount).linkPrefix)) { + ItemOptions info = o.makeSwipeback(); + + ActionBarMenuSubItem backCell = new ActionBarMenuSubItem(activityContext, true, false, resourcesProvider); + backCell.setItemHeight(44); + backCell.setTextAndIcon(getString(R.string.Back), R.drawable.msg_arrow_back); + backCell.getTextView().setPadding(LocaleController.isRTL ? 0 : AndroidUtilities.dp(40), 0, LocaleController.isRTL ? AndroidUtilities.dp(40) : 0, 0); + backCell.setOnClickListener(v1 -> o.closeSwipeback()); + info.addView(backCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + + info.addView(new ActionBarPopupWindow.GapView(activityContext, resourcesProvider), LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 8)); + + ArrayList<View> sections = new ArrayList<>(); + + if (currentMessageObject.sponsoredUrl != null && !TextUtils.equals(AndroidUtilities.getHostAuthority(currentMessageObject.sponsoredUrl), MessagesController.getInstance(currentAccount).linkPrefix)) { + TextView textView = new TextView(activityContext); + textView.setTextColor(getThemedColor(Theme.key_chat_messageLinkIn)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setPadding(AndroidUtilities.dp(18), AndroidUtilities.dp(10), AndroidUtilities.dp(18), AndroidUtilities.dp(10)); + textView.setMaxWidth(AndroidUtilities.dp(300)); + Uri uri = Uri.parse(currentMessageObject.sponsoredUrl); + textView.setText(Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null)); + textView.setBackground(Theme.createRadSelectorDrawable(getThemedColor(Theme.key_dialogButtonSelector), 0, currentMessageObject.sponsoredAdditionalInfo == null ? 6 : 0)); + textView.setOnClickListener(e -> { + if (currentMessageObject == null) { + return; + } + o.dismiss(); + if (parentFragment instanceof ChatActivity) { + ((ChatActivity) parentFragment).logSponsoredClicked(currentMessageObject); + } + Browser.openUrl(activityContext, currentMessageObject.sponsoredUrl, true, false); + }); + textView.setOnLongClickListener(e -> { + if (currentMessageObject == null) { + return false; + } + if (AndroidUtilities.addToClipboard(currentMessageObject.sponsoredUrl)) { + BulletinFactory.of(Bulletin.BulletinWindow.make(activityContext), resourcesProvider).createCopyLinkBulletin().show(); + } + return true; + }); + sections.add(textView); + } + + if (currentMessageObject.sponsoredInfo != null) { + TextView textView = new TextView(activityContext); + textView.setTextColor(getThemedColor(Theme.key_actionBarDefaultSubmenuItem)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setPadding(AndroidUtilities.dp(18), AndroidUtilities.dp(10), AndroidUtilities.dp(18), AndroidUtilities.dp(10)); + textView.setMaxWidth(AndroidUtilities.dp(300)); + textView.setText(currentMessageObject.sponsoredInfo); + textView.setBackground(Theme.createRadSelectorDrawable(getThemedColor(Theme.key_dialogButtonSelector), 0, currentMessageObject.sponsoredAdditionalInfo == null ? 6 : 0)); + textView.setOnClickListener(e -> { + if (AndroidUtilities.addToClipboard(currentMessageObject.sponsoredInfo)) { + BulletinFactory.of(Bulletin.BulletinWindow.make(activityContext), resourcesProvider).createCopyBulletin(LocaleController.getString(R.string.TextCopied)).show(); + } + }); + sections.add(textView); + } + + if (currentMessageObject.sponsoredAdditionalInfo != null) { + TextView textView = new TextView(activityContext); + textView.setTextColor(getThemedColor(Theme.key_actionBarDefaultSubmenuItem)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setPadding(AndroidUtilities.dp(18), AndroidUtilities.dp(10), AndroidUtilities.dp(18), AndroidUtilities.dp(10)); + textView.setMaxWidth(AndroidUtilities.dp(300)); + textView.setText(currentMessageObject.sponsoredAdditionalInfo); + textView.setBackground(Theme.createRadSelectorDrawable(getThemedColor(Theme.key_dialogButtonSelector), 0, 6)); + textView.setOnClickListener(e -> { + if (AndroidUtilities.addToClipboard(currentMessageObject.sponsoredAdditionalInfo)) { + BulletinFactory.of(Bulletin.BulletinWindow.make(activityContext), resourcesProvider).createCopyBulletin(LocaleController.getString(R.string.TextCopied)).show(); + } + }); + sections.add(textView); + } + + for (int i = 0; i < sections.size(); ++i) { + View section = sections.get(i); + if (i > 0) { + FrameLayout separator = new FrameLayout(activityContext); + separator.setBackgroundColor(getThemedColor(Theme.key_divider)); + LinearLayout.LayoutParams params = LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 1); + params.height = 1; + info.addView(separator, params); + } + info.addView(section, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + } + o.add(R.drawable.msg_channel, getString(R.string.SponsoredMessageSponsorReportable), () -> o.openSwipeback(info)); + } + + if (!UserConfig.getInstance(account).isPremium() && !MessagesController.getInstance(currentAccount).premiumFeaturesBlocked() && !currentMessageObject.sponsoredCanReport) { + o.add(R.drawable.msg_block2, getString(R.string.HideAd), () -> { + if (UserConfig.getInstance(account).isPremium()) { + BulletinFactory.of(containerView, resourcesProvider) + .createAdReportedBulletin(LocaleController.getString(R.string.AdHidden)) + .show(); + MessagesController.getInstance(account).disableAds(true); + if (parentFragment instanceof ChatActivity) { + ChatActivity chatActivity = (ChatActivity) parentFragment; + chatActivity.removeFromSponsored(currentMessageObject); + chatActivity.removeMessageWithThanos(currentMessageObject); + } + } else { + new PremiumFeatureBottomSheet(parentFragment, PremiumPreviewFragment.PREMIUM_FEATURE_ADS, true).show(); + } + }); + } + if (currentMessageObject.sponsoredCanReport || true) { + o.add(R.drawable.msg_info, getString(R.string.AboutRevenueSharingAds), () -> { + RevenueSharingAdsInfoBottomSheet.showAlert(activityContext, parentFragment, resourcesProvider); + }); +// o.add(R.drawable.msg_block2, getString(R.string.ReportAd), () -> { +// +// }); + if (parentFragment instanceof ChatActivity && !MessagesController.getInstance(account).premiumFeaturesBlocked()) { + o.addGap(); + o.add(R.drawable.msg_cancel, getString(R.string.RemoveAds), () -> { + if (UserConfig.getInstance(account).isPremium()) { + BulletinFactory.of(containerView, resourcesProvider) + .createAdReportedBulletin(LocaleController.getString(R.string.AdHidden)) + .show(); + MessagesController.getInstance(account).disableAds(true); + if (parentFragment instanceof ChatActivity) { + ChatActivity chatActivity = (ChatActivity) parentFragment; + chatActivity.removeFromSponsored(currentMessageObject); + chatActivity.removeMessageWithThanos(currentMessageObject); + } + } else { + new PremiumFeatureBottomSheet(parentFragment, PremiumPreviewFragment.PREMIUM_FEATURE_ADS, true).show(); + } + }); + } + } + + if (o.getItemsCount() <= 0) return; + o.show(); + } + + private static CharSequence sponsoredCaption(MessageObject messageObject, CharSequence str) { + SpannableStringBuilder sb = new SpannableStringBuilder(); + if (!TextUtils.isEmpty(messageObject.sponsoredTitle)) { + sb.append(messageObject.sponsoredTitle); + sb.setSpan(new TypefaceSpan(AndroidUtilities.bold()), 0, sb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + sb.setSpan(new LineHeightSpan() { + @Override + public void chooseHeight(CharSequence text, int start, int end, int spanstartv, int lineHeight, Paint.FontMetricsInt fm) { + fm.descent += dp(4); + fm.ascent = fm.ascent; + } + }, 0, sb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + sb.append("\n"); + } + sb.append(str); +// sb.append("\n"); +// sb.setSpan(new LineHeightSpan() { +// @Override +// public void chooseHeight(CharSequence text, int start, int end, int spanstartv, int lineHeight, Paint.FontMetricsInt fm) { +// final int originHeight = fm.descent - fm.ascent; +// if (originHeight <= 0) { +// return; +// } +// final float ratio = dp(72) * 1.0f / originHeight; +// fm.descent = Math.round(fm.descent * ratio); +// fm.ascent = fm.descent - dp(72); +// } +// }, sb.length() - 1, sb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + return sb; + } + + private void createAdButtonView() { + if (adButtonView != null) return; + + adButtonView = new FrameLayout(activityContext); + adButtonView.setBackground(Theme.createRadSelectorDrawable(0x24FFFFFF, 0x15FFFFFF, 8, 8)); + ScaleStateListAnimator.apply(adButtonView, .05f, 1.25f); + + adButtonTextView = new TextView(activityContext); + adButtonTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + adButtonTextView.setTextColor(0xFFFFFFFF); + adButtonTextView.setTypeface(AndroidUtilities.bold()); + adButtonView.addView(adButtonTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER)); + + adButtonView.setOnClickListener(v -> { + if (currentMessageObject == null || !currentMessageObject.isSponsored()) return; + if (parentFragment instanceof ChatActivity) { + ((ChatActivity) parentFragment).logSponsoredClicked(currentMessageObject); + } + closePhoto(true, false); + if (currentMessageObject.sponsoredUrl != null) { + Browser.openUrl(LaunchActivity.instance != null ? LaunchActivity.instance : activityContext, Uri.parse(currentMessageObject.sponsoredUrl), true, false, false, null, null, false); + } + }); + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PremiumPreviewFragment.java b/TMessagesProj/src/main/java/org/telegram/ui/PremiumPreviewFragment.java index 81178df6c7e..6009d569f10 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PremiumPreviewFragment.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PremiumPreviewFragment.java @@ -208,6 +208,7 @@ public class PremiumPreviewFragment extends BaseFragment implements Notification public final static int PREMIUM_FEATURE_FOLDER_TAGS = 35; public final static int PREMIUM_FEATURE_BUSINESS_INTRO = 36; public final static int PREMIUM_FEATURE_BUSINESS_CHAT_LINKS = 37; + public final static int PREMIUM_FEATURE_MESSAGE_EFFECTS = 38; private int statusBarHeight; private int firstViewHeight; @@ -263,6 +264,8 @@ public static int serverStringToFeatureType(String s) { return PREMIUM_FEATURE_EMOJI_STATUS; case "translations": return PREMIUM_FEATURE_TRANSLATIONS; + case "effects": + return PREMIUM_FEATURE_MESSAGE_EFFECTS; case "stories": return PREMIUM_FEATURE_STORIES; @@ -348,6 +351,8 @@ public static String featureTypeToServerString(int type) { return "emoji_status"; case PREMIUM_FEATURE_TRANSLATIONS: return "translations"; + case PREMIUM_FEATURE_MESSAGE_EFFECTS: + return "effects"; case PREMIUM_FEATURE_STORIES: return "stories"; case PREMIUM_FEATURE_STORIES_STEALTH_MODE: @@ -893,6 +898,7 @@ public static void fillPremiumFeaturesList(ArrayList<PremiumFeatureData> premium premiumFeatures.add(new PremiumFeatureData(PREMIUM_FEATURE_LAST_SEEN, R.drawable.menu_premium_seen, getString(R.string.PremiumPreviewLastSeen), getString(R.string.PremiumPreviewLastSeenDescription))); premiumFeatures.add(new PremiumFeatureData(PREMIUM_FEATURE_MESSAGE_PRIVACY, R.drawable.menu_premium_privacy, getString(R.string.PremiumPreviewMessagePrivacy), getString(R.string.PremiumPreviewMessagePrivacyDescription))); premiumFeatures.add(new PremiumFeatureData(PREMIUM_FEATURE_BUSINESS, R.drawable.filled_premium_business, applyNewSpan(getString(R.string.TelegramBusiness)), getString(R.string.PremiumPreviewBusinessDescription))); + premiumFeatures.add(new PremiumFeatureData(PREMIUM_FEATURE_MESSAGE_EFFECTS, R.drawable.menu_premium_effects, applyNewSpan(getString(R.string.PremiumPreviewEffects)), getString(R.string.PremiumPreviewEffectsDescription))); if (messagesController.premiumFeaturesTypesToPosition.size() > 0) { for (int i = 0; i < premiumFeatures.size(); i++) { @@ -1958,7 +1964,8 @@ private void updateButtonText(boolean animated) { if (currentSubscriptionTier != null && currentSubscriptionTier.subscriptionOption != null && currentSubscriptionTier.subscriptionOption.transaction != null) { updateParams = BillingFlowParams.SubscriptionUpdateParams.newBuilder() .setOldPurchaseToken(BillingController.getInstance().getLastPremiumToken()) - .setReplaceProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_AND_CHARGE_FULL_PRICE) +// .setReplaceProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_AND_CHARGE_FULL_PRICE) + .setSubscriptionReplacementMode(BillingFlowParams.SubscriptionUpdateParams.ReplacementMode.CHARGE_FULL_PRICE) .build(); } buyPremium(this, tier, "settings", true, updateParams); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PrivacyControlActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/PrivacyControlActivity.java index 280d551c6d4..b9f75cb2028 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PrivacyControlActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PrivacyControlActivity.java @@ -1430,6 +1430,7 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { userFull.birthday = birthday; getMessagesStorage().updateUserInfo(userFull, false); } + getMessagesController().invalidateContentSettings(); getConnectionsManager().sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { if (res instanceof TLRPC.TL_boolTrue) { BulletinFactory.of(PrivacyControlActivity.this) diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java index f0217220316..b799bf45a8b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java @@ -87,7 +87,9 @@ import android.view.animation.AccelerateDecelerateInterpolator; import android.view.animation.AccelerateInterpolator; import android.view.animation.DecelerateInterpolator; +import android.webkit.CookieManager; import android.webkit.WebStorage; +import android.webkit.WebView; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.ImageView; @@ -156,6 +158,7 @@ import org.telegram.tgnet.SerializedData; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.tgnet.tl.TL_fragment; import org.telegram.tgnet.tl.TL_stories; import org.telegram.ui.ActionBar.ActionBar; @@ -256,6 +259,8 @@ import org.telegram.ui.Components.UndoView; import org.telegram.ui.Components.VectorAvatarThumbDrawable; import org.telegram.ui.Components.voip.VoIPHelper; +import org.telegram.ui.Stars.BotStarsActivity; +import org.telegram.ui.Stars.BotStarsController; import org.telegram.ui.Stars.StarsController; import org.telegram.ui.Stars.StarsIntroActivity; import org.telegram.ui.Stories.ProfileStoriesView; @@ -266,12 +271,15 @@ import org.telegram.ui.Stories.recorder.DualCameraView; import org.telegram.ui.Stories.recorder.StoryRecorder; import org.telegram.ui.bots.BotBiometry; +import org.telegram.ui.bots.BotWebViewAttachedSheet; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; import java.time.LocalDate; import java.time.Period; import java.util.ArrayList; @@ -339,6 +347,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. private AnimatorSet avatarAnimation; private RadialProgressView avatarProgressView; private ImageView timeItem; + private ImageView starBgItem, starFgItem; private TimerDrawable timerDrawable; private ProfileGalleryView avatarsViewPager; private PagerIndicatorView avatarsViewPagerIndicatorView; @@ -423,6 +432,7 @@ public void setAlpha(int a) { private boolean recreateMenuAfterAnimation; private int playProfileAnimation; private boolean needTimerImage; + private boolean needStarImage; private boolean allowProfileAnimation = true; private boolean disableProfileAnimation = false; private float extraHeight; @@ -474,7 +484,7 @@ public void setAlpha(int a) { private TLRPC.EncryptedChat currentEncryptedChat; private TLRPC.Chat currentChat; - private TLRPC.BotInfo botInfo; + private TL_bots.BotInfo botInfo; private TLRPC.ChannelParticipant currentChannelParticipant; private TLRPC.TL_account_password currentPassword; @@ -516,6 +526,7 @@ public void setAlpha(int a) { private final static int edit_profile = 41; private final static int copy_link_profile = 42; private final static int set_username = 43; + private final static int bot_privacy = 44; private Rect rect = new Rect(); @@ -588,6 +599,7 @@ public void setAlpha(int a) { private int businessRow; private int premiumGiftingRow; private int premiumSectionsRow; + private int botAppRow; private int settingsTimerRow; private int settingsKeyRow; @@ -601,6 +613,8 @@ public void setAlpha(int a) { private int subscribersRequestsRow; private int administratorsRow; private int settingsRow; + private int balanceRow; + private int balanceDividerRow; private int blockedUsersRow; private int membersSectionRow; @@ -1881,6 +1895,7 @@ public boolean onFragmentCreate() { getNotificationCenter().addObserver(this, NotificationCenter.userIsPremiumBlockedUpadted); getNotificationCenter().addObserver(this, NotificationCenter.currentUserPremiumStatusChanged); getNotificationCenter().addObserver(this, NotificationCenter.starBalanceUpdated); + getNotificationCenter().addObserver(this, NotificationCenter.botStarsUpdated); NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.emojiLoaded); updateRowsIds(); if (listAdapter != null) { @@ -1925,6 +1940,11 @@ public boolean bottomOffsetAnimated() { return bottomButtonsContainer == null; } }); + + if (userId != 0 && UserObject.isUserSelf(getMessagesController().getUser(userId)) && !myProfile) { + getMessagesController().getContentSettings(null); + } + return true; } @@ -1977,6 +1997,7 @@ public void onFragmentDestroy() { getNotificationCenter().removeObserver(this, NotificationCenter.userIsPremiumBlockedUpadted); getNotificationCenter().removeObserver(this, NotificationCenter.currentUserPremiumStatusChanged); getNotificationCenter().removeObserver(this, NotificationCenter.starBalanceUpdated); + getNotificationCenter().removeObserver(this, NotificationCenter.botStarsUpdated); NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.emojiLoaded); if (avatarsViewPager != null) { avatarsViewPager.onDestroy(); @@ -2439,6 +2460,8 @@ public void didChangeOwner(TLRPC.User user) { }); builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); showDialog(builder.create()); + } else if (id == bot_privacy) { + BotWebViewAttachedSheet.openPrivacy(currentAccount, userId); } else if (id == gallery_menu_save) { if (getParentActivity() == null) { return; @@ -3287,10 +3310,10 @@ public void onTextChanged(EditText editText) { } if (myProfile) { editItem = menu.addItem(edit_profile, R.drawable.group_edit_profile); - editItem.setContentDescription(LocaleController.getString("Edit", R.string.Edit)); + editItem.setContentDescription(LocaleController.getString(R.string.Edit)); } else { editItem = menu.addItem(edit_channel, R.drawable.group_edit_profile); - editItem.setContentDescription(LocaleController.getString("Edit", R.string.Edit)); + editItem.setContentDescription(LocaleController.getString(R.string.Edit)); } otherItem = menu.addItem(10, R.drawable.ic_ab_other, resourcesProvider); ttlIconView = new ImageView(context); @@ -3362,8 +3385,13 @@ public void invalidate() { @Override public boolean onInterceptTouchEvent(MotionEvent e) { - if (sharedMediaLayout.canEditStories() && sharedMediaLayout != null && sharedMediaLayout.isActionModeShown() && sharedMediaLayout.getClosestTab() == SharedMediaLayout.TAB_STORIES) { - return false; + if (sharedMediaLayout != null) { + if (sharedMediaLayout.canEditStories() && sharedMediaLayout.isActionModeShown() && sharedMediaLayout.getClosestTab() == SharedMediaLayout.TAB_BOT_PREVIEWS) { + return false; + } + if (sharedMediaLayout.canEditStories() && sharedMediaLayout.isActionModeShown() && sharedMediaLayout.getClosestTab() == SharedMediaLayout.TAB_STORIES) { + return false; + } } return super.onInterceptTouchEvent(e); } @@ -3769,19 +3797,13 @@ public void openExceptions() { } } else if (position == joinRow) { getMessagesController().addUserToChat(currentChat.id, getUserConfig().getCurrentUser(), 0, null, ProfileActivity.this, true, () -> { - updateRowsIds(); - if (listAdapter != null) { - listAdapter.notifyDataSetChanged(); - } + updateListAnimated(false); }, err -> { if (err != null && "INVITE_REQUEST_SENT".equals(err.text)) { SharedPreferences preferences = MessagesController.getNotificationsSettings(currentAccount); preferences.edit().putLong("dialog_join_requested_time_" + dialogId, System.currentTimeMillis()).commit(); JoinGroupAlert.showBulletin(context, ProfileActivity.this, ChatObject.isChannel(currentChat) && !currentChat.megagroup); - updateRowsIds(); - if (listAdapter != null) { - listAdapter.notifyDataSetChanged(); - } + updateListAnimated(false); if (lastFragment instanceof ChatActivity) { ((ChatActivity) lastFragment).showBottomOverlayProgress(false, true); } @@ -3809,6 +3831,15 @@ public void openExceptions() { presentFragment(fragment); } else if (position == settingsRow) { editItem.performClick(); + } else if (position == balanceRow) { + Bundle args = new Bundle(); + if (userInfo != null) { + presentFragment(new BotStarsActivity(userId)); + } else { + args.putLong("chat_id", chatId); + args.putBoolean("start_from_monetization", true); + presentFragment(new StatisticActivity(args)); + } } else if (position == blockedUsersRow) { Bundle args = new Bundle(); args.putLong("chat_id", chatId); @@ -3918,32 +3949,33 @@ public boolean onItemClick(View view, int position) { pressCount++; if (pressCount >= 2 || BuildVars.DEBUG_PRIVATE_VERSION) { AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity(), resourcesProvider); - builder.setTitle(LocaleController.getString("DebugMenu", R.string.DebugMenu)); + builder.setTitle(getString("DebugMenu", R.string.DebugMenu)); CharSequence[] items; items = new CharSequence[]{ - LocaleController.getString("DebugMenuImportContacts", R.string.DebugMenuImportContacts), - LocaleController.getString("DebugMenuReloadContacts", R.string.DebugMenuReloadContacts), - LocaleController.getString("DebugMenuResetContacts", R.string.DebugMenuResetContacts), - LocaleController.getString("DebugMenuResetDialogs", R.string.DebugMenuResetDialogs), - BuildVars.DEBUG_VERSION ? null : (BuildVars.LOGS_ENABLED ? LocaleController.getString("DebugMenuDisableLogs", R.string.DebugMenuDisableLogs) : LocaleController.getString("DebugMenuEnableLogs", R.string.DebugMenuEnableLogs)), - SharedConfig.inappCamera ? LocaleController.getString("DebugMenuDisableCamera", R.string.DebugMenuDisableCamera) : LocaleController.getString("DebugMenuEnableCamera", R.string.DebugMenuEnableCamera), - LocaleController.getString("DebugMenuClearMediaCache", R.string.DebugMenuClearMediaCache), - LocaleController.getString("DebugMenuCallSettings", R.string.DebugMenuCallSettings), + getString("DebugMenuImportContacts", R.string.DebugMenuImportContacts), + getString("DebugMenuReloadContacts", R.string.DebugMenuReloadContacts), + getString("DebugMenuResetContacts", R.string.DebugMenuResetContacts), + getString("DebugMenuResetDialogs", R.string.DebugMenuResetDialogs), + BuildVars.DEBUG_VERSION ? null : (BuildVars.LOGS_ENABLED ? getString("DebugMenuDisableLogs", R.string.DebugMenuDisableLogs) : getString("DebugMenuEnableLogs", R.string.DebugMenuEnableLogs)), + SharedConfig.inappCamera ? getString("DebugMenuDisableCamera", R.string.DebugMenuDisableCamera) : getString("DebugMenuEnableCamera", R.string.DebugMenuEnableCamera), + getString("DebugMenuClearMediaCache", R.string.DebugMenuClearMediaCache), + getString("DebugMenuCallSettings", R.string.DebugMenuCallSettings), null, - BuildVars.DEBUG_PRIVATE_VERSION || ApplicationLoader.isStandaloneBuild() ? LocaleController.getString("DebugMenuCheckAppUpdate", R.string.DebugMenuCheckAppUpdate) : null, - LocaleController.getString("DebugMenuReadAllDialogs", R.string.DebugMenuReadAllDialogs), + BuildVars.DEBUG_PRIVATE_VERSION || ApplicationLoader.isStandaloneBuild() ? getString("DebugMenuCheckAppUpdate", R.string.DebugMenuCheckAppUpdate) : null, + getString("DebugMenuReadAllDialogs", R.string.DebugMenuReadAllDialogs), BuildVars.DEBUG_PRIVATE_VERSION ? (SharedConfig.disableVoiceAudioEffects ? "Enable voip audio effects" : "Disable voip audio effects") : null, BuildVars.DEBUG_PRIVATE_VERSION ? "Clean app update" : null, BuildVars.DEBUG_PRIVATE_VERSION ? "Reset suggestions" : null, - BuildVars.DEBUG_PRIVATE_VERSION ? LocaleController.getString(R.string.DebugMenuClearWebViewCache) : null, - Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ? LocaleController.getString(SharedConfig.debugWebView ? R.string.DebugMenuDisableWebViewDebug : R.string.DebugMenuEnableWebViewDebug) : null, + BuildVars.DEBUG_PRIVATE_VERSION ? getString(R.string.DebugMenuClearWebViewCache) : null, + getString(R.string.DebugMenuClearWebViewCookies), + Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ? getString(SharedConfig.debugWebView ? R.string.DebugMenuDisableWebViewDebug : R.string.DebugMenuEnableWebViewDebug) : null, (AndroidUtilities.isTabletInternal() && BuildVars.DEBUG_PRIVATE_VERSION) ? (SharedConfig.forceDisableTabletMode ? "Enable tablet mode" : "Disable tablet mode") : null, - BuildVars.DEBUG_PRIVATE_VERSION ? LocaleController.getString(SharedConfig.isFloatingDebugActive ? R.string.FloatingDebugDisable : R.string.FloatingDebugEnable) : null, + BuildVars.DEBUG_PRIVATE_VERSION ? getString(SharedConfig.isFloatingDebugActive ? R.string.FloatingDebugDisable : R.string.FloatingDebugEnable) : null, BuildVars.DEBUG_PRIVATE_VERSION ? "Force remove premium suggestions" : null, BuildVars.DEBUG_PRIVATE_VERSION ? "Share device info" : null, BuildVars.DEBUG_PRIVATE_VERSION ? "Force performance class" : null, BuildVars.DEBUG_PRIVATE_VERSION && !InstantCameraView.allowBigSizeCameraDebug() ? (!SharedConfig.bigCameraForRound ? "Force big camera for round" : "Disable big camera for round") : null, - LocaleController.getString(DualCameraView.dualAvailableStatic(getContext()) ? "DebugMenuDualOff" : "DebugMenuDualOn"), + getString(DualCameraView.dualAvailableStatic(getContext()) ? "DebugMenuDualOff" : "DebugMenuDualOn"), BuildVars.DEBUG_VERSION ? (SharedConfig.useSurfaceInStories ? "back to TextureView in stories" : "use SurfaceView in stories") : null, BuildVars.DEBUG_PRIVATE_VERSION ? (SharedConfig.photoViewerBlur ? "do not blur in photoviewer" : "blur in photoviewer") : null, !SharedConfig.payByInvoice ? "Enable Invoice Payment" : "Disable Invoice Payment", @@ -3952,21 +3984,22 @@ public boolean onItemClick(View view, int position) { BuildVars.DEBUG_VERSION ? "Clear bot biometry data" : null, BuildVars.DEBUG_PRIVATE_VERSION ? "Clear all login tokens" : null, SharedConfig.canBlurChat() && Build.VERSION.SDK_INT >= 31 ? (SharedConfig.useNewBlur ? "back to cpu blur" : "use new gpu blur") : null, - BuildVars.DEBUG_PRIVATE_VERSION ? (SharedConfig.botTabs3DEffect ? "disable tabs 3d effect" : "enable tabs 3d effect") : null + BuildVars.DEBUG_PRIVATE_VERSION ? (SharedConfig.botTabs3DEffect ? "disable tabs 3d effect" : "enable tabs 3d effect") : null, + SharedConfig.adaptableColorInBrowser ? "Disabled adaptive browser colors" : "Enable adaptive browser colors" }; builder.setItems(items, (dialog, which) -> { - if (which == 0) { + if (which == 0) { // Import Contacts getUserConfig().syncContacts = true; getUserConfig().saveConfig(false); getContactsController().forceImportContacts(); - } else if (which == 1) { + } else if (which == 1) { // Reload Contacts getContactsController().loadContacts(false, 0); - } else if (which == 2) { + } else if (which == 2) { // Reset Imported Contacts getContactsController().resetImportedContacts(); - } else if (which == 3) { + } else if (which == 3) { // Reset Dialogs getMessagesController().forceResetDialogs(); - } else if (which == 4) { + } else if (which == 4) { // Logs BuildVars.LOGS_ENABLED = !BuildVars.LOGS_ENABLED; SharedPreferences sharedPreferences = ApplicationLoader.applicationContext.getSharedPreferences("systemConfig", Context.MODE_PRIVATE); sharedPreferences.edit().putBoolean("logsEnabled", BuildVars.LOGS_ENABLED).commit(); @@ -3980,9 +4013,9 @@ public boolean onItemClick(View view, int position) { FileLog.e(e); } } - } else if (which == 5) { + } else if (which == 5) { // In-app camera SharedConfig.toggleInappCamera(); - } else if (which == 6) { + } else if (which == 6) { // Clear sent media cache getMessagesStorage().clearSentMedia(); SharedConfig.setNoSoundHintShowed(false); SharedPreferences.Editor editor = MessagesController.getGlobalMainSettings().edit(); @@ -4015,33 +4048,44 @@ public boolean onItemClick(View view, int position) { } } editor.commit(); - } else if (which == 7) { + } else if (which == 7) { // Call settings VoIPHelper.showCallDebugSettings(getParentActivity()); - } else if (which == 8) { + } else if (which == 8) { // ? SharedConfig.toggleRoundCamera16to9(); - } else if (which == 9) { + } else if (which == 9) { // Check app update ((LaunchActivity) getParentActivity()).checkAppUpdate(true, null); - } else if (which == 10) { + } else if (which == 10) { // Read all chats getMessagesStorage().readAllDialogs(-1); - } else if (which == 11) { + } else if (which == 11) { // Voip audio effects SharedConfig.toggleDisableVoiceAudioEffects(); - } else if (which == 12) { + } else if (which == 12) { // Clean app update SharedConfig.pendingAppUpdate = null; SharedConfig.saveConfig(); NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.appUpdateAvailable); - } else if (which == 13) { + } else if (which == 13) { // Reset suggestions Set<String> suggestions = getMessagesController().pendingSuggestions; suggestions.add("VALIDATE_PHONE_NUMBER"); suggestions.add("VALIDATE_PASSWORD"); getNotificationCenter().postNotificationName(NotificationCenter.newSuggestionsAvailable); - } else if (which == 14) { + } else if (which == 14) { // WebView Cache ApplicationLoader.applicationContext.deleteDatabase("webview.db"); ApplicationLoader.applicationContext.deleteDatabase("webviewCache.db"); WebStorage.getInstance().deleteAllData(); + try { + WebView webView = new WebView(ApplicationLoader.applicationContext); + webView.clearHistory(); + webView.destroy(); + } catch (Exception e) {} } else if (which == 15) { + CookieManager cookieManager = CookieManager.getInstance(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + cookieManager.removeAllCookies(null); + cookieManager.flush(); + } + } else if (which == 16) { // WebView debug SharedConfig.toggleDebugWebView(); - Toast.makeText(getParentActivity(), LocaleController.getString(SharedConfig.debugWebView ? R.string.DebugMenuWebViewDebugEnabled : R.string.DebugMenuWebViewDebugDisabled), Toast.LENGTH_SHORT).show(); - } else if (which == 16) { + Toast.makeText(getParentActivity(), getString(SharedConfig.debugWebView ? R.string.DebugMenuWebViewDebugEnabled : R.string.DebugMenuWebViewDebugDisabled), Toast.LENGTH_SHORT).show(); + } else if (which == 17) { // Tablet mode SharedConfig.toggleForceDisableTabletMode(); Activity activity = AndroidUtilities.findActivity(context); @@ -4050,9 +4094,9 @@ public boolean onItemClick(View view, int position) { activity.finishAffinity(); // Finishes all activities. activity.startActivity(intent); // Start the launch activity System.exit(0); - } else if (which == 17) { - FloatingDebugController.setActive((LaunchActivity) getParentActivity(), !FloatingDebugController.isActive()); } else if (which == 18) { + FloatingDebugController.setActive((LaunchActivity) getParentActivity(), !FloatingDebugController.isActive()); + } else if (which == 19) { getMessagesController().loadAppConfig(); TLRPC.TL_help_dismissSuggestion req = new TLRPC.TL_help_dismissSuggestion(); req.suggestion = "VALIDATE_PHONE_NUMBER"; @@ -4065,7 +4109,7 @@ public boolean onItemClick(View view, int position) { getMessagesController().loadAppConfig(); }); }); - } else if (which == 19) { + } else if (which == 20) { int androidVersion = Build.VERSION.SDK_INT; int cpuCount = ConnectionsManager.CPU_COUNT; int memoryClass = ((ActivityManager) ApplicationLoader.applicationContext.getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass(); @@ -4167,7 +4211,7 @@ protected void onSend(LongSparseArray<TLRPC.Dialog> dids, int count, TLRPC.TL_fo }, 250); } }); - } else if (which == 20) { + } else if (which == 21) { AlertDialog.Builder builder2 = new AlertDialog.Builder(getParentActivity(), resourcesProvider); builder2.setTitle("Force performance class"); int currentClass = SharedConfig.getDevicePerformanceClass(); @@ -4184,44 +4228,46 @@ protected void onSend(LongSparseArray<TLRPC.Dialog> dids, int count, TLRPC.TL_fo SharedConfig.overrideDevicePerformanceClass(newClass); } }); - builder2.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder2.setNegativeButton(getString("Cancel", R.string.Cancel), null); builder2.show(); - } else if (which == 21) { - SharedConfig.toggleRoundCamera(); } else if (which == 22) { + SharedConfig.toggleRoundCamera(); + } else if (which == 23) { boolean enabled = DualCameraView.dualAvailableStatic(getContext()); MessagesController.getGlobalMainSettings().edit().putBoolean("dual_available", !enabled).apply(); try { - Toast.makeText(getParentActivity(), LocaleController.getString(!enabled ? R.string.DebugMenuDualOnToast : R.string.DebugMenuDualOffToast), Toast.LENGTH_SHORT).show(); + Toast.makeText(getParentActivity(), getString(!enabled ? R.string.DebugMenuDualOnToast : R.string.DebugMenuDualOffToast), Toast.LENGTH_SHORT).show(); } catch (Exception e) {} - } else if (which == 23) { + } else if (which == 24) { SharedConfig.toggleSurfaceInStories(); for (int i = 0; i < getParentLayout().getFragmentStack().size(); i++) { getParentLayout().getFragmentStack().get(i).clearSheets(); } - } else if (which == 24) { - SharedConfig.togglePhotoViewerBlur(); } else if (which == 25) { - SharedConfig.togglePaymentByInvoice(); + SharedConfig.togglePhotoViewerBlur(); } else if (which == 26) { - getMediaDataController().loadAttachMenuBots(false, true); + SharedConfig.togglePaymentByInvoice(); } else if (which == 27) { - SharedConfig.toggleUseCamera2(currentAccount); + getMediaDataController().loadAttachMenuBots(false, true); } else if (which == 28) { - BotBiometry.clear(); + SharedConfig.toggleUseCamera2(currentAccount); } else if (which == 29) { - AuthTokensHelper.clearLogInTokens(); + BotBiometry.clear(); } else if (which == 30) { - SharedConfig.toggleUseNewBlur(); + AuthTokensHelper.clearLogInTokens(); } else if (which == 31) { + SharedConfig.toggleUseNewBlur(); + } else if (which == 32) { SharedConfig.setBotTabs3DEffect(!SharedConfig.botTabs3DEffect); + } else if (which == 33) { + SharedConfig.toggleBrowserAdaptableColors(); } }); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder.setNegativeButton(getString("Cancel", R.string.Cancel), null); showDialog(builder.create()); } else { try { - Toast.makeText(getParentActivity(), LocaleController.getString("DebugMenuLongPress", R.string.DebugMenuLongPress), Toast.LENGTH_SHORT).show(); + Toast.makeText(getParentActivity(), getString("DebugMenuLongPress", R.string.DebugMenuLongPress), Toast.LENGTH_SHORT).show(); } catch (Exception e) { FileLog.e(e); } @@ -4240,7 +4286,7 @@ protected void onSend(LongSparseArray<TLRPC.Dialog> dids, int count, TLRPC.TL_fo if (userInfo == null) return false; try { AndroidUtilities.addToClipboard(UserInfoActivity.birthdayString(userInfo.birthday)); - BulletinFactory.of(ProfileActivity.this).createCopyBulletin(LocaleController.getString(R.string.BirthdayCopied)).show(); + BulletinFactory.of(ProfileActivity.this).createCopyBulletin(getString(R.string.BirthdayCopied)).show(); } catch (Exception e) { FileLog.e(e); } @@ -4607,6 +4653,21 @@ protected void onDraw(Canvas canvas) { timeItem.setTranslationY(-1); frameLayout.addView(timeItem, LayoutHelper.createFrame(34, 34, Gravity.TOP | Gravity.LEFT)); + starBgItem = new ImageView(context); + starBgItem.setImageResource(R.drawable.star_small_outline); + starBgItem.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_actionBarDefault), PorterDuff.Mode.SRC_IN)); + starBgItem.setAlpha(0.0f); + starBgItem.setScaleY(0.0f); + starBgItem.setScaleX(0.0f); + frameLayout.addView(starBgItem, LayoutHelper.createFrame(20, 20, Gravity.TOP | Gravity.LEFT)); + + starFgItem = new ImageView(context); + starFgItem.setImageResource(R.drawable.star_small_inner); + starFgItem.setAlpha(0.0f); + starFgItem.setScaleY(0.0f); + starFgItem.setScaleX(0.0f); + frameLayout.addView(starFgItem, LayoutHelper.createFrame(20, 20, Gravity.TOP | Gravity.LEFT)); + showAvatarProgress(false, false); if (avatarsViewPager != null) { @@ -5209,7 +5270,7 @@ private void createFloatingActionButton(Context context) { }); return; } - StoryRecorder.getInstance(getParentActivity(), currentAccount) + StoryRecorder recorder = StoryRecorder.getInstance(getParentActivity(), currentAccount) .selectedPeerId(getDialogId()) .canChangePeer(false) .closeToWhenSent(new StoryRecorder.ClosingViewProvider() { @@ -5230,8 +5291,8 @@ public StoryRecorder.SourceView getView(long dialogId) { updateAvatarRoundRadius(); return StoryRecorder.SourceView.fromAvatarImage(avatarImage, ChatObject.isForum(currentChat)); } - }) - .open(StoryRecorder.SourceView.fromFloatingButton(floatingButtonContainer), true); + }); + recorder.open(StoryRecorder.SourceView.fromFloatingButton(floatingButtonContainer), true); }); floatingButton = new RLottieImageView(context); @@ -5288,6 +5349,14 @@ private void updateFloatingButtonColor() { } private void hideFloatingButton(boolean hide) { + TLRPC.User bot = getMessagesController().getUser(userId); + if (bot != null && bot.bot && bot.bot_can_edit && bot.bot_has_main_app) { + StoriesController.BotPreviewsList list = (StoriesController.BotPreviewsList) getMessagesController().getStoriesController().getStoriesList(userId, StoriesController.StoriesList.TYPE_BOTS); + ArrayList<StoriesController.UploadingStory> uploadingStories = getMessagesController().getStoriesController().getUploadingStories(userId); + if (list != null && list.getCount() + (uploadingStories == null ? 0 : uploadingStories.size()) >= getMessagesController().botPreviewMediasMax) { + hide = true; + } + } if (floatingHidden == hide || floatingButtonContainer == null || waitCanSendStoryRequest) { return; } @@ -6599,7 +6668,7 @@ private void setMediaHeaderVisible(boolean visible) { if (mediaOptionsItem != null) { mediaOptionsItem.setVisibility(View.VISIBLE); } - if (sharedMediaLayout.isCalendarItemVisible()) { + if (sharedMediaLayout.isOptionsItemVisible()) { sharedMediaLayout.photoVideoOptionsItem.setVisibility(View.VISIBLE); sharedMediaLayout.animateSearchToOptions(true, false); } else { @@ -6858,7 +6927,13 @@ public void updateSelectedMediaTabText() { } else if (id == SharedMediaLayout.TAB_GROUPUSERS) { mediaCounterTextView.setText(onlineTextView[1].getText()); } else if (id == SharedMediaLayout.TAB_STORIES) { - mediaCounterTextView.setText(LocaleController.formatPluralString("ProfileStoriesCount", sharedMediaLayout.getStoriesCount(id))); + if (isBot) { + mediaCounterTextView.setText(sharedMediaLayout.getBotPreviewsSubtitle(false)); + } else { + mediaCounterTextView.setText(LocaleController.formatPluralString("ProfileStoriesCount", sharedMediaLayout.getStoriesCount(id))); + } + } else if (id == SharedMediaLayout.TAB_BOT_PREVIEWS) { + mediaCounterTextView.setText(sharedMediaLayout.getBotPreviewsSubtitle(true)); } else if (id == SharedMediaLayout.TAB_ARCHIVED_STORIES) { mediaCounterTextView.setText(LocaleController.formatPluralString("ProfileStoriesArchiveCount", sharedMediaLayout.getStoriesCount(id))); } else if (id == SharedMediaLayout.TAB_RECOMMENDED_CHANNELS) { @@ -7137,6 +7212,10 @@ public void onAnimationEnd(Animator animation) { float extra = (avatarContainer.getMeasuredWidth() - AndroidUtilities.dp(42)) * avatarScale; timeItem.setTranslationX(avatarContainer.getX() + AndroidUtilities.dp(16) + extra); timeItem.setTranslationY(avatarContainer.getY() + AndroidUtilities.dp(15) + extra); + starBgItem.setTranslationX(avatarContainer.getX() + AndroidUtilities.dp(28) + extra); + starBgItem.setTranslationY(avatarContainer.getY() + AndroidUtilities.dp(24) + extra); + starFgItem.setTranslationX(avatarContainer.getX() + AndroidUtilities.dp(28) + extra); + starFgItem.setTranslationY(avatarContainer.getY() + AndroidUtilities.dp(24) + extra); avatarContainer.setScaleX(avatarScale); avatarContainer.setScaleY(avatarScale); @@ -7177,6 +7256,10 @@ public void onAnimationEnd(Animator animation) { float extra = AndroidUtilities.dp(42) * avatarScale - AndroidUtilities.dp(42); timeItem.setTranslationX(avatarContainer.getX() + AndroidUtilities.dp(16) + extra); timeItem.setTranslationY(avatarContainer.getY() + AndroidUtilities.dp(15) + extra); + starBgItem.setTranslationX(avatarContainer.getX() + AndroidUtilities.dp(28) + extra); + starBgItem.setTranslationY(avatarContainer.getY() + AndroidUtilities.dp(24) + extra); + starFgItem.setTranslationX(avatarContainer.getX() + AndroidUtilities.dp(28) + extra); + starFgItem.setTranslationY(avatarContainer.getY() + AndroidUtilities.dp(24) + extra); } nameX = -21 * AndroidUtilities.density * diff; nameY = (float) Math.floor(avatarY) + AndroidUtilities.dp(1.3f) + AndroidUtilities.dp(7) * diff + titleAnimationsYDiff * (1f - avatarAnimationProgress); @@ -7554,7 +7637,7 @@ public void didReceivedNotification(int id, int account, final Object... args) { } else if (id == NotificationCenter.closeChats) { removeSelfFromStack(true); } else if (id == NotificationCenter.botInfoDidLoad) { - TLRPC.BotInfo info = (TLRPC.BotInfo) args[0]; + TL_bots.BotInfo info = (TL_bots.BotInfo) args[0]; if (info.user_id == userId) { botInfo = info; updateListAnimated(false); @@ -7607,6 +7690,13 @@ public void didReceivedNotification(int id, int account, final Object... args) { birthdayFetcher.subscribe(this::createBirthdayEffect); } } + if (otherItem != null) { + if (hasPrivacyCommand()) { + otherItem.showSubItem(bot_privacy); + } else { + otherItem.hideSubItem(bot_privacy); + } + } } } else if (id == NotificationCenter.privacyRulesUpdated) { if (qrItem != null) { @@ -7677,6 +7767,8 @@ public void didReceivedNotification(int id, int account, final Object... args) { updateEditColorIcon(); } else if (id == NotificationCenter.starBalanceUpdated) { updateListAnimated(false); + } else if (id == NotificationCenter.botStarsUpdated) { + updateListAnimated(false); } } @@ -7724,6 +7816,21 @@ private void updateTimeItem() { } } + private void updateStar() { + if (starBgItem == null || starFgItem == null) return; + if (needStarImage && currentChat != null && (currentChat.flags2 & 2048) != 0) { + starFgItem.setTag(1); + starFgItem.setVisibility(View.VISIBLE); + starBgItem.setTag(1); + starBgItem.setVisibility(View.VISIBLE); + } else { + starFgItem.setTag(null); + starFgItem.setVisibility(View.GONE); + starBgItem.setTag(null); + starBgItem.setVisibility(View.GONE); + } + } + @Override public boolean needDelayOpenAnimation() { if (playProfileAnimation == 0) { @@ -7867,6 +7974,7 @@ public void setPlayProfileAnimation(int type) { SharedPreferences preferences = MessagesController.getGlobalMainSettings(); if (!AndroidUtilities.isTablet()) { needTimerImage = type != 0; + needStarImage = type != 0; if (preferences.getBoolean("view_animations", true)) { playProfileAnimation = type; } else if (type == 2) { @@ -8033,6 +8141,16 @@ public AnimatorSet onCustomTransitionAnimation(final boolean isOpen, final Runna if (timeItem != null) { timeItem.setAlpha(1.0f); } + if (starFgItem != null) { + starFgItem.setAlpha(1.0f); + starFgItem.setScaleX(1.0f); + starFgItem.setScaleY(1.0f); + } + if (starBgItem != null) { + starBgItem.setAlpha(1.0f); + starBgItem.setScaleX(1.0f); + starBgItem.setScaleY(1.0f); + } if (parentLayout != null && parentLayout.getFragmentStack().size() >= 2) { BaseFragment fragment = parentLayout.getFragmentStack().get(parentLayout.getFragmentStack().size() - 2); if (fragment instanceof ChatActivityInterface) { @@ -8047,6 +8165,7 @@ public AnimatorSet onCustomTransitionAnimation(final boolean isOpen, final Runna } if (previousTransitionFragment != null) { updateTimeItem(); + updateStar(); } final AnimatorSet animatorSet = new AnimatorSet(); animatorSet.setDuration(playProfileAnimation == 2 ? 250 : 180); @@ -8123,6 +8242,16 @@ public AnimatorSet onCustomTransitionAnimation(final boolean isOpen, final Runna animators.add(ObjectAnimator.ofFloat(timeItem, View.SCALE_X, 1.0f, 0.0f)); animators.add(ObjectAnimator.ofFloat(timeItem, View.SCALE_Y, 1.0f, 0.0f)); } + if (starFgItem.getTag() != null) { + animators.add(ObjectAnimator.ofFloat(starFgItem, View.ALPHA, 1.0f, 0.0f)); + animators.add(ObjectAnimator.ofFloat(starFgItem, View.SCALE_X, 1.0f, 0.0f)); + animators.add(ObjectAnimator.ofFloat(starFgItem, View.SCALE_Y, 1.0f, 0.0f)); + } + if (starBgItem.getTag() != null) { + animators.add(ObjectAnimator.ofFloat(starBgItem, View.ALPHA, 1.0f, 0.0f)); + animators.add(ObjectAnimator.ofFloat(starBgItem, View.SCALE_X, 1.0f, 0.0f)); + animators.add(ObjectAnimator.ofFloat(starBgItem, View.SCALE_Y, 1.0f, 0.0f)); + } if (animatingItem != null) { animatingItem.setAlpha(1.0f); animators.add(ObjectAnimator.ofFloat(animatingItem, View.ALPHA, 0.0f)); @@ -8194,6 +8323,18 @@ public AnimatorSet onCustomTransitionAnimation(final boolean isOpen, final Runna animators.add(ObjectAnimator.ofFloat(timeItem, View.SCALE_X, 0.0f, 1.0f)); animators.add(ObjectAnimator.ofFloat(timeItem, View.SCALE_Y, 0.0f, 1.0f)); } + if (starFgItem.getTag() != null) { + starFgItem.setAlpha(0f); + animators.add(ObjectAnimator.ofFloat(starFgItem, View.ALPHA, 0.0f, 1.0f)); + animators.add(ObjectAnimator.ofFloat(starFgItem, View.SCALE_X, 0.0f, 1.0f)); + animators.add(ObjectAnimator.ofFloat(starFgItem, View.SCALE_Y, 0.0f, 1.0f)); + } + if (starBgItem.getTag() != null) { + starBgItem.setAlpha(0f); + animators.add(ObjectAnimator.ofFloat(starBgItem, View.ALPHA, 0.0f, 1.0f)); + animators.add(ObjectAnimator.ofFloat(starBgItem, View.SCALE_X, 0.0f, 1.0f)); + animators.add(ObjectAnimator.ofFloat(starBgItem, View.SCALE_Y, 0.0f, 1.0f)); + } if (animatingItem != null) { animatingItem.setAlpha(0.0f); animators.add(ObjectAnimator.ofFloat(animatingItem, View.ALPHA, 1.0f)); @@ -8396,6 +8537,11 @@ public void setUserInfo( } if (otherItem != null) { otherItem.setSubItemShown(start_secret_chat, !getMessagesController().isUserPremiumBlocked(userId)); + if (hasPrivacyCommand()) { + otherItem.showSubItem(bot_privacy); + } else { + otherItem.hideSubItem(bot_privacy); + } } } @@ -8489,6 +8635,7 @@ private void updateRowsIds() { clearLogsRow = -1; switchBackendRow = -1; versionRow = -1; + botAppRow = -1; sendMessageRow = -1; reportRow = -1; @@ -8528,6 +8675,8 @@ private void updateRowsIds() { sharedMediaRow = -1; notificationsSimpleRow = -1; settingsRow = -1; + balanceRow = -1; + balanceDividerRow = -1; unblockRow = -1; joinRow = -1; @@ -8547,10 +8696,16 @@ private void updateRowsIds() { if (!hasMedia) { hasMedia = sharedMediaPreloader.hasSavedMessages; } + if (!hasMedia) { + hasMedia = sharedMediaPreloader.hasPreviews; + } } if (!hasMedia && userInfo != null) { hasMedia = userInfo.stories_pinned_available; } + if (!hasMedia && userInfo != null && userInfo.bot_info != null) { + hasMedia = userInfo.bot_info.has_preview_medias; + } if (!hasMedia && chatInfo != null) { hasMedia = chatInfo.stories_pinned_available; } @@ -8606,7 +8761,7 @@ private void updateRowsIds() { if (!getMessagesController().premiumFeaturesBlocked()) { premiumRow = rowCount++; } - if (getMessagesController().starsPurchaseAvailable() && (StarsController.getInstance(currentAccount).getBalance() > 0 || StarsController.getInstance(currentAccount).hasTransactions())) { + if (getMessagesController().starsPurchaseAvailable()) { starsRow = rowCount++; } if (!getMessagesController().premiumFeaturesBlocked()) { @@ -8675,6 +8830,9 @@ private void updateRowsIds() { if (userId != getUserConfig().getClientUserId()) { notificationsRow = rowCount++; } + if (isBot && user != null && user.bot_has_main_app) { + botAppRow = rowCount++; + } infoEndRow = rowCount - 1; infoSectionRow = rowCount++; @@ -8691,12 +8849,21 @@ private void updateRowsIds() { } } + + boolean divider = false; + if (user != null && user.bot) { + if (BotStarsController.getInstance(currentAccount).getBalance(userId) > 0 || BotStarsController.getInstance(currentAccount).hasTransactions(userId)) { + balanceRow = rowCount++; + } + } + if (user != null && isBot && !user.bot_nochats) { addToGroupButtonRow = rowCount++; addToGroupInfoRow = rowCount++; + } else if (balanceRow >= 0) { + divider = true; } - boolean divider = false; if (!myProfile && showAddToContacts && user != null && !user.contact && !user.bot && !UserObject.isService(user.id)) { addToContactsRow = rowCount++; divider = true; @@ -8709,7 +8876,7 @@ private void updateRowsIds() { reportDividerRow = rowCount++; } - if (hasMedia || userInfo != null && userInfo.common_chats_count != 0 || myProfile) { + if (hasMedia || (user != null && user.bot && user.bot_can_edit) || userInfo != null && userInfo.common_chats_count != 0 || myProfile) { sharedMediaRow = rowCount++; } else if (lastSectionRow == -1 && needSendMessage) { sendMessageRow = rowCount++; @@ -8760,6 +8927,19 @@ private void updateRowsIds() { if (chatInfo.banned_count != 0 || chatInfo.kicked_count != 0) { blockedUsersRow = rowCount++; } + long did = chatId != 0 ? -chatId : userId; + if ( + chatInfo != null && + chatInfo.can_view_stars_revenue && ( + BotStarsController.getInstance(currentAccount).getBalance(did) > 0 || + BotStarsController.getInstance(currentAccount).hasTransactions(did) + ) || + chatInfo != null && + chatInfo.can_view_revenue && + BotStarsController.getInstance(currentAccount).getChannelBalance(did) > 0 + ) { + balanceRow = rowCount++; + } settingsRow = rowCount++; membersSectionRow = rowCount++; } @@ -9073,7 +9253,11 @@ private void updateProfileData(boolean reload) { } else if (MessagesController.isSupportUser(user)) { newString2 = LocaleController.getString("SupportStatus", R.string.SupportStatus); } else if (isBot) { - newString2 = LocaleController.getString("Bot", R.string.Bot); + if (user.bot_active_users != 0) { + newString2 = LocaleController.formatPluralStringComma("BotUsers", user.bot_active_users, ','); + } else { + newString2 = LocaleController.getString(R.string.Bot); + } } else { isOnline[0] = false; newString2 = LocaleController.formatUserStatus(currentAccount, user, isOnline, shortStatus ? new boolean[1] : null); @@ -9688,6 +9872,12 @@ private void createActionBarMenu(boolean animated) { otherItem.addSubItem(share_contact, R.drawable.msg_share, LocaleController.getString("ShareContact", R.string.ShareContact)); } if (isBot) { + otherItem.addSubItem(bot_privacy, R.drawable.menu_privacy_policy, getString(R.string.BotPrivacyPolicy)); + if (hasPrivacyCommand()) { + otherItem.showSubItem(bot_privacy); + } else { + otherItem.hideSubItem(bot_privacy); + } if (!userBlocked) { otherItem.addSubItem(block_contact, R.drawable.msg_block2, LocaleController.getString(R.string.DeleteAndBlock)).setColors(getThemedColor(Theme.key_text_RedRegular), getThemedColor(Theme.key_text_RedRegular)); } else { @@ -9742,7 +9932,7 @@ private void createActionBarMenu(boolean animated) { otherItem.addSubItem(call_item, R.drawable.msg_voicechat, chat.megagroup && !chat.gigagroup ? LocaleController.getString("StartVoipChat", R.string.StartVoipChat) : LocaleController.getString("StartVoipChannel", R.string.StartVoipChannel)); hasVoiceChatItem = true; } - if ((chatInfo.can_view_stats || getMessagesController().getStoriesController().canPostStories(getDialogId())) && topicId == 0) { + if ((chatInfo.can_view_stats || chatInfo.can_view_revenue || chatInfo.can_view_stars_revenue || getMessagesController().getStoriesController().canPostStories(getDialogId())) && topicId == 0) { otherItem.addSubItem(statistics, R.drawable.msg_stats, LocaleController.getString("Statistics", R.string.Statistics)); } ChatObject.Call call = getMessagesController().getGroupCall(chatId, false); @@ -10548,7 +10738,9 @@ private class ListAdapter extends RecyclerListView.SelectionAdapter { VIEW_TYPE_LOCATION = 21, VIEW_TYPE_HOURS = 22, VIEW_TYPE_CHANNEL = 23, - VIEW_TYPE_STARS_TEXT_CELL = 24; + VIEW_TYPE_STARS_TEXT_CELL = 24, + VIEW_TYPE_BOT_APP = 25, + VIEW_TYPE_SHADOW_TEXT = 26; private Context mContext; @@ -10637,6 +10829,10 @@ protected int processColor(int color) { view = new ShadowSectionCell(mContext, resourcesProvider); break; } + case VIEW_TYPE_SHADOW_TEXT: { + view = new TextInfoPrivacyCell(mContext, resourcesProvider); + break; + } case VIEW_TYPE_USER: { view = new UserCell(mContext, addMemberRow == -1 ? 9 : 6, 0, true, resourcesProvider); view.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); @@ -10788,6 +10984,18 @@ public int processColor(int color) { }; view.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); break; + case VIEW_TYPE_BOT_APP: + FrameLayout frameLayout = new FrameLayout(mContext); + ButtonWithCounterView button = new ButtonWithCounterView(mContext, resourcesProvider); + button.setText(LocaleController.getString(R.string.ProfileBotOpenApp), false); + button.setOnClickListener(v -> { + TLRPC.User bot = getMessagesController().getUser(userId); + getMessagesController().openApp(ProfileActivity.this, bot, getClassGuid(), null); + }); + frameLayout.addView(button, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.FILL, 18, 14, 18, 14)); + view = frameLayout; + view.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); + break; } if (viewType != VIEW_TYPE_SHARED_MEDIA) { view.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT)); @@ -10925,13 +11133,15 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { } else if (currentChat != null) { TLRPC.Chat chat = getMessagesController().getChat(chatId); username = ChatObject.getPublicUsername(chat); - usernames.addAll(chat.usernames); + if (chat != null) { + usernames.addAll(chat.usernames); + } if (ChatObject.isPublic(chat)) { containsQr = true; text = getMessagesController().linkPrefix + "/" + username + (topicId != 0 ? "/" + topicId : ""); value = LocaleController.getString("InviteLink", R.string.InviteLink); } else { - text = getMessagesController().linkPrefix + "/c/" + chat.id + (topicId != 0 ? "/" + topicId : ""); + text = getMessagesController().linkPrefix + "/c/" + chatId + (topicId != 0 ? "/" + topicId : ""); value = LocaleController.getString("InviteLinkPrivate", R.string.InviteLinkPrivate); } } else { @@ -11087,6 +11297,25 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { } } else if (position == settingsRow) { textCell.setTextAndIcon(LocaleController.getString("ChannelAdminSettings", R.string.ChannelAdminSettings), R.drawable.msg_customize, position != membersSectionRow - 1); + } else if (position == balanceRow) { + long did = chatId != 0 ? -chatId : userId; + long stars_balance = BotStarsController.getInstance(currentAccount).getBalance(did); + long ton_balance = BotStarsController.getInstance(currentAccount).getChannelBalance(did); + SpannableStringBuilder ssb = new SpannableStringBuilder(); + if (ton_balance > 0) { + DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US); + symbols.setDecimalSeparator('.'); + DecimalFormat formatterTON = new DecimalFormat("#.##", symbols); + formatterTON.setMinimumFractionDigits(2); + formatterTON.setMaximumFractionDigits(3); + formatterTON.setGroupingUsed(false); + ssb.append("TON ").append(formatterTON.format(ton_balance / 1_000_000_000.0)); + } + if (stars_balance > 0) { + if (ssb.length() > 0) ssb.append(" "); + ssb.append("XTR ").append(LocaleController.formatNumber(stars_balance, ',')); + } + textCell.setTextAndValueAndIcon(LocaleController.getString(R.string.ChannelStars), ChannelMonetizationLayout.replaceTON(StarsIntroActivity.replaceStarsWithPlain(ssb, .7f), textCell.getTextView().getPaint()), R.drawable.menu_feature_paid, true); } else if (position == blockedUsersRow) { if (chatInfo != null) { textCell.setTextAndValueAndIcon(LocaleController.getString("ChannelBlacklist", R.string.ChannelBlacklist), String.format("%d", Math.max(chatInfo.banned_count, chatInfo.kicked_count)), R.drawable.msg_user_remove, position != membersSectionRow - 1); @@ -11159,14 +11388,13 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { setAvatarCell = textCell; } else if (position == addToGroupButtonRow) { textCell.setTextAndIcon(LocaleController.getString("AddToGroupOrChannel", R.string.AddToGroupOrChannel), R.drawable.msg_groups_create, false); - textCell.setColors(Theme.key_windowBackgroundWhiteBlueIcon, Theme.key_windowBackgroundWhiteBlueButton); } else if (position == premiumRow) { textCell.setTextAndIcon(LocaleController.getString(R.string.TelegramPremium), new AnimatedEmojiDrawable.WrapSizeDrawable(PremiumGradient.getInstance().premiumStarMenuDrawable, dp(24), dp(24)), true); textCell.setImageLeft(23); } else if (position == starsRow) { StarsController c = StarsController.getInstance(currentAccount); long balance = c.getBalance(); - textCell.setTextAndValueAndIcon(LocaleController.getString(R.string.MenuTelegramStars), c.balanceAvailable() ? LocaleController.formatNumber((int) balance, ',') : "", new AnimatedEmojiDrawable.WrapSizeDrawable(PremiumGradient.getInstance().goldenStarMenuDrawable, dp(24), dp(24)), true); + textCell.setTextAndValueAndIcon(LocaleController.getString(R.string.MenuTelegramStars), c.balanceAvailable() && balance > 0 ? LocaleController.formatNumber((int) balance, ',') : "", new AnimatedEmojiDrawable.WrapSizeDrawable(PremiumGradient.getInstance().goldenStarMenuDrawable, dp(24), dp(24)), true); textCell.setImageLeft(23); } else if (position == businessRow) { textCell.setTextAndIcon(TextCell.applyNewSpan(LocaleController.getString(R.string.TelegramBusiness)), R.drawable.menu_shop, true); @@ -11237,7 +11465,7 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { val = String.format(Locale.US, LocaleController.getPluralString("NotificationTopicExceptionsDesctription", notificationsExceptionTopics.size()), val, notificationsExceptionTopics.size()); } checkCell.setAnimationsEnabled(fragmentOpened); - checkCell.setTextAndValueAndCheck(LocaleController.getString("Notifications", R.string.Notifications), val, enabled, false); + checkCell.setTextAndValueAndCheck(LocaleController.getString("Notifications", R.string.Notifications), val, enabled, botAppRow >= 0); } break; case VIEW_TYPE_SHADOW: @@ -11250,6 +11478,28 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { sectionCell.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider, getThemedColor(Theme.key_windowBackgroundGrayShadow))); } break; + case VIEW_TYPE_SHADOW_TEXT: { + TextInfoPrivacyCell cell = (TextInfoPrivacyCell) holder.itemView; + if (position == infoSectionRow) { + if (botAppRow >= 0) { + final TLRPC.User user = getMessagesController().getUser(userId); + final boolean botOwner = user != null && user.bot && user.bot_can_edit; + cell.setFixedSize(0); + cell.setText(AndroidUtilities.replaceSingleTag(getString(botOwner ? R.string.ProfileBotOpenAppInfoOwner : R.string.ProfileBotOpenAppInfo), () -> { + Browser.openUrl(getContext(), getString(botOwner ? R.string.ProfileBotOpenAppInfoOwnerLink : R.string.ProfileBotOpenAppInfoLink)); + })); + } else { + cell.setFixedSize(14); + cell.setText(null); + } + } + if (position == infoSectionRow && lastSectionRow == -1 && secretSettingsSectionRow == -1 && sharedMediaRow == -1 && membersSectionRow == -1 || position == secretSettingsSectionRow || position == lastSectionRow || position == membersSectionRow && lastSectionRow == -1 && sharedMediaRow == -1) { + cell.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider_bottom, getThemedColor(Theme.key_windowBackgroundGrayShadow))); + } else { + cell.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider, getThemedColor(Theme.key_windowBackgroundGrayShadow))); + } + break; + } case VIEW_TYPE_USER: UserCell userCell = (UserCell) holder.itemView; TLRPC.ChatParticipant part; @@ -11337,6 +11587,9 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { getMessagesController().getChat(userInfo.personal_channel_id), profileChannelMessageFetcher != null ? profileChannelMessageFetcher.messageObject : null ); + break; + case VIEW_TYPE_BOT_APP: + break; } } @@ -11495,7 +11748,7 @@ public int getItemViewType(int position) { position == questionRow || position == devicesRow || position == filtersRow || position == stickersRow || position == faqRow || position == policyRow || position == sendLogsRow || position == sendLastLogsRow || position == clearLogsRow || position == switchBackendRow || position == setAvatarRow || position == addToGroupButtonRow || - position == addToContactsRow || position == liteModeRow || position == premiumGiftingRow || position == businessRow) { + position == addToContactsRow || position == liteModeRow || position == premiumGiftingRow || position == businessRow || position == balanceRow) { return VIEW_TYPE_TEXT; } else if (position == notificationsDividerRow) { return VIEW_TYPE_DIVIDER; @@ -11503,11 +11756,11 @@ public int getItemViewType(int position) { return VIEW_TYPE_NOTIFICATIONS_CHECK; } else if (position == notificationsSimpleRow) { return VIEW_TYPE_NOTIFICATIONS_CHECK_SIMPLE; - } else if (position == infoSectionRow || position == lastSectionRow || position == membersSectionRow || + } else if (position == lastSectionRow || position == membersSectionRow || position == secretSettingsSectionRow || position == settingsSectionRow || position == devicesSectionRow || position == helpSectionCell || position == setAvatarSectionRow || position == passwordSuggestionSectionRow || position == phoneSuggestionSectionRow || position == premiumSectionsRow || position == reportDividerRow || - position == channelDividerRow || position == graceSuggestionSectionRow + position == channelDividerRow || position == graceSuggestionSectionRow || position == balanceDividerRow ) { return VIEW_TYPE_SHADOW; } else if (position >= membersStartRow && position < membersEndRow) { @@ -11534,6 +11787,10 @@ public int getItemViewType(int position) { return VIEW_TYPE_HOURS; } else if (position == channelRow) { return VIEW_TYPE_CHANNEL; + } else if (position == botAppRow) { + return VIEW_TYPE_BOT_APP; + } else if (position == infoSectionRow) { + return VIEW_TYPE_SHADOW_TEXT; } return 0; } @@ -11792,7 +12049,6 @@ private SearchResult[] onCreateSearchArray() { new SearchResult(323, LocaleController.getString(R.string.ChatListSwipeGesture), "swipeGestureHeaderRow", LocaleController.getString("ChatSettings", R.string.ChatSettings), R.drawable.msg2_discussion, () -> presentFragment(new ThemeActivity(ThemeActivity.THEME_TYPE_BASIC))), new SearchResult(324, LocaleController.getString(R.string.AppIcon), "appIconHeaderRow", LocaleController.getString("ChatSettings", R.string.ChatSettings), R.drawable.msg2_discussion, () -> presentFragment(new ThemeActivity(ThemeActivity.THEME_TYPE_BASIC))), new SearchResult(305, LocaleController.getString("AutoNightTheme", R.string.AutoNightTheme), LocaleController.getString("ChatSettings", R.string.ChatSettings), R.drawable.msg2_discussion, () -> presentFragment(new ThemeActivity(ThemeActivity.THEME_TYPE_NIGHT))), - new SearchResult(307, LocaleController.getString("ChromeCustomTabs", R.string.ChromeCustomTabs), "customTabsRow", LocaleController.getString("ChatSettings", R.string.ChatSettings), R.drawable.msg2_discussion, () -> presentFragment(new ThemeActivity(ThemeActivity.THEME_TYPE_BASIC))), new SearchResult(328, LocaleController.getString(R.string.NextMediaTap), "nextMediaTapRow", LocaleController.getString("ChatSettings", R.string.ChatSettings), R.drawable.msg2_discussion, () -> presentFragment(new ThemeActivity(ThemeActivity.THEME_TYPE_BASIC))), new SearchResult(327, LocaleController.getString(R.string.RaiseToListen), "raiseToListenRow", LocaleController.getString("ChatSettings", R.string.ChatSettings), R.drawable.msg2_discussion, () -> presentFragment(new ThemeActivity(ThemeActivity.THEME_TYPE_BASIC))), new SearchResult(310, LocaleController.getString("RaiseToSpeak", R.string.RaiseToSpeak), "raiseToSpeakRow", LocaleController.getString("ChatSettings", R.string.ChatSettings), R.drawable.msg2_discussion, () -> presentFragment(new ThemeActivity(ThemeActivity.THEME_TYPE_BASIC))), @@ -12835,6 +13091,9 @@ public void fillPositions(SparseIntArray sparseIntArray) { put(++pointer, bizLocationRow, sparseIntArray); put(++pointer, birthdayRow, sparseIntArray); put(++pointer, channelRow, sparseIntArray); + put(++pointer, balanceRow, sparseIntArray); + put(++pointer, balanceDividerRow, sparseIntArray); + put(++pointer, botAppRow, sparseIntArray); } private void put(int id, int position, SparseIntArray sparseIntArray) { @@ -13401,6 +13660,7 @@ private boolean editRow(View view, int position) { userFull.flags2 |= 32; userFull.birthday = birthday; } + getMessagesController().invalidateContentSettings(); getConnectionsManager().sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { if (res instanceof TLRPC.TL_boolTrue) { BulletinFactory.of(ProfileActivity.this) @@ -13450,6 +13710,7 @@ private boolean editRow(View view, int position) { userFull.birthday = null; userFull.flags2 &=~ 32; } + getMessagesController().invalidateContentSettings(); getConnectionsManager().sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { if (err != null) { BulletinFactory.showError(err); @@ -13457,8 +13718,7 @@ private boolean editRow(View view, int position) { BulletinFactory.of(this).createErrorBulletin(LocaleController.getString(R.string.UnknownError)).show(); } })); - updateRowsIds(); - listAdapter.notifyItemRemoved(position); + updateListAnimated(false); getMessagesStorage().updateUserInfo(userFull, false); }); builder.setNegativeButton(LocaleController.getString(R.string.Cancel), null); @@ -13480,6 +13740,7 @@ private boolean editRow(View view, int position) { builder.setMessage(LocaleController.getString(R.string.ProfileChannelClearMessage)); builder.setPositiveButton(LocaleController.getString(R.string.Remove), (di, w) -> { TLRPC.TL_account_updatePersonalChannel req = new TLRPC.TL_account_updatePersonalChannel(); + req.channel = new TLRPC.TL_inputChannelEmpty(); if (userFull != null) { userFull.personal_channel_id = 0; userFull.personal_channel_message = 0; @@ -13492,8 +13753,7 @@ private boolean editRow(View view, int position) { BulletinFactory.of(this).createErrorBulletin(LocaleController.getString(R.string.UnknownError)).show(); } })); - updateRowsIds(); - listAdapter.notifyItemRemoved(position); + updateListAnimated(false); getMessagesStorage().updateUserInfo(userFull, false); }); builder.setNegativeButton(LocaleController.getString(R.string.Cancel), null); @@ -13539,4 +13799,16 @@ public void setColorFilter(ColorFilter colorFilter) {} } } + public boolean hasPrivacyCommand() { + if (!isBot) return false; + if (userInfo == null || userInfo.bot_info == null) return false; + if (userInfo.bot_info.privacy_policy_url != null) return true; + for (TLRPC.TL_botCommand command : userInfo.bot_info.commands) { + if ("privacy".equals(command.command)) { + return true; + } + } + return true; + } + } \ No newline at end of file diff --git a/TMessagesProj/src/main/java/org/telegram/ui/RevenueSharingAdsInfoBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/RevenueSharingAdsInfoBottomSheet.java index cd0f07ccf85..350bd1a44a5 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/RevenueSharingAdsInfoBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/RevenueSharingAdsInfoBottomSheet.java @@ -51,7 +51,7 @@ public RevenueSharingAdsInfoBottomSheet(BaseFragment baseFragment, Context conte topIconBgPaint = new Paint(Paint.ANTI_ALIAS_FLAG); topIconBgPaint.setStyle(Paint.Style.FILL); - topIconBgPaint.setColor(Theme.getColor(Theme.key_featuredStickers_addButton)); + topIconBgPaint.setColor(Theme.getColor(Theme.key_featuredStickers_addButton, resourcesProvider)); LinearLayout linearLayout = new LinearLayout(context); linearLayout.setOrientation(LinearLayout.VERTICAL); @@ -95,7 +95,7 @@ public RevenueSharingAdsInfoBottomSheet(BaseFragment baseFragment, Context conte linearLayout.addView(info3, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 0, 0, 16, 0, 0)); View divider = new View(getContext()); - divider.setBackgroundColor(Theme.getColor(Theme.key_divider)); + divider.setBackgroundColor(Theme.getColor(Theme.key_divider, resourcesProvider)); LinearLayout.LayoutParams dividerLayoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 1); dividerLayoutParams.setMargins(AndroidUtilities.dp(24), AndroidUtilities.dp(20), AndroidUtilities.dp(24), AndroidUtilities.dp(20)); linearLayout.addView(divider, dividerLayoutParams); @@ -132,11 +132,11 @@ public RevenueSharingAdsInfoBottomSheet(BaseFragment baseFragment, Context conte buttonTextView.setSingleLine(true); buttonTextView.setGravity(Gravity.CENTER); buttonTextView.setEllipsize(TextUtils.TruncateAt.END); - buttonTextView.setTextColor(Theme.getColor(Theme.key_featuredStickers_buttonText)); + buttonTextView.setTextColor(Theme.getColor(Theme.key_featuredStickers_buttonText, resourcesProvider)); buttonTextView.setTypeface(AndroidUtilities.bold()); buttonTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); buttonTextView.setText(LocaleController.getString("RevenueSharingAdsAlertButton", R.string.RevenueSharingAdsAlertButton)); - buttonTextView.setBackground(Theme.AdaptiveRipple.filledRect(Theme.getColor(Theme.key_featuredStickers_addButton), 6)); + buttonTextView.setBackground(Theme.AdaptiveRipple.filledRect(Theme.getColor(Theme.key_featuredStickers_addButton, resourcesProvider), 6)); buttonTextView.setOnClickListener(e -> dismiss()); linearLayout.addView(buttonTextView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48, 0, 14, 22, 14, 14)); @@ -163,13 +163,13 @@ public FeatureCell(Context context, int icon, CharSequence header, CharSequence boolean isRtl = LocaleController.isRTL; ImageView ivIcon = new ImageView(getContext()); Drawable iconDrawable = getContext().getResources().getDrawable(icon).mutate(); - iconDrawable.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.MULTIPLY)); + iconDrawable.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider), PorterDuff.Mode.MULTIPLY)); ivIcon.setImageDrawable(iconDrawable); addView(ivIcon, LayoutHelper.createFrame(ICON_SIZE, ICON_SIZE, isRtl ? Gravity.RIGHT : Gravity.LEFT, isRtl ? 0 : ITEM_HORIZONTAL_PADDING, 6, isRtl ? ITEM_HORIZONTAL_PADDING : 0, 0)); TextView tvTitle = new TextView(getContext()); tvTitle.setText(header); - tvTitle.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + tvTitle.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); tvTitle.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); tvTitle.setTypeface(AndroidUtilities.bold()); addView(tvTitle, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, isRtl ? Gravity.RIGHT : Gravity.LEFT, isRtl ? ITEM_HORIZONTAL_PADDING : ITEM_TEXT_PADDING, 0, isRtl ? ITEM_TEXT_PADDING : ITEM_HORIZONTAL_PADDING, 0)); @@ -177,7 +177,7 @@ public FeatureCell(Context context, int icon, CharSequence header, CharSequence LinkSpanDrawable.LinksTextView tvSubtitle = new LinkSpanDrawable.LinksTextView(getContext()); tvSubtitle.setText(text); tvSubtitle.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); - tvSubtitle.setTextColor(Theme.getColor(Theme.key_player_actionBarSubtitle)); + tvSubtitle.setTextColor(Theme.getColor(Theme.key_player_actionBarSubtitle, resourcesProvider)); tvSubtitle.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); tvSubtitle.setLineSpacing(AndroidUtilities.dp(2), 1f); addView(tvSubtitle, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, isRtl ? Gravity.RIGHT : Gravity.LEFT, isRtl ? ITEM_HORIZONTAL_PADDING : ITEM_TEXT_PADDING, 18, isRtl ? ITEM_TEXT_PADDING : ITEM_HORIZONTAL_PADDING, 0)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/SecretVoicePlayer.java b/TMessagesProj/src/main/java/org/telegram/ui/SecretVoicePlayer.java index b21309e0c6e..f0392e785d3 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/SecretVoicePlayer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/SecretVoicePlayer.java @@ -838,7 +838,7 @@ public void dismiss() { AndroidUtilities.runOnUIThread(this.closeAction); this.closeAction = null; - myCell.setInvalidateCallback(() -> {}); +// myCell.setOverrideInvalidate(() -> {}); thanosEffect = new ThanosEffect(context, null); windowView.addView(thanosEffect, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL)); thanosEffect.animate(myCell, 1.5f, super::dismiss); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/SponsoredMessageInfoView.java b/TMessagesProj/src/main/java/org/telegram/ui/SponsoredMessageInfoView.java index b5879177aca..ccdd91e1811 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/SponsoredMessageInfoView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/SponsoredMessageInfoView.java @@ -1,6 +1,7 @@ package org.telegram.ui; import android.app.Activity; +import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.util.TypedValue; @@ -23,7 +24,7 @@ public class SponsoredMessageInfoView extends FrameLayout { LinearLayout linearLayout; - public SponsoredMessageInfoView(Activity context, Theme.ResourcesProvider resourcesProvider) { + public SponsoredMessageInfoView(Context context, Runnable close, Theme.ResourcesProvider resourcesProvider) { super(context); LinearLayout linearLayout = new LinearLayout(context); @@ -41,18 +42,30 @@ public SponsoredMessageInfoView(Activity context, Theme.ResourcesProvider resour description1.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); description1.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); description1.setLineSpacing(AndroidUtilities.dp(2), 1f); + description1.setOnLinkPressListener(link -> { + if (close != null) close.run(); + link.onClick(this); + }); LinkSpanDrawable.LinksTextView description2 = new LinkSpanDrawable.LinksTextView(context); description2.setText(AndroidUtilities.replaceLinks(LocaleController.getString("SponsoredMessageInfo2Description2"), resourcesProvider)); description2.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); description2.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); description2.setLineSpacing(AndroidUtilities.dp(2), 1f); + description2.setOnLinkPressListener(link -> { + if (close != null) close.run(); + link.onClick(this); + }); LinkSpanDrawable.LinksTextView description3 = new LinkSpanDrawable.LinksTextView(context); description3.setText(AndroidUtilities.replaceLinks(LocaleController.getString("SponsoredMessageInfo2Description3"), resourcesProvider)); description3.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); description3.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); description3.setLineSpacing(AndroidUtilities.dp(2), 1f); + description3.setOnLinkPressListener(link -> { + if (close != null) close.run(); + link.onClick(this); + }); Paint buttonPaint = new Paint(Paint.ANTI_ALIAS_FLAG); buttonPaint.setStyle(Paint.Style.STROKE); @@ -70,7 +83,8 @@ protected void onDraw(Canvas canvas) { button.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { - Browser.openUrl(context, LocaleController.getString("SponsoredMessageAlertLearnMoreUrl", R.string.SponsoredMessageAlertLearnMoreUrl)); + if (close != null) close.run(); + Browser.openUrl(context, LocaleController.getString(R.string.SponsoredMessageAlertLearnMoreUrl)); } }); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsActivity.java index 119ef106118..abb4b184985 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsActivity.java @@ -627,6 +627,12 @@ public void onNestedPreScroll(View target, int dx, int dy, int[] consumed, int t if (innerListView != null && consumed[1] > 0) { innerListView.scrollBy(0, consumed[1]); } + } else if (dy > 0) { + RecyclerListView innerListView = transactionsLayout.getCurrentListView(); + if (listView.getHeight() - bottom >= 0 && innerListView != null && !innerListView.canScrollVertically(1)) { + consumed[1] = dy; + listView.stopScroll(); + } } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsController.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsController.java index 358cf496ecb..e35fa9bc433 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsController.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/BotStarsController.java @@ -33,6 +33,7 @@ import org.telegram.messenger.Utilities; import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_stats; import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.Theme; @@ -79,56 +80,88 @@ private BotStarsController(int account) { private final HashMap<Long, Long> lastLoadedStats = new HashMap<>(); private final HashMap<Long, TLRPC.TL_payments_starsRevenueStats> stats = new HashMap<>(); - public long getBalance(long bot_id) { - TLRPC.TL_payments_starsRevenueStats botStats = getRevenueStats(bot_id); + private final HashMap<Long, Long> lastLoadedChannelStats = new HashMap<>(); + private final HashMap<Long, TL_stats.TL_broadcastRevenueStats> channelStats = new HashMap<>(); + + public long getBalance(long did) { + TLRPC.TL_payments_starsRevenueStats botStats = getRevenueStats(did); return botStats == null ? 0 : botStats.status.current_balance; } - public long getAvailableBalance(long bot_id) { - TLRPC.TL_payments_starsRevenueStats botStats = getRevenueStats(bot_id); + public long getChannelBalance(long did) { + TL_stats.TL_broadcastRevenueStats botStats = getChannelRevenueStats(did, false); + return botStats == null || botStats.balances == null ? 0 : botStats.balances.current_balance; + } + + public long getAvailableBalance(long did) { + TLRPC.TL_payments_starsRevenueStats botStats = getRevenueStats(did); return botStats == null ? 0 : botStats.status.available_balance; } - public boolean isBalanceAvailable(long bot_id) { - return getRevenueStats(bot_id) != null; + public boolean isBalanceAvailable(long did) { + return getRevenueStats(did) != null; } - public TLRPC.TL_payments_starsRevenueStats getRevenueStats(long bot_id) { - return getRevenueStats(bot_id, false); + public TLRPC.TL_payments_starsRevenueStats getRevenueStats(long did) { + return getRevenueStats(did, false); } - public boolean hasStars(long bot_id) { - TLRPC.TL_payments_starsRevenueStats stats = getRevenueStats(bot_id); + public boolean hasStars(long did) { + TLRPC.TL_payments_starsRevenueStats stats = getRevenueStats(did); return stats != null && stats.status != null && (stats.status.available_balance > 0 || stats.status.overall_revenue > 0 || stats.status.current_balance > 0); } - public void preloadRevenueStats(long bot_id) { - Long lastLoaded = lastLoadedStats.get(bot_id); - TLRPC.TL_payments_starsRevenueStats botStats = stats.get(bot_id); - getRevenueStats(bot_id, lastLoaded == null || System.currentTimeMillis() - lastLoaded > 1000 * 30); + public void preloadRevenueStats(long did) { + Long lastLoaded = lastLoadedStats.get(did); + TLRPC.TL_payments_starsRevenueStats botStats = stats.get(did); + getRevenueStats(did, lastLoaded == null || System.currentTimeMillis() - lastLoaded > 1000 * 30); } - public TLRPC.TL_payments_starsRevenueStats getRevenueStats(long bot_id, boolean force) { - Long lastLoaded = lastLoadedStats.get(bot_id); - TLRPC.TL_payments_starsRevenueStats botStats = stats.get(bot_id); + public TLRPC.TL_payments_starsRevenueStats getRevenueStats(long did, boolean force) { + Long lastLoaded = lastLoadedStats.get(did); + TLRPC.TL_payments_starsRevenueStats botStats = stats.get(did); if (lastLoaded == null || System.currentTimeMillis() - lastLoaded > 1000 * 60 * 5 || force) { TLRPC.TL_payments_getStarsRevenueStats req = new TLRPC.TL_payments_getStarsRevenueStats(); req.dark = Theme.isCurrentThemeDark(); - req.peer = MessagesController.getInstance(currentAccount).getInputPeer(bot_id); + req.peer = MessagesController.getInstance(currentAccount).getInputPeer(did); ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { if (res instanceof TLRPC.TL_payments_starsRevenueStats) { TLRPC.TL_payments_starsRevenueStats r = (TLRPC.TL_payments_starsRevenueStats) res; - stats.put(bot_id, r); + stats.put(did, r); } else { - stats.put(bot_id, null); + stats.put(did, null); } - lastLoadedStats.put(bot_id, System.currentTimeMillis()); - NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.botStarsUpdated, bot_id); + lastLoadedStats.put(did, System.currentTimeMillis()); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.botStarsUpdated, did); })); } return botStats; } + public TL_stats.TL_broadcastRevenueStats getChannelRevenueStats(long did, boolean force) { + Long lastLoaded = lastLoadedChannelStats.get(did); + TL_stats.TL_broadcastRevenueStats botStats = channelStats.get(did); + if (lastLoaded == null || System.currentTimeMillis() - lastLoaded > 1000 * 60 * 5 || force) { + TL_stats.TL_getBroadcastRevenueStats req = new TL_stats.TL_getBroadcastRevenueStats(); + req.dark = Theme.isCurrentThemeDark(); + req.channel = MessagesController.getInstance(currentAccount).getInputChannel(-did); + TLRPC.ChatFull chatFull = MessagesController.getInstance(currentAccount).getChatFull(-did); + if (chatFull == null) return botStats; + final int stats_dc = chatFull.stats_dc; + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + if (res instanceof TL_stats.TL_broadcastRevenueStats) { + TL_stats.TL_broadcastRevenueStats r = (TL_stats.TL_broadcastRevenueStats) res; + channelStats.put(did, r); + } else { + channelStats.put(did, null); + } + lastLoadedChannelStats.put(did, System.currentTimeMillis()); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.botStarsUpdated, did); + }), null, null, 0, stats_dc, ConnectionsManager.ConnectionTypeGeneric, true); + } + return botStats; + } + public void onUpdate(TLRPC.TL_updateStarsRevenueStatus update) { if (update == null) return; long dialogId = DialogObject.getPeerDialogId(update.peer); @@ -163,22 +196,22 @@ private class TransactionsState { private final HashMap<Long, TransactionsState> transactions = new HashMap<>(); @NonNull - private TransactionsState getTransactionsState(long bot_id) { - TransactionsState state = transactions.get(bot_id); + private TransactionsState getTransactionsState(long did) { + TransactionsState state = transactions.get(did); if (state == null) { - transactions.put(bot_id, state = new TransactionsState()); + transactions.put(did, state = new TransactionsState()); } return state; } @NonNull - public ArrayList<TLRPC.StarsTransaction> getTransactions(long bot_id, int type) { - TransactionsState state = getTransactionsState(bot_id); + public ArrayList<TLRPC.StarsTransaction> getTransactions(long did, int type) { + TransactionsState state = getTransactionsState(did); return state.transactions[type]; } - public void invalidateTransactions(long bot_id, boolean load) { - final TransactionsState state = getTransactionsState(bot_id); + public void invalidateTransactions(long did, boolean load) { + final TransactionsState state = getTransactionsState(did); for (int i = 0; i < 3; ++i) { if (state.loading[i]) continue; state.transactions[i].clear(); @@ -186,21 +219,21 @@ public void invalidateTransactions(long bot_id, boolean load) { state.loading[i] = false; state.endReached[i] = false; if (load) - loadTransactions(bot_id, i); + loadTransactions(did, i); } } - public void preloadTransactions(long bot_id) { - final TransactionsState state = getTransactionsState(bot_id); + public void preloadTransactions(long did) { + final TransactionsState state = getTransactionsState(did); for (int i = 0; i < 3; ++i) { if (!state.loading[i] && !state.endReached[i] && state.offset[i] == null) { - loadTransactions(bot_id, i); + loadTransactions(did, i); } } } - public void loadTransactions(long bot_id, int type) { - final TransactionsState state = getTransactionsState(bot_id); + public void loadTransactions(long did, int type) { + final TransactionsState state = getTransactionsState(did); if (state.loading[type] || state.endReached[type]) { return; } @@ -208,7 +241,7 @@ public void loadTransactions(long bot_id, int type) { state.loading[type] = true; TLRPC.TL_payments_getStarsTransactions req = new TLRPC.TL_payments_getStarsTransactions(); - req.peer = MessagesController.getInstance(currentAccount).getInputPeer(bot_id); + req.peer = MessagesController.getInstance(currentAccount).getInputPeer(did); req.inbound = type == INCOMING_TRANSACTIONS; req.outbound = type == OUTGOING_TRANSACTIONS; req.offset = state.offset[type]; @@ -228,27 +261,27 @@ public void loadTransactions(long bot_id, int type) { state.offset[type] = state.endReached[type] ? null : r.next_offset; // state.updateBalance(r.balance); - NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.botStarsTransactionsLoaded, bot_id); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.botStarsTransactionsLoaded, did); } })); } - public boolean isLoadingTransactions(long bot_id, int type) { - final TransactionsState state = getTransactionsState(bot_id); + public boolean isLoadingTransactions(long did, int type) { + final TransactionsState state = getTransactionsState(did); return state.loading[type]; } - public boolean didFullyLoadTransactions(long bot_id, int type) { - final TransactionsState state = getTransactionsState(bot_id); + public boolean didFullyLoadTransactions(long did, int type) { + final TransactionsState state = getTransactionsState(did); return state.endReached[type]; } - public boolean hasTransactions(long bot_id) { - return hasTransactions(bot_id, ALL_TRANSACTIONS); + public boolean hasTransactions(long did) { + return hasTransactions(did, ALL_TRANSACTIONS); } - public boolean hasTransactions(long bot_id, int type) { - final TransactionsState state = getTransactionsState(bot_id); + public boolean hasTransactions(long did, int type) { + final TransactionsState state = getTransactionsState(did); return !state.transactions[type].isEmpty(); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/ISuperRipple.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/ISuperRipple.java new file mode 100644 index 00000000000..36d4bd8f78a --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/ISuperRipple.java @@ -0,0 +1,17 @@ +package org.telegram.ui.Stars; + +import android.view.View; + +public abstract class ISuperRipple { + + public final View view; + + public ISuperRipple(View view) { + this.view = view; + } + + public void animate(float cx, float cy, float intensity) { + + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarReactionsOverlay.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarReactionsOverlay.java new file mode 100644 index 00000000000..51fcf7651a3 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarReactionsOverlay.java @@ -0,0 +1,384 @@ +package org.telegram.ui.Stars; + +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.AndroidUtilities.scaleRect; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.RectF; +import android.view.Gravity; +import android.view.HapticFeedbackConstants; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewConfiguration; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.MessageObject; +import org.telegram.messenger.R; +import org.telegram.messenger.UserObject; +import org.telegram.messenger.Utilities; +import org.telegram.tgnet.TLRPC; +import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.Cells.ChatMessageCell; +import org.telegram.ui.ChatActivity; +import org.telegram.ui.Components.AnimatedFloat; +import org.telegram.ui.Components.AnimatedTextView; +import org.telegram.ui.Components.CubicBezierInterpolator; +import org.telegram.ui.Components.RLottieDrawable; +import org.telegram.ui.Components.Reactions.ReactionsLayoutInBubble; +import org.telegram.ui.GradientClip; +import org.telegram.ui.LaunchActivity; + +import java.util.ArrayList; + +public class StarReactionsOverlay extends View { + + private final ChatActivity chatActivity; + + private ChatMessageCell cell; + private int messageId; + +// private final Camera camera = new Camera(); +// private final Matrix matrix = new Matrix(); + private final int[] pos = new int[2]; + private final int[] pos2 = new int[2]; + private final RectF reactionBounds = new RectF(); + private final RectF clickBounds = new RectF(); + private final Paint shadowPaint = new Paint(); + + private boolean counterShown; +// private final AnimatedFloat counterX = new AnimatedFloat(this, 0, 320, CubicBezierInterpolator.EASE_OUT_QUINT); + private final AnimatedFloat counterAlpha = new AnimatedFloat(this, 0, 420, CubicBezierInterpolator.EASE_OUT_QUINT); + private final AnimatedTextView.AnimatedTextDrawable counter = new AnimatedTextView.AnimatedTextDrawable(); + + private final GradientClip clip = new GradientClip(); + + public StarReactionsOverlay(ChatActivity chatActivity) { + super(chatActivity.getContext()); + this.chatActivity = chatActivity; + + counter.setCallback(this); + counter.setHacks(false, true, true); + counter.setTextSize(dp(40)); + counter.setTypeface(AndroidUtilities.getTypeface("fonts/num.otf")); + counter.setShadowLayer(dp(12), 0, dp(3.5f), 0x00000000); + counter.setOverrideFullWidth(AndroidUtilities.displaySize.x); + counter.setTextColor(0xFFFFFFFF); + counter.setGravity(Gravity.CENTER); + + hideCounterRunnable = () -> { + counterShown = false; + invalidate(); + if (cell != null && cell.getPrimaryMessageObject() != null) { + final MessageObject msg = cell.getPrimaryMessageObject(); + final StarsController starsController = StarsController.getInstance(chatActivity.getCurrentAccount()); + final long totalStars = starsController.getPendingPaidReactions(msg); + if (starsController.balanceAvailable() && starsController.getBalance() < totalStars) { + StarsController.getInstance(chatActivity.getCurrentAccount()).undoPaidReaction(); + final long dialogId = chatActivity.getDialogId(); + String name; + if (dialogId >= 0) { + TLRPC.User user = chatActivity.getMessagesController().getUser(dialogId); + name = UserObject.getForcedFirstName(user); + } else { + TLRPC.Chat chat = chatActivity.getMessagesController().getChat(-dialogId); + name = chat == null ? "" : chat.title; + } + new StarsIntroActivity.StarsNeededSheet(chatActivity.getContext(), chatActivity.getResourceProvider(), totalStars, StarsIntroActivity.StarsNeededSheet.TYPE_REACTIONS, name, () -> { + starsController.sendPaidReaction(msg, chatActivity, totalStars, true, true, null); + }).show(); + } + } + hide(); + }; + + longPressRunnable = () -> { + if (cell == null) return; + cell.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); + onTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_CANCEL, 0, 0, 0)); + + ArrayList<TLRPC.MessageReactor> reactors = null; + final MessageObject msg = cell.getPrimaryMessageObject(); + if (msg == null) return; + + if (msg != null && msg.messageOwner != null && msg.messageOwner.reactions != null) { + reactors = msg.messageOwner.reactions.top_reactors; + } + + StarsController.getInstance(msg.currentAccount).commitPaidReaction(); + + StarsReactionsSheet sheet = new StarsReactionsSheet(getContext(), chatActivity.getCurrentAccount(), chatActivity.getDialogId(), chatActivity, msg, reactors, chatActivity.getResourceProvider()); + sheet.setMessageCell(chatActivity, msg.getId(), cell); + sheet.show(); + }; + } + + public void setMessageCell(ChatMessageCell cell) { + if (this.cell == cell) return; + if (this.cell != null) { + this.cell.setScrimReaction(null); + this.cell.setInvalidateListener(null); + } + this.cell = cell; + this.messageId = cell != null && cell.getPrimaryMessageObject() != null ? cell.getPrimaryMessageObject().getId() : 0; + if (this.cell != null) { + this.cell.setInvalidateListener(this::invalidate); + } + invalidate(); + } + + @Override + protected void dispatchDraw(Canvas canvas) { + if (cell == null || !cell.isCellAttachedToWindow()) return; + final MessageObject msg = cell.getPrimaryMessageObject(); + if ((msg != null ? msg.getId() : 0) != messageId) { + setMessageCell(null); + return; + } + + final float s = AndroidUtilities.lerp(1, 1.8f, focus); + + float clipTop = chatActivity.getClipTop(), clipBottom = chatActivity.getClipBottom(); + canvas.save(); + canvas.clipRect(0, clipTop * (1f - focus), getWidth(), getHeight() - clipBottom * (1f - focus)); + + getLocationInWindow(pos2); + cell.getLocationInWindow(pos); + pos[1] += (int) chatActivity.drawingChatListViewYoffset; + canvas.save(); +// canvas.saveLayerAlpha(cell.getBackgroundDrawableLeft(), 0, cell.getBackgroundDrawableRight(), cell.getHeight(), 0xFF, Canvas.ALL_SAVE_FLAG); + ReactionsLayoutInBubble.ReactionButton btn = cell.reactionsLayoutInBubble.getReactionButton("stars"); + Integer hash = null; + if (btn != null) { + final int btnX = pos[0] - pos2[0] + cell.reactionsLayoutInBubble.x + btn.x; + final int btnY = pos[1] - pos2[1] + cell.reactionsLayoutInBubble.y + btn.y; + + reactionBounds.set(btnX, btnY, btnX + btn.width, btnY + btn.height); + scaleRect(reactionBounds, s, btnX + btn.width * .1f, btnY + btn.height / 2f); + + shadowPaint.setColor(0); + shadowPaint.setShadowLayer(dp(12), 0, dp(3), Theme.multAlpha(0x55000000, focus)); + canvas.drawRoundRect(reactionBounds, reactionBounds.height() / 2f, reactionBounds.height() / 2f, shadowPaint); + + canvas.scale(s, s, btnX + btn.width * .1f, btnY + btn.height / 2f); + + hash = btn.reaction.hashCode(); + } + canvas.translate(pos[0] - pos2[0], pos[1] - pos2[1]); + cell.setScrimReaction(null); + cell.drawReactionsLayout(canvas, 0f, hash); + cell.setScrimReaction(hash); +// AndroidUtilities.rectTmp.set(cell.getBackgroundDrawableRight() - dp(24), 0, cell.getBackgroundDrawableRight(), cell.getHeight()); +// clip.draw(canvas, AndroidUtilities.rectTmp, GradientClip.RIGHT, 1f); +// canvas.restore(); + canvas.restore(); + + canvas.restore(); + + if (btn != null) { + clickBounds.set(reactionBounds); + clickBounds.inset(-dp(42), -dp(42)); + + final int effectSize = (int) (dp(90) * s); + for (int i = 0; i < effects.size(); ++i) { + RLottieDrawable drawable = effects.get(i); + if (drawable.getCurrentFrame() >= drawable.getFramesCount()) { + effects.remove(i); + i--; + continue; + } + + drawable.setBounds( + (int) (reactionBounds.left + dp(4 + 11) * s - effectSize / 2f), + (int) (reactionBounds.centerY() - effectSize / 2f), + (int) (reactionBounds.left + dp(4 + 11) * s + effectSize / 2f), + (int) (reactionBounds.centerY() + effectSize / 2f) + ); + drawable.setAlpha((int) (0xFF * focus)); + drawable.draw(canvas); + } + + final float cx = reactionBounds.centerX(); + final float cy = reactionBounds.top - dp(12 + 24); + canvas.save(); + float t = counterAlpha.set(counterShown); + canvas.translate(0, counterShown ? dp(60) * (1f - t) : -dp(30) * (1f - t)); + final float counterScale = AndroidUtilities.lerp(counterShown ? 1.8f : 1.3f, 1f, t); + canvas.scale(counterScale, counterScale, cx, cy); +// canvas.translate(cx, cy); +// canvas.skew(.02f * (counterShown ? (1f - t) : -(1f - t)), 0); +// canvas.translate(-cx, -cy); +// camera.restore(); +// camera.rotate(0, 0, t * 360); +// camera.getMatrix(matrix); +// matrix.preTranslate(-cx, -cy); +// matrix.postTranslate(cx, cy); +// canvas.concat(matrix); + counter.setAlpha((int) (0xFF * t)); + counter.setShadowLayer(dp(12), 0, dp(3.5f), Theme.multAlpha(0xAA000000, t)); + counter.setBounds(cx - dp(100), reactionBounds.top - dp(24 + 24), cx + dp(100), reactionBounds.top - dp(24)); + counter.draw(canvas); + canvas.restore(); + + } + + invalidate(); + } + + private boolean pressed; + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (cell == null || hidden) return false; + if (event.getAction() == MotionEvent.ACTION_DOWN) { + if (clickBounds.contains(event.getX(), event.getY())) { + pressed = true; + ReactionsLayoutInBubble.ReactionButton btn = cell.reactionsLayoutInBubble.getReactionButton("stars"); + if (btn != null) btn.bounce.setPressed(true); + AndroidUtilities.cancelRunOnUIThread(longPressRunnable); + AndroidUtilities.runOnUIThread(longPressRunnable, ViewConfiguration.getLongPressTimeout()); + } + } else if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) { + ReactionsLayoutInBubble.ReactionButton btn = cell.reactionsLayoutInBubble.getReactionButton("stars"); + if (event.getAction() == MotionEvent.ACTION_UP) { + tap(event.getX(), event.getY(), true, true); + } + if (btn != null) btn.bounce.setPressed(false); + pressed = false; + AndroidUtilities.cancelRunOnUIThread(longPressRunnable); + } + return pressed; + } + + private final Runnable longPressRunnable; + + private float focus; + private ValueAnimator focusAnimator; + public void focusTo(float dst, Runnable whenDone) { + if (focusAnimator != null) { + ValueAnimator anm = focusAnimator; + focusAnimator = null; + anm.cancel(); + } + focusAnimator = ValueAnimator.ofFloat(focus, dst); + focusAnimator.addUpdateListener(anm -> { + focus = (float) anm.getAnimatedValue(); + invalidate(); + }); + focusAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + focus = dst; + invalidate(); + if (animation == focusAnimator && whenDone != null) { + whenDone.run(); + } + } + }); + focusAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + focusAnimator.setDuration(320); + focusAnimator.start(); + } + + public void tap(float x, float y, boolean send, boolean ripple) { + if (cell == null || hidden) return; + + final MessageObject msg = cell.getPrimaryMessageObject(); + final StarsController starsController = StarsController.getInstance(chatActivity.getCurrentAccount()); + + playEffect(); + ReactionsLayoutInBubble.ReactionButton btn = cell.reactionsLayoutInBubble.getReactionButton("stars"); + if (btn != null) btn.startAnimation(); + if (send) { + try { + performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); + } catch (Exception ignore) {} + StarsController.getInstance(chatActivity.getCurrentAccount()).sendPaidReaction(cell.getPrimaryMessageObject(), chatActivity, +1, true, false, null); + } + counter.cancelAnimation(); + counter.setText("+" + starsController.getPendingPaidReactions(msg)); + counterShown = true; + AndroidUtilities.cancelRunOnUIThread(hideCounterRunnable); + AndroidUtilities.runOnUIThread(hideCounterRunnable, 1500); + + if (ripple) { + final long now = System.currentTimeMillis(); + if (now - lastRippleTime < 100) { + accumulatedRippleIntensity += .5f; + } else { + accumulatedRippleIntensity *= Utilities.clamp(1f - (now - lastRippleTime - 100) / 200f, 1f, 0f); + if (getMeasuredWidth() == 0 && chatActivity.getLayoutContainer() != null) { + chatActivity.getLayoutContainer().getLocationInWindow(pos2); + } else { + getLocationInWindow(pos2); + } + LaunchActivity.makeRipple(pos2[0] + x, pos2[1] + y, Utilities.clamp(accumulatedRippleIntensity, 0.9f, 0.3f)); + accumulatedRippleIntensity = 0; + lastRippleTime = now; + } + } + } + + private long lastRippleTime; + private float accumulatedRippleIntensity; + + private Runnable hideCounterRunnable; + + public boolean hidden; + public void hide() { + hidden = true; + AndroidUtilities.cancelRunOnUIThread(hideCounterRunnable); + counter.setText(""); + counterShown = false; + invalidate(); + focusTo(0f, () -> { + setMessageCell(null); + clearEffects(); + }); + } + + public boolean isShowing(MessageObject obj) { + return obj != null && obj.getId() == messageId; + } + + public void show() { + hidden = false; + focusTo(1f, null); + } + + private final ArrayList<RLottieDrawable> effects = new ArrayList<>(); + private final int[] effectAssets = new int[] { + R.raw.star_reaction_effect1, + R.raw.star_reaction_effect2, + R.raw.star_reaction_effect3, + R.raw.star_reaction_effect4, + R.raw.star_reaction_effect5 + }; + + public void playEffect() { + while (effects.size() > 4) { + RLottieDrawable drawable = effects.remove(0); + drawable.recycle(true); + } + final int asset = effectAssets[Utilities.fastRandom.nextInt(effectAssets.length)]; + RLottieDrawable drawable = new RLottieDrawable(asset, "" + asset, dp(70), dp(70)); + drawable.setMasterParent(this); + drawable.setAllowDecodeSingleFrame(true); + drawable.setAutoRepeat(0); + drawable.start(); + effects.add(drawable); + invalidate(); + } + + public void clearEffects() { + for (RLottieDrawable effect : effects) { + effect.recycle(true); + } + effects.clear(); + } + + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsController.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsController.java index 8586cb326ba..c9590ac29a1 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsController.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsController.java @@ -1,12 +1,17 @@ package org.telegram.ui.Stars; +import static org.telegram.messenger.AndroidUtilities.dp; import static org.telegram.messenger.LocaleController.formatPluralString; -import static org.telegram.messenger.LocaleController.getCurrencyExpDivider; +import static org.telegram.messenger.LocaleController.formatString; import static org.telegram.messenger.LocaleController.getString; import android.app.Activity; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.drawable.Drawable; +import android.view.Gravity; + +import androidx.annotation.Nullable; import com.android.billingclient.api.BillingClient; import com.android.billingclient.api.BillingFlowParams; @@ -34,8 +39,10 @@ import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.ChatActivity; +import org.telegram.ui.Components.Bulletin; import org.telegram.ui.Components.BulletinFactory; -import org.telegram.ui.Components.FireworksOverlay; +import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.LaunchActivity; import org.telegram.ui.PaymentFormActivity; import org.telegram.ui.bots.BotWebViewSheet; @@ -43,11 +50,17 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.Objects; public class StarsController { public static final String currency = "XTR"; + public static final int PERIOD_MONTHLY = 2592000; + // test backend only: + public static final int PERIOD_MINUTE = 60; + public static final int PERIOD_5MINUTES = 300; + private static volatile StarsController[] Instance = new StarsController[UserConfig.MAX_ACCOUNT_COUNT]; private static final Object[] lockObjects = new Object[UserConfig.MAX_ACCOUNT_COUNT]; static { @@ -89,6 +102,7 @@ public long getBalance(Runnable loaded) { req.peer = new TLRPC.TL_inputPeerSelf(); ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { boolean updatedTransactions = false; + boolean updatedSubscriptions = false; boolean updatedBalance = !balanceLoaded; lastBalanceLoaded = System.currentTimeMillis(); if (res instanceof TLRPC.TL_payments_starsStatus) { @@ -112,6 +126,14 @@ public long getBalance(Runnable loaded) { updatedTransactions = true; } + if (subscriptions.isEmpty()) { + subscriptions.addAll(r.subscriptions); + subscriptionsLoading = false; + subscriptionsOffset = r.subscriptions_next_offset; + subscriptionsEndReached = (r.flags & 4) == 0; + updatedSubscriptions = true; + } + if (this.balance != r.balance) { updatedBalance = true; } @@ -125,6 +147,9 @@ public long getBalance(Runnable loaded) { if (updatedTransactions) { NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.starTransactionsLoaded); } + if (updatedSubscriptions) { + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.starSubscriptionsLoaded); + } if (loaded != null) { loaded.run(); @@ -134,6 +159,12 @@ public long getBalance(Runnable loaded) { return balance; } + public void invalidateBalance() { + balanceLoaded = false; + getBalance(); + balanceLoaded = true; + } + public void updateBalance(long balance) { if (this.balance != balance) { this.balance = balance; @@ -145,17 +176,6 @@ public boolean balanceAvailable() { return balanceLoaded; } - private static boolean isCollapsed(long stars) { - return ( - stars != 15 && - stars != 75 && - stars != 250 && - stars != 500 && - stars != 1000 && - stars != 2500 - ); - } - private boolean optionsLoading, optionsLoaded; private ArrayList<TLRPC.TL_starsTopupOption> options; public ArrayList<TLRPC.TL_starsTopupOption> getOptionsCached() { @@ -176,16 +196,15 @@ public ArrayList<TLRPC.TL_starsTopupOption> getOptions() { if (object instanceof TLRPC.TL_starsTopupOption) { TLRPC.TL_starsTopupOption option = (TLRPC.TL_starsTopupOption) object; loadedOptions.add(option); - option.collapsed = isCollapsed(option.stars); if (option.store_product != null && !BuildVars.useInvoiceBilling()) { toLoadStorePrice.add(option); option.loadingStorePrice = true; } } } + optionsLoaded = true; } options = loadedOptions; - optionsLoaded = true; optionsLoading = false; NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.starOptionsLoaded); if (!toLoadStorePrice.isEmpty()) { @@ -224,6 +243,14 @@ public ArrayList<TLRPC.TL_starsTopupOption> getOptions() { } } } + if (options != null) { + for (int i = 0; i < options.size(); ++i) { + TLRPC.TL_starsTopupOption option = options.get(i); + if (option != null && option.loadingStorePrice) { + option.missingStorePrice = true; + } + } + } NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.starOptionsLoaded); })); }; @@ -237,13 +264,101 @@ public ArrayList<TLRPC.TL_starsTopupOption> getOptions() { return options; } + private boolean giftOptionsLoading, giftOptionsLoaded; + private ArrayList<TLRPC.TL_starsGiftOption> giftOptions; + public ArrayList<TLRPC.TL_starsGiftOption> getGiftOptionsCached() { + return giftOptions; + } + public ArrayList<TLRPC.TL_starsGiftOption> getGiftOptions() { + if (giftOptionsLoading || giftOptionsLoaded) { + return giftOptions; + } + giftOptionsLoading = true; + TLRPC.TL_payments_getStarsGiftOptions req = new TLRPC.TL_payments_getStarsGiftOptions(); + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + ArrayList<TLRPC.TL_starsGiftOption> loadedOptions = new ArrayList<>(); + ArrayList<TLRPC.TL_starsGiftOption> toLoadStorePrice = new ArrayList<>(); + if (res instanceof TLRPC.Vector) { + TLRPC.Vector vector = (TLRPC.Vector) res; + for (Object object : vector.objects) { + if (object instanceof TLRPC.TL_starsGiftOption) { + TLRPC.TL_starsGiftOption option = (TLRPC.TL_starsGiftOption) object; + loadedOptions.add(option); + if (option.store_product != null && !BuildVars.useInvoiceBilling()) { + toLoadStorePrice.add(option); + option.loadingStorePrice = true; + } + } + } + giftOptionsLoaded = true; + } + giftOptions = loadedOptions; + giftOptionsLoading = false; + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.starGiftOptionsLoaded); + if (!toLoadStorePrice.isEmpty()) { + Runnable fetchStorePrices = () -> { + ArrayList<QueryProductDetailsParams.Product> productQueries = new ArrayList<>(); + for (int i = 0; i < toLoadStorePrice.size(); ++i) { + productQueries.add( + QueryProductDetailsParams.Product.newBuilder() + .setProductType(BillingClient.ProductType.INAPP) + .setProductId(toLoadStorePrice.get(i).store_product) + .build() + ); + } + BillingController.getInstance().queryProductDetails(productQueries, (result, list) -> AndroidUtilities.runOnUIThread(() -> { + if (result.getResponseCode() != BillingClient.BillingResponseCode.OK) { + bulletinError("BILLING_" + BillingController.getResponseCodeString(result.getResponseCode())); + return; + } + if (list != null) { + for (int i = 0; i < list.size(); ++i) { + ProductDetails productDetails = list.get(i); + TLRPC.TL_starsGiftOption option = null; + for (int j = 0; j < toLoadStorePrice.size(); ++j) { + if (toLoadStorePrice.get(j).store_product.equals(productDetails.getProductId())) { + option = toLoadStorePrice.get(j); + break; + } + } + if (option == null) continue; + + ProductDetails.OneTimePurchaseOfferDetails offerDetails = productDetails.getOneTimePurchaseOfferDetails(); + if (offerDetails != null) { + option.currency = offerDetails.getPriceCurrencyCode(); + option.amount = (long) ((offerDetails.getPriceAmountMicros() / Math.pow(10, 6)) * Math.pow(10, BillingController.getInstance().getCurrencyExp(option.currency))); + option.loadingStorePrice = false; + } + } + } + if (giftOptions != null) { + for (int i = 0; i < giftOptions.size(); ++i) { + TLRPC.TL_starsGiftOption option = giftOptions.get(i); + if (option != null && option.loadingStorePrice) { + option.missingStorePrice = true; + } + } + } + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.starGiftOptionsLoaded); + })); + }; + if (!BillingController.getInstance().isReady()) { + BillingController.getInstance().whenSetuped(fetchStorePrices); + } else { + fetchStorePrices.run(); + } + } + })); + return giftOptions; + } + private void bulletinError(TLRPC.TL_error err, String str) { bulletinError(err == null ? str : err.text); } private void bulletinError(String err) { BaseFragment fragment = LaunchActivity.getLastFragment(); BulletinFactory b = fragment != null && fragment.visibleDialog == null ? BulletinFactory.of(fragment) : BulletinFactory.global(); - b.createSimpleBulletin(R.raw.error, LocaleController.formatString(R.string.UnknownErrorCode, err)).show(); + b.createSimpleBulletin(R.raw.error, formatString(R.string.UnknownErrorCode, err)).show(); } public static final int ALL_TRANSACTIONS = 0; @@ -324,14 +439,121 @@ public boolean hasTransactions(int type) { return balanceAvailable() && !transactions[type].isEmpty(); } + public final ArrayList<TLRPC.StarsSubscription> subscriptions = new ArrayList<>(); + public String subscriptionsOffset; + public boolean subscriptionsLoading, subscriptionsEndReached; + + public boolean hasSubscriptions() { + return balanceAvailable() && !subscriptions.isEmpty(); + } + + public void invalidateSubscriptions(boolean load) { + if (subscriptionsLoading) return; + subscriptions.clear(); + subscriptionsOffset = null; + subscriptionsLoading = false; + subscriptionsEndReached = false; + if (load) loadSubscriptions(); + } + + public void loadSubscriptions() { + if (subscriptionsLoading || subscriptionsEndReached) return; + subscriptionsLoading = true; + TLRPC.TL_getStarsSubscriptions req = new TLRPC.TL_getStarsSubscriptions(); + req.peer = new TLRPC.TL_inputPeerSelf(); + req.offset = subscriptionsOffset; + if (req.offset == null) { + req.offset = ""; + } + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + subscriptionsLoading = false; + if (res instanceof TLRPC.TL_payments_starsStatus) { + TLRPC.TL_payments_starsStatus r = (TLRPC.TL_payments_starsStatus) res; + MessagesController.getInstance(currentAccount).putUsers(r.users, false); + MessagesController.getInstance(currentAccount).putChats(r.chats, false); + + subscriptions.addAll(r.subscriptions); + subscriptionsEndReached = (r.flags & 4) == 0; + subscriptionsOffset = r.subscriptions_next_offset; + + updateBalance(r.balance); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.starSubscriptionsLoaded); + } + })); + } + public boolean isLoadingSubscriptions() { + return subscriptionsLoading; + } + public boolean didFullyLoadSubscriptions() { + return subscriptionsEndReached; + } + + + public final ArrayList<TLRPC.StarsSubscription> insufficientSubscriptions = new ArrayList<>(); + private boolean insufficientSubscriptionsLoading; + public void loadInsufficientSubscriptions() { + if (insufficientSubscriptionsLoading) return; + insufficientSubscriptionsLoading = true; + TLRPC.TL_getStarsSubscriptions req = new TLRPC.TL_getStarsSubscriptions(); + req.peer = new TLRPC.TL_inputPeerSelf(); + req.missing_balance = true; + req.offset = ""; + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + insufficientSubscriptionsLoading = false; + if (res instanceof TLRPC.TL_payments_starsStatus) { + TLRPC.TL_payments_starsStatus r = (TLRPC.TL_payments_starsStatus) res; + MessagesController.getInstance(currentAccount).putUsers(r.users, false); + MessagesController.getInstance(currentAccount).putChats(r.chats, false); + insufficientSubscriptions.addAll(r.subscriptions); + updateBalance(r.balance); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.starSubscriptionsLoaded); + } + })); + } + public void invalidateInsufficientSubscriptions(boolean load) { + if (insufficientSubscriptionsLoading) return; + insufficientSubscriptions.clear(); + insufficientSubscriptionsLoading = false; + if (load) loadInsufficientSubscriptions(); + } + public boolean hasInsufficientSubscriptions() { + return !insufficientSubscriptions.isEmpty(); + } + public Theme.ResourcesProvider getResourceProvider() { - BaseFragment lastFragment = LaunchActivity.getLastFragment(); + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); if (lastFragment != null) { return lastFragment.getResourceProvider(); } return null; } + public void showStarsTopup(Activity activity, long amount, String purpose) { + if (!balanceAvailable()) { + getBalance(() -> { + showStarsTopupInternal(activity, amount, purpose); + }); + return; + } + showStarsTopupInternal(activity, amount, purpose); + } + + private void showStarsTopupInternal(Activity activity, long amount, String purpose) { + if (getBalance() >= amount || amount <= 0) { + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment == null) return; + BulletinFactory.of(lastFragment).createSimpleBulletin(R.raw.stars_topup, getString(R.string.StarsTopupLinkEnough), getString(R.string.StarsTopupLinkTopupAnyway), () -> { + BaseFragment lastFragment2 = LaunchActivity.getSafeLastFragment(); + if (lastFragment2 == null) return; + lastFragment2.presentFragment(new StarsIntroActivity()); + }).setDuration(Bulletin.DURATION_PROLONG).show(true); + return; + } + new StarsIntroActivity.StarsNeededSheet(activity, null, amount, StarsIntroActivity.StarsNeededSheet.TYPE_LINK, purpose, () -> { + + }).show(); + } + public void buy(Activity activity, TLRPC.TL_starsTopupOption option, Utilities.Callback2<Boolean, String> whenDone) { if (activity == null) { return; @@ -348,13 +570,18 @@ public void buy(Activity activity, TLRPC.TL_starsTopupOption option, Utilities.C } if (BuildVars.useInvoiceBilling() || !BillingController.getInstance().isReady()) { - TLRPC.TL_inputStorePaymentStars payload = new TLRPC.TL_inputStorePaymentStars(); + TLRPC.TL_inputStorePaymentStarsTopup payload = new TLRPC.TL_inputStorePaymentStarsTopup(); payload.stars = option.stars; payload.currency = option.currency; payload.amount = option.amount; + TLRPC.TL_inputStorePaymentStarsTopup purpose = new TLRPC.TL_inputStorePaymentStarsTopup(); + purpose.stars = option.stars; + purpose.amount = option.amount; + purpose.currency = option.currency; + TLRPC.TL_inputInvoiceStars invoice = new TLRPC.TL_inputInvoiceStars(); - invoice.option = option; + invoice.purpose = purpose; TLRPC.TL_payments_getPaymentForm req = new TLRPC.TL_payments_getPaymentForm(); final JSONObject themeParams = BotWebViewSheet.makeThemeParams(getResourceProvider()); @@ -413,7 +640,7 @@ public void buy(Activity activity, TLRPC.TL_starsTopupOption option, Utilities.C return; } - TLRPC.TL_inputStorePaymentStars payload = new TLRPC.TL_inputStorePaymentStars(); + TLRPC.TL_inputStorePaymentStarsTopup payload = new TLRPC.TL_inputStorePaymentStarsTopup(); payload.stars = option.stars; payload.currency = option.currency; payload.amount = option.amount; @@ -454,6 +681,145 @@ public void buy(Activity activity, TLRPC.TL_starsTopupOption option, Utilities.C })); } + public void buyGift(Activity activity, TLRPC.TL_starsGiftOption option, long user_id, Utilities.Callback2<Boolean, String> whenDone) { + if (activity == null) { + return; + } + + if (!MessagesController.getInstance(currentAccount).starsPurchaseAvailable()) { + BaseFragment lastFragment = LaunchActivity.getLastFragment(); + if (lastFragment != null && lastFragment.getContext() != null) { + showNoSupportDialog(lastFragment.getContext(), lastFragment.getResourceProvider()); + } else { + showNoSupportDialog(activity, null); + } + return; + } + + if (BuildVars.useInvoiceBilling() || !BillingController.getInstance().isReady()) { + TLRPC.TL_inputStorePaymentStarsGift purpose = new TLRPC.TL_inputStorePaymentStarsGift(); + purpose.stars = option.stars; + purpose.amount = option.amount; + purpose.currency = option.currency; + purpose.user_id = MessagesController.getInstance(currentAccount).getInputUser(user_id); + + TLRPC.TL_inputInvoiceStars invoice = new TLRPC.TL_inputInvoiceStars(); + invoice.purpose = purpose; + + TLRPC.TL_payments_getPaymentForm req = new TLRPC.TL_payments_getPaymentForm(); + final JSONObject themeParams = BotWebViewSheet.makeThemeParams(getResourceProvider()); + if (themeParams != null) { + req.theme_params = new TLRPC.TL_dataJSON(); + req.theme_params.data = themeParams.toString(); + req.flags |= 1; + } + req.invoice = invoice; + + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> { + if (error != null) { + if (whenDone != null) { + whenDone.run(false, error.text); + } + return; + } + PaymentFormActivity paymentFormActivity = null; + if (response instanceof TLRPC.PaymentForm) { + TLRPC.PaymentForm form = (TLRPC.PaymentForm) response; + form.invoice.recurring = true; + MessagesController.getInstance(currentAccount).putUsers(form.users, false); + paymentFormActivity = new PaymentFormActivity(form, invoice, null); + } else if (response instanceof TLRPC.PaymentReceipt) { + paymentFormActivity = new PaymentFormActivity((TLRPC.PaymentReceipt) response); + } + if (paymentFormActivity != null) { + paymentFormActivity.setPaymentFormCallback(status -> { + if (status == PaymentFormActivity.InvoiceStatus.PAID) { + if (whenDone != null) { + whenDone.run(true, null); + } + } else if (status != PaymentFormActivity.InvoiceStatus.PENDING) { + if (whenDone != null) { + whenDone.run(false, null); + } + } + }); + BaseFragment lastFragment = LaunchActivity.getLastFragment(); + if (lastFragment == null) return; + if (AndroidUtilities.hasDialogOnTop(lastFragment)) { + BaseFragment.BottomSheetParams bottomSheetParams = new BaseFragment.BottomSheetParams(); + bottomSheetParams.transitionFromLeft = true; + bottomSheetParams.allowNestedScroll = false; + lastFragment.showAsSheet(paymentFormActivity, bottomSheetParams); + } else { + lastFragment.presentFragment(paymentFormActivity); + } + } else { + if (whenDone != null) { + whenDone.run(false, "UNKNOWN_RESPONSE"); + } + } + })); + + return; + } + + TLRPC.TL_inputStorePaymentStarsGift payload = new TLRPC.TL_inputStorePaymentStarsGift(); + payload.stars = option.stars; + payload.currency = option.currency; + payload.amount = option.amount; + payload.user_id = MessagesController.getInstance(currentAccount).getInputUser(user_id); + + QueryProductDetailsParams.Product product = QueryProductDetailsParams.Product.newBuilder() + .setProductType(BillingClient.ProductType.INAPP) + .setProductId(option.store_product) + .build(); + BillingController.getInstance().queryProductDetails(Arrays.asList(product), (billingResult, list) -> AndroidUtilities.runOnUIThread(() -> { + if (list.isEmpty()) { + AndroidUtilities.runOnUIThread(() -> whenDone.run(false, "PRODUCT_NOT_FOUND")); + return; + } + + ProductDetails productDetails = list.get(0); + ProductDetails.OneTimePurchaseOfferDetails offerDetails = productDetails.getOneTimePurchaseOfferDetails(); + if (offerDetails == null) { + AndroidUtilities.runOnUIThread(() -> whenDone.run(false, "PRODUCT_NO_ONETIME_OFFER_DETAILS")); + return; + } + + payload.currency = offerDetails.getPriceCurrencyCode(); + payload.amount = (long) ((offerDetails.getPriceAmountMicros() / Math.pow(10, 6)) * Math.pow(10, BillingController.getInstance().getCurrencyExp(option.currency))); + + TLRPC.TL_payments_canPurchasePremium checkReq = new TLRPC.TL_payments_canPurchasePremium(); + checkReq.purpose = payload; + ConnectionsManager.getInstance(currentAccount).sendRequest(checkReq, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + if (res instanceof TLRPC.TL_boolTrue) { + BillingController.getInstance().addResultListener(productDetails.getProductId(), billingResult1 -> { + final boolean success = billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK; + final String error = success ? null : BillingController.getResponseCodeString(billingResult.getResponseCode()); + AndroidUtilities.runOnUIThread(() -> whenDone.run(success, error)); + }); + BillingController.getInstance().setOnCanceled(() -> { + AndroidUtilities.runOnUIThread(() -> whenDone.run(false, null)); + }); + BillingController.getInstance().launchBillingFlow( + activity, AccountInstance.getInstance(UserConfig.selectedAccount), payload, + Collections.singletonList(BillingFlowParams.ProductDetailsParams.newBuilder() + .setProductDetails(list.get(0)) + .build()) + ); + } else if (res instanceof TLRPC.TL_boolFalse) { + if (whenDone != null) { + whenDone.run(false, "PURCHASE_FORBIDDEN"); + } + } else { + if (whenDone != null) { + whenDone.run(false, err != null ? err.text : "SERVER_ERROR"); + } + } + })); + })); + } + public Runnable pay(MessageObject messageObject, Runnable whenShown) { final Context context = LaunchActivity.instance != null ? LaunchActivity.instance : ApplicationLoader.applicationContext; final Theme.ResourcesProvider resourcesProvider = getResourceProvider(); @@ -502,16 +868,12 @@ public Runnable pay(MessageObject messageObject, Runnable whenShown) { private boolean paymentFormOpened; public void openPaymentForm(MessageObject messageObject, TLRPC.InputInvoice inputInvoice, TLRPC.TL_payments_paymentFormStars form, Runnable whenShown, Utilities.Callback<String> whenAllDone) { - if (form == null || form.invoice == null || paymentFormOpened) { - return; - } + if (form == null || form.invoice == null || paymentFormOpened) return; final Context context = LaunchActivity.instance != null ? LaunchActivity.instance : ApplicationLoader.applicationContext; final Theme.ResourcesProvider resourcesProvider = getResourceProvider(); - if (context == null) { - return; - } + if (context == null) return; if (!balanceAvailable()) { getBalance(() -> { @@ -566,7 +928,7 @@ public void openPaymentForm(MessageObject messageObject, TLRPC.InputInvoice inpu return; } final boolean[] purchased = new boolean[] { false }; - StarsIntroActivity.StarsNeededSheet sheet = new StarsIntroActivity.StarsNeededSheet(context, resourcesProvider, stars, bot, () -> { + StarsIntroActivity.StarsNeededSheet sheet = new StarsIntroActivity.StarsNeededSheet(context, resourcesProvider, stars, StarsIntroActivity.StarsNeededSheet.TYPE_BOT, bot, () -> { purchased[0] = true; payAfterConfirmed(messageObject, inputInvoice, form, success -> { allDone[0] = true; @@ -609,6 +971,76 @@ public void openPaymentForm(MessageObject messageObject, TLRPC.InputInvoice inpu }); } + public void subscribeTo(String hash, TLRPC.ChatInvite chatInvite, Utilities.Callback2<String, Long> whenAllDone) { + if (chatInvite == null || chatInvite.subscription_pricing == null) return; + + final Context context = LaunchActivity.instance != null ? LaunchActivity.instance : ApplicationLoader.applicationContext; + final Theme.ResourcesProvider resourcesProvider = getResourceProvider(); + final long stars = chatInvite.subscription_pricing.amount; + + if (context == null) return; + + final int currentAccount = UserConfig.selectedAccount; + + final boolean[] allDone = new boolean[] { false }; + StarsIntroActivity.openStarsChannelInviteSheet(context, resourcesProvider, currentAccount, chatInvite, whenDone -> { + if (balance < stars) { + if (!MessagesController.getInstance(currentAccount).starsPurchaseAvailable()) { + paymentFormOpened = false; + if (whenDone != null) { + whenDone.run(false); + } + if (!allDone[0] && whenAllDone != null) { + whenAllDone.run("cancelled", 0L); + allDone[0] = true; + } + showNoSupportDialog(context, resourcesProvider); + return; + } + final boolean[] purchased = new boolean[] { false }; + StarsIntroActivity.StarsNeededSheet sheet = new StarsIntroActivity.StarsNeededSheet(context, resourcesProvider, stars, StarsIntroActivity.StarsNeededSheet.TYPE_SUBSCRIPTION_BUY, chatInvite.title, () -> { + purchased[0] = true; + payAfterConfirmed(hash, chatInvite, (did, success) -> { + allDone[0] = true; + if (whenAllDone != null) { + whenAllDone.run(success ? "paid" : "failed", did); + } + if (whenDone != null) { + whenDone.run(true); + } + }); + }); + sheet.setOnDismissListener(d -> { + if (whenDone != null && !purchased[0]) { + whenDone.run(false); + paymentFormOpened = false; + if (!allDone[0] && whenAllDone != null) { + whenAllDone.run("cancelled", 0L); + allDone[0] = true; + } + } + }); + sheet.show(); + } else { + payAfterConfirmed(hash, chatInvite, (did, success) -> { + if (whenDone != null) { + whenDone.run(true); + } + allDone[0] = true; + if (whenAllDone != null) { + whenAllDone.run(success ? "paid" : "failed", did); + } + }); + } + }, () -> { + paymentFormOpened = false; + if (!allDone[0] && whenAllDone != null) { + whenAllDone.run("cancelled", 0L); + allDone[0] = true; + } + }); + } + private void showNoSupportDialog(Context context, Theme.ResourcesProvider resourcesProvider) { new AlertDialog.Builder(context, resourcesProvider) .setTitle(getString(R.string.StarsNotAvailableTitle)) @@ -636,11 +1068,19 @@ private void payAfterConfirmed(MessageObject messageObject, TLRPC.InputInvoice i final long stars = _stars; final long dialogId; if (messageObject != null) { + long did; if (messageObject.messageOwner != null && messageObject.messageOwner.fwd_from != null && messageObject.messageOwner.fwd_from.from_id != null) { - dialogId = DialogObject.getPeerDialogId(messageObject.messageOwner.fwd_from.from_id); + did = DialogObject.getPeerDialogId(messageObject.messageOwner.fwd_from.from_id); } else { - dialogId = messageObject.getDialogId(); + did = messageObject.getDialogId(); } + if (did < 0 && messageObject.getFromChatId() > 0) { + final TLRPC.User _user = MessagesController.getInstance(currentAccount).getUser(messageObject.getFromChatId()); + if (_user != null && _user.bot) { + did = _user.id; + } + } + dialogId = did; } else { dialogId = form.bot_id; } @@ -669,17 +1109,20 @@ private void payAfterConfirmed(MessageObject messageObject, TLRPC.InputInvoice i MessagesController.getInstance(currentAccount).processUpdates(result.updates, false); final boolean media = messageObject != null && messageObject.messageOwner != null && messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaPaidMedia; - Drawable starDrawable = context.getResources().getDrawable(R.drawable.star_small_inner).mutate(); if (media) { + Drawable starDrawable = context.getResources().getDrawable(R.drawable.star_small_inner).mutate(); b.createSimpleBulletin(starDrawable, getString(R.string.StarsMediaPurchaseCompleted), AndroidUtilities.replaceTags(formatPluralString("StarsMediaPurchaseCompletedInfo", (int) stars, bot))).show(); } else { - b.createSimpleBulletin(starDrawable, getString(R.string.StarsPurchaseCompleted), AndroidUtilities.replaceTags(formatPluralString("StarsPurchaseCompletedInfo", (int) stars, product, bot))).show(); + b.createSimpleBulletin(R.raw.stars_send, getString(R.string.StarsPurchaseCompleted), AndroidUtilities.replaceTags(formatPluralString("StarsPurchaseCompletedInfo", (int) stars, product, bot))).show(); } if (LaunchActivity.instance != null && LaunchActivity.instance.getFireworksOverlay() != null) { LaunchActivity.instance.getFireworksOverlay().start(true); } - invalidateTransactions(true); + final boolean isStarsGift = inputInvoice instanceof TLRPC.TL_inputInvoiceStars && ((TLRPC.TL_inputInvoiceStars) inputInvoice).purpose instanceof TLRPC.TL_inputStorePaymentStarsGift; + if (!isStarsGift) { + invalidateTransactions(true); + } if (messageObject != null) { TLRPC.TL_messages_getExtendedMedia req = new TLRPC.TL_messages_getExtendedMedia(); @@ -696,7 +1139,7 @@ private void payAfterConfirmed(MessageObject messageObject, TLRPC.InputInvoice i return; } final boolean[] purchased = new boolean[] { false }; - StarsIntroActivity.StarsNeededSheet sheet = new StarsIntroActivity.StarsNeededSheet(context, resourcesProvider, stars, bot, () -> { + StarsIntroActivity.StarsNeededSheet sheet = new StarsIntroActivity.StarsNeededSheet(context, resourcesProvider, stars, StarsIntroActivity.StarsNeededSheet.TYPE_BOT, bot, () -> { purchased[0] = true; payAfterConfirmed(messageObject, inputInvoice, form, success -> { if (whenDone != null) { @@ -726,14 +1169,14 @@ private void payAfterConfirmed(MessageObject messageObject, TLRPC.InputInvoice i if (whenDone != null) { whenDone.run(false); } - b.createSimpleBulletin(R.raw.error, LocaleController.formatString(R.string.UnknownErrorCode, err3 != null ? err3.text : "FAILED_GETTING_FORM")).show(); + b.createSimpleBulletin(R.raw.error, formatString(R.string.UnknownErrorCode, err3 != null ? err3.text : "FAILED_GETTING_FORM")).show(); } })); } else { if (whenDone != null) { whenDone.run(false); } - b.createSimpleBulletin(R.raw.error, LocaleController.formatString(R.string.UnknownErrorCode, err2 != null ? err2.text : "FAILED_SEND_STARS")).show(); + b.createSimpleBulletin(R.raw.error, formatString(R.string.UnknownErrorCode, err2 != null ? err2.text : "FAILED_SEND_STARS")).show(); if (messageObject != null) { TLRPC.TL_messages_getExtendedMedia req = new TLRPC.TL_messages_getExtendedMedia(); @@ -745,6 +1188,94 @@ private void payAfterConfirmed(MessageObject messageObject, TLRPC.InputInvoice i })); } + private void payAfterConfirmed(String hash, TLRPC.ChatInvite chatInvite, Utilities.Callback2<Long, Boolean> whenDone) { + if (chatInvite == null || chatInvite.subscription_pricing == null) { + return; + } + + final Context context = ApplicationLoader.applicationContext; + final Theme.ResourcesProvider resourcesProvider = getResourceProvider(); + + if (context == null) { + return; + } + + final long stars = chatInvite.subscription_pricing.amount; + final String channel = chatInvite.title; + + TLRPC.TL_inputInvoiceChatInviteSubscription inputInvoice = new TLRPC.TL_inputInvoiceChatInviteSubscription(); + inputInvoice.hash = hash; + + TLRPC.TL_payments_sendStarsForm req2 = new TLRPC.TL_payments_sendStarsForm(); + req2.form_id = chatInvite.subscription_form_id; + req2.invoice = inputInvoice; + ConnectionsManager.getInstance(currentAccount).sendRequest(req2, (res2, err2) -> AndroidUtilities.runOnUIThread(() -> { + paymentFormOpened = false; + BaseFragment fragment = LaunchActivity.getLastFragment(); + BulletinFactory b = !AndroidUtilities.hasDialogOnTop(fragment) ? BulletinFactory.of(fragment) : BulletinFactory.global(); + if (res2 instanceof TLRPC.TL_payments_paymentResult) { + TLRPC.TL_payments_paymentResult result = (TLRPC.TL_payments_paymentResult) res2; + MessagesController.getInstance(currentAccount).processUpdates(result.updates, false); + + long dialogId = 0; + if (result.updates.update instanceof TLRPC.TL_updateChannel) { + TLRPC.TL_updateChannel upd = (TLRPC.TL_updateChannel) result.updates.update; + dialogId = -upd.channel_id; + } + if (result.updates.updates != null) { + for (int i = 0; i < result.updates.updates.size(); ++i) { + if (result.updates.updates.get(i) instanceof TLRPC.TL_updateChannel) { + TLRPC.TL_updateChannel upd = (TLRPC.TL_updateChannel) result.updates.updates.get(i); + dialogId = -upd.channel_id; + } + } + } + + if (whenDone != null) { + whenDone.run(dialogId, true); + } + + if (dialogId == 0) { + b.createSimpleBulletin(R.raw.stars_send, getString(R.string.StarsSubscriptionCompleted), AndroidUtilities.replaceTags(formatPluralString("StarsSubscriptionCompletedText", (int) stars, channel))).show(); + } + if (LaunchActivity.instance != null && LaunchActivity.instance.getFireworksOverlay() != null) { + LaunchActivity.instance.getFireworksOverlay().start(true); + } + + invalidateTransactions(true); + invalidateSubscriptions(true); + } else if (err2 != null && "BALANCE_TOO_LOW".equals(err2.text)) { + if (!MessagesController.getInstance(currentAccount).starsPurchaseAvailable()) { + if (whenDone != null) { + whenDone.run(0L, false); + } + showNoSupportDialog(context, resourcesProvider); + return; + } + final boolean[] purchased = new boolean[] { false }; + StarsIntroActivity.StarsNeededSheet sheet = new StarsIntroActivity.StarsNeededSheet(context, resourcesProvider, stars, StarsIntroActivity.StarsNeededSheet.TYPE_SUBSCRIPTION_BUY, chatInvite.title, () -> { + purchased[0] = true; + payAfterConfirmed(hash, chatInvite, (did, success) -> { + if (whenDone != null) { + whenDone.run(did, success); + } + }); + }); + sheet.setOnDismissListener(d -> { + if (whenDone != null && !purchased[0]) { + whenDone.run(0L, false); + } + }); + sheet.show(); + } else { + if (whenDone != null) { + whenDone.run(0L, false); + } + b.createSimpleBulletin(R.raw.error, formatString(R.string.UnknownErrorCode, err2 != null ? err2.text : "FAILED_SEND_STARS")).show(); + } + })); + } + public void updateMediaPrice(MessageObject msg, long price, Runnable done) { updateMediaPrice(msg, price, done, false); } @@ -828,4 +1359,427 @@ private void updateMediaPrice(MessageObject msg, long price, Runnable done, bool })); } + public static final long REACTIONS_TIMEOUT = 5_000; + public PendingPaidReactions currentPendingReactions; + + public static class MessageId { + public long did; + public int mid; + private MessageId(long did, int mid) { + this.did = did; + this.mid = mid; + } + public static MessageId from(long did, int mid) { + return new MessageId(did, mid); + } + public static MessageId from(MessageObject msg) { + if (msg.messageOwner.isThreadMessage && msg.messageOwner.fwd_from != null) { + return new MessageId(msg.getFromChatId(), msg.messageOwner.fwd_from.saved_from_msg_id); + } else { + return new MessageId(msg.getDialogId(), msg.getId()); + } + } + @Override + public int hashCode() { + return Objects.hash(did, mid); + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj instanceof MessageId) { + MessageId id = (MessageId) obj; + return id.did == did && id.mid == mid; + } + return false; + } + } + + public boolean arePaidReactionsAnonymous(MessageObject messageObject) { + if (currentPendingReactions != null && currentPendingReactions.message.equals(MessageId.from(messageObject)) && currentPendingReactions.anonymous != null) { + return currentPendingReactions.anonymous; + } + Boolean messageSettings = messageObject == null ? null : messageObject.isMyPaidReactionAnonymous(); + if (messageSettings != null) { + return messageSettings; + } + final long did = messageObject == null ? 0 : messageObject.getDialogId(); + final SharedPreferences prefs = MessagesController.getInstance(currentAccount).getMainSettings(); + if (prefs.contains("anon_react_" + did)) { + return prefs.getBoolean("anon_react_" + did, false); + } + if (prefs.contains("anon_react_" + 0)) { + return prefs.getBoolean("anon_react_" + 0, false); + } + return false; + } + + public boolean arePaidReactionsAnonymous(MessageId id, TLRPC.MessageReactions reactions) { + if (currentPendingReactions != null && currentPendingReactions.message.equals(id) && currentPendingReactions.anonymous != null) { + return currentPendingReactions.anonymous; + } + Boolean messageSettings = MessageObject.isMyPaidReactionAnonymous(reactions); + if (messageSettings != null) { + return messageSettings; + } + final SharedPreferences prefs = MessagesController.getInstance(currentAccount).getMainSettings(); + if (prefs.contains("anon_react_" + id.did)) { + return prefs.getBoolean("anon_react_" + id.did, false); + } + if (prefs.contains("anon_react_" + 0)) { + return prefs.getBoolean("anon_react_" + 0, false); + } + return false; + } + + public void saveAnonymous(MessageObject messageObject, boolean value) { + final SharedPreferences prefs = MessagesController.getInstance(currentAccount).getMainSettings(); + prefs.edit().putBoolean("anon_react_" + (messageObject == null ? 0 : messageObject.getDialogId()), value).putBoolean("anon_react_0", value).apply(); + } + + public class PendingPaidReactions { + + public MessageId message; + public MessageObject messageObject; + public long random_id; + public ChatActivity chatActivity; + public Bulletin bulletin; + public Bulletin.TwoLineAnimatedLottieLayout bulletinLayout; + public Bulletin.UndoButton bulletinButton; + public Bulletin.TimerView timerView; + + public boolean wasChosen; + + public long amount; + public long lastTime; + public boolean committed = false; + public boolean cancelled = false; + + public long not_added; + public boolean applied; + + public Boolean anonymous = null; + public boolean isAnonymous() { + if (anonymous != null) return anonymous; + return arePaidReactionsAnonymous(messageObject); + } + + private void saveAnonymous() { + StarsController.this.saveAnonymous(messageObject, isAnonymous()); + } + + public StarReactionsOverlay overlay; + public void setOverlay(StarReactionsOverlay overlay) { + this.overlay = overlay; + } + + public PendingPaidReactions( + MessageId message, + MessageObject messageObject, + ChatActivity chatActivity, + long currentTime, + boolean affect + ) { + this.message = message; + this.messageObject = messageObject; + this.random_id = Utilities.random.nextLong() & 0xFFFFFFFFL | (currentTime << 32); + this.chatActivity = chatActivity; + + final Context context = getContext(chatActivity); + bulletinLayout = new Bulletin.TwoLineAnimatedLottieLayout(context, chatActivity.themeDelegate); + bulletinLayout.setAnimation(R.raw.stars_topup); + bulletinLayout.titleTextView.setText(LocaleController.getString(R.string.StarsSentTitle)); + bulletinButton = new Bulletin.UndoButton(context, true, false, chatActivity.themeDelegate); + bulletinButton.setText(LocaleController.getString(R.string.StarsSentUndo)); + bulletinButton.setUndoAction(this::cancel); + timerView = new Bulletin.TimerView(context, chatActivity.themeDelegate); + timerView.timeLeft = REACTIONS_TIMEOUT; + timerView.setColor(Theme.getColor(Theme.key_undo_cancelColor, chatActivity.themeDelegate)); + bulletinButton.addView(timerView, LayoutHelper.createFrame(20, 20, Gravity.RIGHT | Gravity.CENTER_VERTICAL, 0, 0, 12, 0)); + bulletinButton.undoTextView.setPadding(dp(12), dp(8), dp(20 + 10), dp(8)); + bulletinLayout.setButton(bulletinButton); + bulletin = BulletinFactory.of(chatActivity).create(bulletinLayout, -1); + bulletin.hideAfterBottomSheet = false; + if (affect) bulletin.show(true); + bulletin.setOnHideListener(closeRunnable); + + this.amount = 0; + this.lastTime = System.currentTimeMillis(); + + wasChosen = messageObject.isPaidReactionChosen(); + } + + public void add(long amount, boolean affect) { + if (committed || cancelled) { + if (BuildVars.DEBUG_PRIVATE_VERSION) { + throw new RuntimeException("adding more amount to committed reactions"); + } else { + return; + } + } + this.amount += amount; + this.lastTime = System.currentTimeMillis(); + + bulletinLayout.subtitleTextView.cancelAnimation(); + bulletinLayout.subtitleTextView.setText(AndroidUtilities.replaceTags(LocaleController.formatPluralString("StarsSentText", (int) this.amount)), true); + + timerView.timeLeft = REACTIONS_TIMEOUT; + AndroidUtilities.cancelRunOnUIThread(closeRunnable); + AndroidUtilities.runOnUIThread(closeRunnable, REACTIONS_TIMEOUT); + + if (affect) { + applied = true; + messageObject.addPaidReactions((int) +amount, true, isAnonymous()); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.didUpdateReactions, messageObject.getDialogId(), messageObject.getId(), messageObject.messageOwner.reactions); + } else { + applied = false; + if (messageObject.ensurePaidReactionsExist(true)) { + not_added--; + } + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.didUpdateReactions, messageObject.getDialogId(), messageObject.getId(), messageObject.messageOwner.reactions); + not_added += amount; + } + } + + public void apply() { + if (applied) return; + applied = true; + + timerView.timeLeft = REACTIONS_TIMEOUT; + AndroidUtilities.cancelRunOnUIThread(closeRunnable); + AndroidUtilities.runOnUIThread(closeRunnable, REACTIONS_TIMEOUT); + + messageObject.addPaidReactions((int) +not_added, true, isAnonymous()); + not_added = 0; + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.didUpdateReactions, messageObject.getDialogId(), messageObject.getId(), messageObject.messageOwner.reactions); + bulletin.show(true); + bulletin.setOnHideListener(closeRunnable); + } + + public final Runnable closeRunnable = this::close; + public void close() { + AndroidUtilities.cancelRunOnUIThread(closeRunnable); + + if (applied) { + commit(); + } else { + cancelled = true; + messageObject.addPaidReactions((int) -amount, wasChosen, isAnonymous()); + } + bulletin.hide(); + if (overlay != null && overlay.isShowing(messageObject)) { + overlay.hide(); + } + + if (currentPendingReactions == this) { + currentPendingReactions = null; + } + } + + public final Runnable cancelRunnable = this::cancel; + public void cancel() { + AndroidUtilities.cancelRunOnUIThread(closeRunnable); + + cancelled = true; + bulletin.hide(); + if (overlay != null) { + overlay.hide(); + } + + messageObject.addPaidReactions((int) -amount, wasChosen, isAnonymous()); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.didUpdateReactions, messageObject.getDialogId(), messageObject.getId(), messageObject.messageOwner.reactions); + + if (currentPendingReactions == this) { + currentPendingReactions = null; + } + } + + public void commit() { + if (committed || cancelled) { + return; + } + + final StarsController starsController = StarsController.getInstance(currentAccount); + final MessagesController messagesController = MessagesController.getInstance(currentAccount); + final ConnectionsManager connectionsManager = ConnectionsManager.getInstance(currentAccount); + + final long totalStars = amount; + if (starsController.balanceAvailable() && starsController.getBalance() < totalStars) { + cancelled = true; + + messageObject.addPaidReactions((int) -amount, wasChosen, isAnonymous()); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.didUpdateReactions, messageObject.getDialogId(), messageObject.getId(), messageObject.messageOwner.reactions); + + String name; + if (message.did >= 0) { + TLRPC.User user = chatActivity.getMessagesController().getUser(message.did); + name = UserObject.getForcedFirstName(user); + } else { + TLRPC.Chat chat = chatActivity.getMessagesController().getChat(-message.did); + name = chat == null ? "" : chat.title; + } + Context context = chatActivity.getContext(); + if (context == null) context = LaunchActivity.instance; + if (context == null) context = ApplicationLoader.applicationContext; + new StarsIntroActivity.StarsNeededSheet(context, chatActivity.getResourceProvider(), totalStars, StarsIntroActivity.StarsNeededSheet.TYPE_REACTIONS, name, () -> { + sendPaidReaction(messageObject, chatActivity, totalStars, true, true, anonymous); + }).show(); + + return; + } + + committed = true; + + TLRPC.TL_messages_sendPaidReaction req = new TLRPC.TL_messages_sendPaidReaction(); + req.peer = messagesController.getInputPeer(message.did); + req.msg_id = message.mid; + req.random_id = random_id; + req.count = (int) amount; + req.isPrivate = isAnonymous(); + saveAnonymous(); + + connectionsManager.sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> { + if (response != null) { + messagesController.processUpdates((TLRPC.Updates) response, false); + } else if (error != null) { + messageObject.addPaidReactions((int) -amount, wasChosen, isAnonymous()); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.didUpdateReactions, messageObject.getDialogId(), messageObject.getId(), messageObject.messageOwner.reactions); + + if ("BALANCE_TOO_LOW".equals(error.text)) { + String name; + if (message.did >= 0) { + TLRPC.User user = chatActivity.getMessagesController().getUser(message.did); + name = UserObject.getForcedFirstName(user); + } else { + TLRPC.Chat chat = chatActivity.getMessagesController().getChat(-message.did); + name = chat == null ? "" : chat.title; + } + Context context = chatActivity.getContext(); + if (context == null) context = LaunchActivity.instance; + if (context == null) context = ApplicationLoader.applicationContext; + new StarsIntroActivity.StarsNeededSheet(context, chatActivity.getResourceProvider(), totalStars, StarsIntroActivity.StarsNeededSheet.TYPE_REACTIONS, name, () -> { + sendPaidReaction(messageObject, chatActivity, totalStars, true, true, anonymous); + }).show(); + } + + invalidateTransactions(false); + invalidateBalance(); + } + })); + } + } + + public StarsController.PendingPaidReactions sendPaidReaction(MessageObject messageObject, ChatActivity chatActivity) { + return sendPaidReaction(messageObject, chatActivity, +1, true, true, null); + } + + public Context getContext(ChatActivity chatActivity) { + if (chatActivity != null && chatActivity.getContext() != null) + return chatActivity.getContext(); + if (LaunchActivity.instance != null && !LaunchActivity.instance.isFinishing()) + return LaunchActivity.instance; + if (ApplicationLoader.applicationContext != null) + return ApplicationLoader.applicationContext; + return null; + } + + public StarsController.PendingPaidReactions sendPaidReaction( + MessageObject messageObject, + ChatActivity chatActivity, + long amount, + boolean affect, + boolean checkBalance, + Boolean anonymous + ) { + final MessageId key = MessageId.from(messageObject); + final StarsController s = StarsController.getInstance(currentAccount); + final long totalStars = amount; + final Context context = getContext(chatActivity); + if (context == null) return null; + if (checkBalance && s.balanceAvailable() && s.getBalance() <= 0) { + final long dialogId = chatActivity.getDialogId(); + String name; + if (dialogId >= 0) { + TLRPC.User user = chatActivity.getMessagesController().getUser(dialogId); + name = UserObject.getForcedFirstName(user); + } else { + TLRPC.Chat chat = chatActivity.getMessagesController().getChat(-dialogId); + name = chat == null ? "" : chat.title; + } + new StarsIntroActivity.StarsNeededSheet(chatActivity.getContext(), chatActivity.getResourceProvider(), totalStars, StarsIntroActivity.StarsNeededSheet.TYPE_REACTIONS, name, () -> { + sendPaidReaction(messageObject, chatActivity, totalStars, true, true, anonymous); + }).show(); + return null; + } + if (messageObject != null && !messageObject.doesPaidReactionExist()) { + affect = true; + } + if (currentPendingReactions == null || !currentPendingReactions.message.equals(key)) { + if (currentPendingReactions != null) { + currentPendingReactions.close(); + } + currentPendingReactions = new PendingPaidReactions(key, messageObject, chatActivity, ConnectionsManager.getInstance(currentAccount).getCurrentTime(), affect); + currentPendingReactions.anonymous = anonymous; + } + if (currentPendingReactions.amount + amount > MessagesController.getInstance(currentAccount).starsPaidReactionAmountMax) { + currentPendingReactions.close(); + currentPendingReactions = new PendingPaidReactions(key, messageObject, chatActivity, ConnectionsManager.getInstance(currentAccount).getCurrentTime(), affect); + } + final long totalStars2 = currentPendingReactions.amount + amount; + if (checkBalance && s.balanceAvailable() && s.getBalance() < totalStars2) { + currentPendingReactions.cancel(); + final long dialogId = chatActivity.getDialogId(); + String name; + if (dialogId >= 0) { + TLRPC.User user = chatActivity.getMessagesController().getUser(dialogId); + name = UserObject.getForcedFirstName(user); + } else { + TLRPC.Chat chat = chatActivity.getMessagesController().getChat(-dialogId); + name = chat == null ? "" : chat.title; + } + new StarsIntroActivity.StarsNeededSheet(context, chatActivity.getResourceProvider(), totalStars2, StarsIntroActivity.StarsNeededSheet.TYPE_REACTIONS, name, () -> { + sendPaidReaction(messageObject, chatActivity, totalStars2, true, true, anonymous); + }).show(); + return null; + } + currentPendingReactions.add(amount, affect); + currentPendingReactions.anonymous = anonymous; + return currentPendingReactions; + } + + public void undoPaidReaction() { + if (currentPendingReactions != null) { + currentPendingReactions.cancel(); + } + } + + public void commitPaidReaction() { + if (currentPendingReactions != null) { + currentPendingReactions.close(); + } + } + + public boolean hasPendingPaidReactions(MessageObject messageObject) { + if (currentPendingReactions == null) return false; + if (messageObject == null) return false; + final MessageId key = MessageId.from(messageObject); + if (currentPendingReactions.message.did != key.did || currentPendingReactions.message.mid != key.mid) return false; + if (!currentPendingReactions.applied) return false; + return true; + } + + public long getPendingPaidReactions(MessageObject messageObject) { + if (messageObject == null || messageObject.messageOwner == null) return 0; + if (messageObject.messageOwner.isThreadMessage && messageObject.messageOwner.fwd_from != null) { + return getPendingPaidReactions(messageObject.getFromChatId(), messageObject.messageOwner.fwd_from.saved_from_msg_id); + } else { + return getPendingPaidReactions(messageObject.getDialogId(), messageObject.getId()); + } + } + + public long getPendingPaidReactions(long dialogId, int messageId) { + if (currentPendingReactions == null) return 0; + if (currentPendingReactions.message.did != dialogId || currentPendingReactions.message.mid != messageId) return 0; + if (!currentPendingReactions.applied) return 0; + return currentPendingReactions.amount; + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsIntroActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsIntroActivity.java index a06dcadd929..02c6f1153b8 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsIntroActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsIntroActivity.java @@ -5,6 +5,7 @@ import static org.telegram.messenger.LocaleController.formatPluralStringComma; import static org.telegram.messenger.LocaleController.formatString; import static org.telegram.messenger.LocaleController.getString; +import static org.telegram.ui.Stars.StarsIntroActivity.StarsTransactionView.getPlatformDrawable; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; @@ -34,7 +35,6 @@ import android.text.style.ReplacementSpan; import android.util.TypedValue; import android.view.Gravity; -import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.animation.OvershootInterpolator; @@ -54,33 +54,40 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import org.checkerframework.checker.units.qual.Angle; +import com.google.android.exoplayer2.scheduler.RequirementsWatcher; +import com.google.common.collect.Lists; + import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.BillingController; +import org.telegram.messenger.BirthdayController; import org.telegram.messenger.ChatObject; import org.telegram.messenger.DialogObject; +import org.telegram.messenger.DocumentObject; +import org.telegram.messenger.Emoji; import org.telegram.messenger.FileLoader; import org.telegram.messenger.FileLog; import org.telegram.messenger.ImageLocation; import org.telegram.messenger.ImageReceiver; import org.telegram.messenger.LocaleController; +import org.telegram.messenger.MediaDataController; import org.telegram.messenger.MessageObject; import org.telegram.messenger.MessagesController; import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.R; +import org.telegram.messenger.SvgHelper; import org.telegram.messenger.UserConfig; import org.telegram.messenger.UserObject; import org.telegram.messenger.Utilities; import org.telegram.messenger.WebFile; import org.telegram.messenger.browser.Browser; +import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.ActionBar; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.BottomSheet; +import org.telegram.ui.ActionBar.SimpleTextView; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.AvatarSpan; -import org.telegram.ui.Cells.ChatActionCell; -import org.telegram.ui.Cells.ChatMessageCell; import org.telegram.ui.Cells.HeaderCell; import org.telegram.ui.Cells.SessionCell; import org.telegram.ui.ChatActivity; @@ -89,6 +96,7 @@ import org.telegram.ui.Components.AvatarDrawable; import org.telegram.ui.Components.BackupImageView; import org.telegram.ui.Components.BottomSheetWithRecyclerListView; +import org.telegram.ui.Components.Bulletin; import org.telegram.ui.Components.BulletinFactory; import org.telegram.ui.Components.ColoredImageSpan; import org.telegram.ui.Components.CombinedDrawable; @@ -104,8 +112,11 @@ import org.telegram.ui.Components.Premium.GLIcon.GLIconTextureView; import org.telegram.ui.Components.Premium.GLIcon.Icon3D; import org.telegram.ui.Components.Premium.StarParticlesView; +import org.telegram.ui.Components.Premium.boosts.UserSelectorBottomSheet; +import org.telegram.ui.Components.RLottieDrawable; import org.telegram.ui.Components.RecyclerListView; import org.telegram.ui.Components.ScaleStateListAnimator; +import org.telegram.ui.Components.StarAppsSheet; import org.telegram.ui.Components.TableView; import org.telegram.ui.Components.Text; import org.telegram.ui.Components.UItem; @@ -120,11 +131,12 @@ import org.telegram.ui.Stories.recorder.ButtonWithCounterView; import org.telegram.ui.Stories.recorder.HintView2; -import java.lang.ref.Reference; -import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.Date; import java.util.HashMap; +import java.util.Locale; public class StarsIntroActivity extends GradientHeaderActivity implements NotificationCenter.NotificationCenterDelegate { @@ -146,7 +158,9 @@ public boolean onFragmentCreate() { NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.starOptionsLoaded); NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.starBalanceUpdated); NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.starTransactionsLoaded); + NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.starSubscriptionsLoaded); StarsController.getInstance(currentAccount).invalidateTransactions(true); + StarsController.getInstance(currentAccount).invalidateSubscriptions(true); return super.onFragmentCreate(); } @@ -156,8 +170,10 @@ public void onFragmentDestroy() { NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.starOptionsLoaded); NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.starBalanceUpdated); NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.starTransactionsLoaded); + NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.starSubscriptionsLoaded); } + private boolean hadTransactions; @Override public void didReceivedNotification(int id, int account, Object... args) { if ( @@ -172,9 +188,31 @@ public void didReceivedNotification(int id, int account, Object... args) { savedScrollOffset = 0; } applyScrolledPosition(); + } else if (id == NotificationCenter.starTransactionsLoaded) { + final StarsController c = StarsController.getInstance(currentAccount); + if (hadTransactions != c.hasTransactions()) { + hadTransactions = c.hasTransactions(); + saveScrollPosition(); + if (adapter != null) { + adapter.update(true); + } + if (savedScrollPosition == 0 && savedScrollOffset < 0) { + savedScrollOffset = 0; + } + applyScrolledPosition(); + } + } else if (id == NotificationCenter.starSubscriptionsLoaded) { + if (adapter != null) { + adapter.update(true); + } } } + @Override + public int getNavigationBarColor() { + return Theme.getColor(Theme.key_dialogBackgroundGray); + } + @Override public View createView(Context context) { useFillLastLayoutManager = false; @@ -183,10 +221,21 @@ public View createView(Context context) { emptyLayout = new View(context) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(dp(300), MeasureSpec.EXACTLY)); + int firstViewHeight; + if (StarsIntroActivity.this.isLandscapeMode) { + firstViewHeight = StarsIntroActivity.this.statusBarHeight + actionBar.getMeasuredHeight() - AndroidUtilities.dp(16); + } else { + int h = AndroidUtilities.dp(140) + statusBarHeight; + if (backgroundView.getMeasuredHeight() + AndroidUtilities.dp(24) > h) { + h = backgroundView.getMeasuredHeight() + AndroidUtilities.dp(24); + } + firstViewHeight = h; + } + firstViewHeight -= 2.5f * yOffset; + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(firstViewHeight, MeasureSpec.EXACTLY)); } }; - emptyLayout.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundGray)); + emptyLayout.setBackgroundColor(Theme.getColor(Theme.key_dialogBackgroundGray)); super.createView(context); @@ -314,6 +363,12 @@ public void onNestedPreScroll(View target, int dx, int dy, int[] consumed, int t if (innerListView != null && consumed[1] > 0) { innerListView.scrollBy(0, consumed[1]); } + } else if (dy > 0) { + RecyclerListView innerListView = transactionsLayout.getCurrentListView(); + if (listView.getHeight() - bottom >= 0 && innerListView != null && !innerListView.canScrollVertically(1)) { + consumed[1] = dy; + listView.stopScroll(); + } } } } @@ -427,7 +482,7 @@ protected RecyclerView.Adapter<?> createAdapter() { @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - if (viewType == UniversalAdapter.VIEW_TYPE_HEADER) { + if (viewType == UniversalAdapter.VIEW_TYPE_ANIMATED_HEADER) { HeaderCell headerCell = new HeaderCell(getContext(), Theme.key_windowBackgroundWhiteBlueHeader, 21, 0, false, resourceProvider); headerCell.setHeight(40 - 15); return new RecyclerListView.Holder(headerCell); @@ -439,21 +494,8 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int private boolean expanded = false; private final int BUTTON_EXPAND = -1; - - public static class StarTier { - public final boolean main; - public final int id; - public final int stars; - public final int amount; - public final String currency; - public StarTier(boolean main, int id, int stars, int amount, String currency) { - this.main = main; - this.id = id; - this.stars = stars; - this.amount = amount; - this.currency = currency; - } - } + private final int BUTTON_GIFT = -2; + private final int BUTTON_SUBSCRIPTIONS_EXPAND = -3; public void fillItems(ArrayList<UItem> items, UniversalAdapter adapter) { if (getContext() == null) { @@ -463,7 +505,7 @@ public void fillItems(ArrayList<UItem> items, UniversalAdapter adapter) { final StarsController c = StarsController.getInstance(currentAccount); items.add(UItem.asFullyCustom(getHeader(getContext()))); - items.add(UItem.asHeader(getString(R.string.TelegramStarsChoose))); + items.add(UItem.asAnimatedHeader(-99, getString(R.string.TelegramStarsChoose))); int stars = 1; ArrayList<TLRPC.TL_starsTopupOption> options = c.getOptions(); @@ -471,7 +513,7 @@ public void fillItems(ArrayList<UItem> items, UniversalAdapter adapter) { int hidden = 0; for (int id = 0; id < options.size(); ++id) { TLRPC.TL_starsTopupOption option = options.get(id); - if (option.collapsed && !expanded) { + if (option.extended && !expanded) { hidden++; continue; } @@ -492,24 +534,47 @@ public void fillItems(ArrayList<UItem> items, UniversalAdapter adapter) { Browser.openUrl(getContext(), getString(R.string.StarsTOSLink)); }))); -// if (c.hasTransactions()) { + if (getMessagesController().starsGiftsEnabled) { + items.add(UItem.asButton(BUTTON_GIFT, R.drawable.menu_stars_gift, getString(R.string.TelegramStarsGift)).accent()); + items.add(UItem.asShadow(null)); + } + + if (c.hasSubscriptions()) { + items.add(UItem.asHeader(getString(R.string.StarMySubscriptions))); + for (int i = 0; i < c.subscriptions.size(); ++i) { + items.add(StarsSubscriptionView.Factory.asSubscription(c.subscriptions.get(i))); + } + if (c.isLoadingSubscriptions()) { + items.add(UItem.asFlicker(items.size(), FlickerLoadingView.STAR_SUBSCRIPTION)); + } else if (!c.didFullyLoadSubscriptions()) { + items.add(UItem.asButton(BUTTON_SUBSCRIPTIONS_EXPAND, R.drawable.arrow_more, getString(R.string.StarMySubscriptionsExpand)).accent()); + } + items.add(UItem.asShadow(null)); + } + + if (hadTransactions = c.hasTransactions()) { items.add(UItem.asFullscreenCustom(transactionsLayout, ActionBar.getCurrentActionBarHeight() + AndroidUtilities.statusBarHeight)); -// } else { -// items.add(UItem.asCustom(emptyLayout)); -// } + } else { + items.add(UItem.asCustom(emptyLayout)); + } } public void onItemClick(UItem item, int position) { if (item.id == BUTTON_EXPAND) { expanded = !expanded; adapter.update(true); + } else if (item.id == BUTTON_GIFT) { + StarsController.getInstance(currentAccount).getGiftOptions(); + UserSelectorBottomSheet.open(UserSelectorBottomSheet.TYPE_STARS, 0, BirthdayController.getInstance(currentAccount).getState()); + } else if (item.id == BUTTON_SUBSCRIPTIONS_EXPAND) { + StarsController.getInstance(currentAccount).loadSubscriptions(); + adapter.update(true); } else if (item.instanceOf(StarTierView.Factory.class)) { if (item.object instanceof TLRPC.TL_starsTopupOption) { StarsController.getInstance(currentAccount).buy(getParentActivity(), (TLRPC.TL_starsTopupOption) item.object, (success, error) -> { if (getContext() == null) return; if (success) { - Drawable starDrawable = getContext().getResources().getDrawable(R.drawable.star_small_inner).mutate(); - BulletinFactory.of(this).createSimpleBulletin(starDrawable, getString(R.string.StarsAcquired), AndroidUtilities.replaceTags(formatPluralString("StarsAcquiredInfo", (int) item.longValue))).show(); + BulletinFactory.of(this).createSimpleBulletin(R.raw.stars_topup, getString(R.string.StarsAcquired), AndroidUtilities.replaceTags(formatPluralString("StarsAcquiredInfo", (int) item.longValue))).show(); fireworksOverlay.start(true); StarsController.getInstance(currentAccount).invalidateTransactions(true); } else if (error != null) { @@ -517,6 +582,10 @@ public void onItemClick(UItem item, int position) { } }); } + } else if (item.instanceOf(StarsSubscriptionView.Factory.class)) { + if (item.object instanceof TLRPC.StarsSubscription) { + showSubscriptionSheet(getContext(), currentAccount, (TLRPC.StarsSubscription) item.object, getResourceProvider()); + } } } @@ -749,7 +818,18 @@ public static UItem asStarTier(int id, int index, TLRPC.TL_starsTopupOption opti item.id = id; item.intValue = index; item.longValue = option.stars; - item.text = formatPluralString("StarsCount", (int) option.stars); + item.text = formatPluralStringComma("StarsCount", (int) option.stars, ' '); + item.subtext = option.loadingStorePrice ? null : BillingController.getInstance().formatCurrency(option.amount, option.currency); + item.object = option; + return item; + } + + public static UItem asStarTier(int id, int index, TLRPC.TL_starsGiftOption option) { + UItem item = UItem.ofFactory(StarTierView.Factory.class); + item.id = id; + item.intValue = index; + item.longValue = option.stars; + item.text = formatPluralStringComma("StarsCount", (int) option.stars, ' '); item.subtext = option.loadingStorePrice ? null : BillingController.getInstance().formatCurrency(option.amount, option.currency); item.object = option; return item; @@ -1006,24 +1086,28 @@ public Page(Context context, long bot_id, int type, int currentAccount, int clas listView.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { - scheduleLoadTransactions(); + if (!Page.this.listView.canScrollVertically(1) || isLoadingVisible()) { + loadTransactionsRunnable.run(); + } } }); } private final Runnable loadTransactionsRunnable; - private void scheduleLoadTransactions() { - if (!Page.this.listView.canScrollVertically(1)) { - AndroidUtilities.cancelRunOnUIThread(loadTransactionsRunnable); - AndroidUtilities.runOnUIThread(loadTransactionsRunnable, 250); + public boolean isLoadingVisible() { + for (int i = 0; i < listView.getChildCount(); ++i) { + if (listView.getChildAt(i) instanceof FlickerLoadingView) + return true; } + return false; } @Override public void didReceivedNotification(int id, int account, Object... args) { if (id == NotificationCenter.starTransactionsLoaded) { listView.adapter.update(true); + loadTransactionsRunnable.run(); } else if (id == NotificationCenter.botStarsTransactionsLoaded) { if ((long) args[0] == bot_id) { listView.adapter.update(true); @@ -1148,7 +1232,7 @@ protected boolean drawChild(Canvas canvas, View child, long drawingTime) { return super.drawChild(canvas, child, drawingTime); } }; - addView(imageViewContainer, LayoutHelper.createLinear(72, LayoutHelper.MATCH_PARENT, Gravity.LEFT | Gravity.FILL_VERTICAL)); + addView(imageViewContainer, LayoutHelper.createLinear(72, LayoutHelper.MATCH_PARENT, 0, Gravity.LEFT | Gravity.FILL_VERTICAL)); imageView2 = new BackupImageView(context); imageView2.setRoundRadius(dp(46)); @@ -1162,29 +1246,35 @@ protected boolean drawChild(Canvas canvas, View child, long drawingTime) { textLayout = new LinearLayout(context); textLayout.setOrientation(VERTICAL); textLayout.setGravity(Gravity.CENTER | Gravity.LEFT); - addView(textLayout, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.FILL)); + addView(textLayout, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, 1, Gravity.FILL)); titleTextView = new TextView(context); titleTextView.setTypeface(AndroidUtilities.bold()); titleTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); - textLayout.addView(titleTextView, titleTextViewParams = LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, 0, 0, 0, 4.33f)); + titleTextView.setEllipsize(TextUtils.TruncateAt.END); + titleTextView.setSingleLine(true); + textLayout.addView(titleTextView, titleTextViewParams = LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 0, 0, 4.33f)); subtitleTextView = new TextView(context); subtitleTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); subtitleTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); - textLayout.addView(subtitleTextView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, 0, 0, 0, .33f)); + subtitleTextView.setEllipsize(TextUtils.TruncateAt.END); + subtitleTextView.setSingleLine(true); + textLayout.addView(subtitleTextView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 0, 0, .33f)); dateTextView = new TextView(context); dateTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2, resourcesProvider)); dateTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); - textLayout.addView(dateTextView, dateTextViewParams = LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT)); + dateTextView.setEllipsize(TextUtils.TruncateAt.END); + dateTextView.setSingleLine(true); + textLayout.addView(dateTextView, dateTextViewParams = LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); amountTextView = new TextView(context); amountTextView.setTypeface(AndroidUtilities.bold()); amountTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15.3f); amountTextView.setGravity(Gravity.RIGHT); - addView(amountTextView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL | Gravity.RIGHT, 0, 0, 20, 0)); + addView(amountTextView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, 0, Gravity.CENTER_VERTICAL | Gravity.RIGHT, 8, 0, 20, 0)); star = new SpannableString("⭐️"); Drawable drawable = context.getResources().getDrawable(R.drawable.star_small_inner).mutate(); @@ -1192,12 +1282,16 @@ protected boolean drawChild(Canvas canvas, View child, long drawingTime) { star.setSpan(new ImageSpan(drawable), 0, star.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } - public static HashMap<String, Drawable> cachedPlatformDrawables; - public static Drawable getPlatformDrawable(String platform) { + public static HashMap<String, CombinedDrawable> cachedPlatformDrawables; + public static CombinedDrawable getPlatformDrawable(String platform) { + return getPlatformDrawable(platform, 44); + } + public static CombinedDrawable getPlatformDrawable(String platform, int sz) { + if (sz != 44) return SessionCell.createDrawable(sz, platform); if (cachedPlatformDrawables == null) { cachedPlatformDrawables = new HashMap<>(); } - Drawable drawable = cachedPlatformDrawables.get(platform); + CombinedDrawable drawable = cachedPlatformDrawables.get(platform); if (drawable == null) { cachedPlatformDrawables.put(platform, drawable = SessionCell.createDrawable(44, platform)); } @@ -1208,7 +1302,7 @@ public static Drawable getPlatformDrawable(String platform) { public void set(TLRPC.StarsTransaction transaction, boolean bot, boolean divider) { long did = DialogObject.getPeerDialogId(transaction.peer.peer); - threeLines = did != 0; + threeLines = did != 0 || transaction.subscription || transaction.gift && transaction.peer instanceof TLRPC.TL_starsTransactionPeerFragment; titleTextViewParams.bottomMargin = threeLines ? 0 : dp(4.33f); subtitleTextView.setVisibility(threeLines ? View.VISIBLE : View.GONE); dateTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, threeLines ? 13 : 14); @@ -1229,7 +1323,10 @@ public void set(TLRPC.StarsTransaction transaction, boolean bot, boolean divider if (did != 0) { boolean deleted = false; String username; - if (did >= 0) { + if (UserObject.isService(did)) { + username = getString(R.string.StarsTransactionUnknown); + imageView.setImageDrawable(getPlatformDrawable("fragment")); + } else if (did >= 0) { TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(did); deleted = user == null; if (transaction.photo == null) { @@ -1246,7 +1343,25 @@ public void set(TLRPC.StarsTransaction transaction, boolean bot, boolean divider } username = chat == null ? "" : chat.title; } - if (!transaction.extended_media.isEmpty()) { + if (transaction.subscription) { + titleTextView.setText(username); + if (transaction.subscription_period == StarsController.PERIOD_MONTHLY) { + subtitleTextView.setVisibility(VISIBLE); + subtitleTextView.setText(getString(R.string.StarsTransactionSubscriptionMonthly)); + } else { + final String period = transaction.subscription_period == StarsController.PERIOD_5MINUTES ? "5 minutes" : "Minute"; + subtitleTextView.setVisibility(VISIBLE); + subtitleTextView.setText(String.format(Locale.US, "%s subscription fee", period)); + } + } else if (transaction.gift) { + titleTextView.setText(LocaleController.getString(R.string.StarsGiftReceived)); + subtitleTextView.setVisibility(deleted ? GONE : VISIBLE); + subtitleTextView.setText(username); + } else if (transaction.reaction) { + titleTextView.setText(LocaleController.getString(R.string.StarsReactionsSent)); + subtitleTextView.setVisibility(deleted ? GONE : VISIBLE); + subtitleTextView.setText(username); + } else if (!transaction.extended_media.isEmpty()) { if (bot) { titleTextView.setText(username); subtitleTextView.setVisibility(VISIBLE); @@ -1294,7 +1409,13 @@ public void set(TLRPC.StarsTransaction transaction, boolean bot, boolean divider titleTextView.setText(getString(R.string.StarsTransactionInApp)); imageView.setImageDrawable(getPlatformDrawable("android")); } else if (transaction.peer instanceof TLRPC.TL_starsTransactionPeerFragment) { - titleTextView.setText(getString(bot ? R.string.StarsTransactionWithdrawFragment : R.string.StarsTransactionFragment)); + if (transaction.gift) { + titleTextView.setText(LocaleController.getString(R.string.StarsGiftReceived)); + subtitleTextView.setText(getString(R.string.StarsTransactionUnknown)); + subtitleTextView.setVisibility(VISIBLE); + } else { + titleTextView.setText(getString(bot ? R.string.StarsTransactionWithdrawFragment : R.string.StarsTransactionFragment)); + } imageView.setImageDrawable(getPlatformDrawable("fragment")); } else if (transaction.peer instanceof TLRPC.TL_starsTransactionPeerPremiumBot) { titleTextView.setText(getString(R.string.StarsTransactionBot)); @@ -1325,6 +1446,10 @@ public void set(TLRPC.StarsTransaction transaction, boolean bot, boolean divider setWillNotDraw(!(needDivider = divider)); } + public void setLoading() { + + } + @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); @@ -1353,7 +1478,8 @@ public StarsTransactionView createView(Context context, int currentAccount, int @Override public void bindView(View view, UItem item, boolean divider) { - ((StarsTransactionView) view).set((TLRPC.StarsTransaction) item.object, item.accent, divider); + StarsTransactionView transactionView = (StarsTransactionView) view; + transactionView.set((TLRPC.StarsTransaction) item.object, item.accent, divider); } public static UItem asTransaction(TLRPC.StarsTransaction transaction, boolean bot) { @@ -1362,6 +1488,160 @@ public static UItem asTransaction(TLRPC.StarsTransaction transaction, boolean bo item.accent = bot; return item; } + + public static UItem asLoading() { + UItem item = UItem.ofFactory(StarsTransactionView.Factory.class); + item.accent = true; + return item; + } + } + } + + public static class StarsSubscriptionView extends LinearLayout { + + private final int currentAccount; + private final Theme.ResourcesProvider resourcesProvider; + + public final BackupImageView imageView; + public final LinearLayout textLayout; + public final SimpleTextView titleView; + public final TextView subtitleView; + public final LinearLayout priceLayout; + public final TextView priceTitleView; + public final TextView priceSubtitleView; + + private boolean needDivider; + + public StarsSubscriptionView(Context context, int currentAccount, Theme.ResourcesProvider resourcesProvider) { + super(context); + + this.currentAccount = currentAccount; + this.resourcesProvider = resourcesProvider; + setOrientation(HORIZONTAL); + + imageView = new BackupImageView(context); + imageView.setRoundRadius(dp(46)); + addView(imageView, LayoutHelper.createLinear(46, 46, 0, Gravity.CENTER_VERTICAL | Gravity.LEFT, 13, 0, 13, 0)); + + textLayout = new LinearLayout(context); + textLayout.setOrientation(VERTICAL); + addView(textLayout, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 1, Gravity.CENTER_VERTICAL, 0, 0, 0, 0)); + + titleView = new SimpleTextView(context); + titleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); + titleView.setTextSize(16); + titleView.setTypeface(AndroidUtilities.bold()); + textLayout.addView(titleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 0, 0, 2)); + + subtitleView = new TextView(context); + subtitleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2, resourcesProvider)); + subtitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textLayout.addView(subtitleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 0, 0, 0)); + + priceLayout = new LinearLayout(context); + priceLayout.setOrientation(VERTICAL); + addView(priceLayout, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, 0, Gravity.CENTER_VERTICAL, 0, 0, 18, 0)); + + priceTitleView = new TextView(context); + priceTitleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); + priceTitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + priceTitleView.setTypeface(AndroidUtilities.bold()); + priceTitleView.setGravity(Gravity.RIGHT); + priceLayout.addView(priceTitleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.RIGHT, 0, 0, 0, 1)); + + priceSubtitleView = new TextView(context); + priceSubtitleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2, resourcesProvider)); + priceSubtitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + priceSubtitleView.setGravity(Gravity.RIGHT); + priceLayout.addView(priceSubtitleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.RIGHT, 0, 0, 0, 0)); + } + + public void set(TLRPC.StarsSubscription subscription, boolean divider) { + long dialogId = DialogObject.getPeerDialogId(subscription.peer); + + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-dialogId); + if (chat == null) return; + + AvatarDrawable avatarDrawable = new AvatarDrawable(); + avatarDrawable.setInfo(chat); + imageView.setForUserOrChat(chat, avatarDrawable); + + long now = ConnectionsManager.getInstance(currentAccount).getCurrentTime(); + titleView.setText(chat.title); + if (subscription.canceled) { + subtitleView.setText(formatString(subscription.until_date < now ? R.string.StarsSubscriptionExpired : R.string.StarsSubscriptionExpires, LocaleController.formatDateChat(subscription.until_date))); + priceTitleView.setVisibility(View.GONE); + priceSubtitleView.setTextColor(Theme.getColor(Theme.key_color_red, resourcesProvider)); + priceSubtitleView.setText(LocaleController.getString(R.string.StarsSubscriptionStatusCancelled)); + } else if (subscription.until_date < now) { + subtitleView.setText(formatString(R.string.StarsSubscriptionExpired, LocaleController.formatDateChat(subscription.until_date))); + priceTitleView.setVisibility(View.GONE); + priceSubtitleView.setTextColor(Theme.getColor(Theme.key_color_red, resourcesProvider)); + priceSubtitleView.setText(LocaleController.getString(R.string.StarsSubscriptionStatusExpired)); + } else { + subtitleView.setText(formatString(R.string.StarsSubscriptionRenews, LocaleController.formatDateChat(subscription.until_date))); + priceTitleView.setVisibility(View.VISIBLE); + priceTitleView.setText(replaceStarsWithPlain("⭐️ " + Long.toString(subscription.pricing.amount), .8f)); + priceSubtitleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2, resourcesProvider)); + if (subscription.pricing.period == StarsController.PERIOD_MONTHLY) { + priceSubtitleView.setText(getString(R.string.StarsParticipantSubscriptionPerMonth)); + } else if (subscription.pricing.period == StarsController.PERIOD_MINUTE) { + priceSubtitleView.setText("per minute"); + } else if (subscription.pricing.period == StarsController.PERIOD_5MINUTES) { + priceSubtitleView.setText("per 5 minutes"); + } + } + + setWillNotDraw(!(needDivider = divider)); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure( + MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(dp(58), MeasureSpec.EXACTLY) + ); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + if (needDivider) { + canvas.drawRect(dp(72), getMeasuredHeight() - 1, getMeasuredWidth(), getMeasuredHeight(), Theme.dividerPaint); + } + } + + public static class Factory extends UItem.UItemFactory<StarsSubscriptionView> { + @Override + public StarsSubscriptionView createView(Context context, int currentAccount, int classGuid, Theme.ResourcesProvider resourcesProvider) { + StarsSubscriptionView cached = getCached(); + if (cached != null) { + return cached; + } + return new StarsSubscriptionView(context, currentAccount, resourcesProvider); + } + + @Override + public void bindView(View view, UItem item, boolean divider) { + StarsSubscriptionView subscriptionView = (StarsSubscriptionView) view; + subscriptionView.set((TLRPC.StarsSubscription) item.object, divider); + } + + public static UItem asSubscription(TLRPC.StarsSubscription subscription) { + UItem item = UItem.ofFactory(StarsSubscriptionView.Factory.class); + item.object = subscription; + return item; + } + + @Override + public boolean equals(UItem a, UItem b) { + if (a == null && b == null) return true; + if (a == null || b == null) return false; + if (!(a.object instanceof TLRPC.StarsSubscription) || !(b.object instanceof TLRPC.StarsSubscription)) return false; + TLRPC.StarsSubscription subA = (TLRPC.StarsSubscription) a.object; + TLRPC.StarsSubscription subB = (TLRPC.StarsSubscription) b.object; + return TextUtils.equals(subA.id, subB.id); + } } } @@ -1492,12 +1772,22 @@ protected void onDetachedFromWindow() { if (messageObject.messageOwner != null && messageObject.messageOwner.fwd_from != null && messageObject.messageOwner.fwd_from.from_id != null) { did = DialogObject.getPeerDialogId(messageObject.messageOwner.fwd_from.from_id); } + if (did < 0 && messageObject.getFromChatId() > 0) { + final TLRPC.User _user = MessagesController.getInstance(currentAccount).getUser(messageObject.getFromChatId()); + if (_user != null && _user.bot) { + did = _user.id; + } + } final String chatTitle; + final boolean isBot; if (did >= 0) { - chatTitle = UserObject.getUserName(MessagesController.getInstance(currentAccount).getUser(did)); + final TLRPC.User _user = MessagesController.getInstance(currentAccount).getUser(did); + chatTitle = UserObject.getUserName(_user); + isBot = _user != null && _user.bot; } else { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did); chatTitle = chat == null ? "" : chat.title; + isBot = false; } int photosCount = 0, videosCount = 0; @@ -1518,11 +1808,11 @@ protected void onDetachedFromWindow() { String c; if (videosCount == 0) { - c = formatPluralString("StarsConfirmPurchaseMediaOne2", (int) stars, photosCount == 1 ? getString(R.string.StarsConfirmPurchaseMedia_SinglePhoto) : formatPluralString("StarsConfirmPurchaseMedia_Photos", photosCount), chatTitle); + c = formatPluralString(isBot ? "StarsConfirmPurchaseMediaBotOne2" : "StarsConfirmPurchaseMediaOne2", (int) stars, photosCount == 1 ? getString(R.string.StarsConfirmPurchaseMedia_SinglePhoto) : formatPluralString("StarsConfirmPurchaseMedia_Photos", photosCount), chatTitle); } else if (photosCount == 0) { - c = formatPluralString("StarsConfirmPurchaseMediaOne2", (int) stars, videosCount == 1 ? getString(R.string.StarsConfirmPurchaseMedia_SingleVideo) : formatPluralString("StarsConfirmPurchaseMedia_Videos", videosCount), chatTitle); + c = formatPluralString(isBot ? "StarsConfirmPurchaseMediaBotOne2" : "StarsConfirmPurchaseMediaOne2", (int) stars, videosCount == 1 ? getString(R.string.StarsConfirmPurchaseMedia_SingleVideo) : formatPluralString("StarsConfirmPurchaseMedia_Videos", videosCount), chatTitle); } else { - c = formatPluralString("StarsConfirmPurchaseMediaTwo2", (int) stars, photosCount == 1 ? getString(R.string.StarsConfirmPurchaseMedia_SinglePhoto) : formatPluralString("StarsConfirmPurchaseMedia_Photos", photosCount), videosCount == 1 ? getString(R.string.StarsConfirmPurchaseMedia_SingleVideo) : formatPluralString("StarsConfirmPurchaseMedia_Videos", videosCount), chatTitle); + c = formatPluralString(isBot ? "StarsConfirmPurchaseMediaBotTwo2" : "StarsConfirmPurchaseMediaTwo2", (int) stars, photosCount == 1 ? getString(R.string.StarsConfirmPurchaseMedia_SinglePhoto) : formatPluralString("StarsConfirmPurchaseMedia_Photos", photosCount), videosCount == 1 ? getString(R.string.StarsConfirmPurchaseMedia_SingleVideo) : formatPluralString("StarsConfirmPurchaseMedia_Videos", videosCount), chatTitle); } subtitleView.setText(AndroidUtilities.replaceTags(c)); } else { @@ -1568,6 +1858,152 @@ protected void onDetachedFromWindow() { return sheet; } + public static BottomSheet openStarsChannelInviteSheet( + Context context, + Theme.ResourcesProvider resourcesProvider, + int currentAccount, + TLRPC.ChatInvite chatInvite, + Utilities.Callback<Utilities.Callback<Boolean>> whenConfirmed, + Runnable whenDismissed + ) { + BottomSheet.Builder b = new BottomSheet.Builder(context, false, resourcesProvider); + + LinearLayout linearLayout = new LinearLayout(context); + linearLayout.setOrientation(LinearLayout.VERTICAL); + linearLayout.setPadding(dp(16), 0, dp(16), dp(8)); + + FrameLayout topView = new FrameLayout(context); + topView.addView(makeParticlesView(context, 40, 0), LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + + BackupImageView imageView = new BackupImageView(context); + imageView.setRoundRadius(dp(80)); + AvatarDrawable avatarDrawable = new AvatarDrawable(); + avatarDrawable.setPeerColor(chatInvite.color); + avatarDrawable.setText(chatInvite.title); + if (chatInvite.photo != null) { + TLRPC.PhotoSize photoSize = FileLoader.getClosestPhotoSizeWithSize(chatInvite.photo.sizes, dp(80)); + imageView.setImage(ImageLocation.getForPhoto(photoSize, chatInvite.photo), "80_80", avatarDrawable, chatInvite); + } else { + imageView.setImageDrawable(avatarDrawable); + } + + topView.addView(imageView, LayoutHelper.createFrame(80, 80, Gravity.CENTER)); + + Drawable starBg = context.getResources().getDrawable(R.drawable.star_small_outline); + starBg.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_dialogBackground, resourcesProvider), PorterDuff.Mode.SRC_IN)); + Drawable starFg = context.getResources().getDrawable(R.drawable.star_small_inner); + + ImageView starBgView = new ImageView(context); + starBgView.setImageDrawable(starBg); + topView.addView(starBgView, LayoutHelper.createFrame(26, 26, Gravity.CENTER)); + starBgView.setTranslationX(dp(26)); + starBgView.setTranslationY(dp(26)); + starBgView.setScaleX(1.2f); + starBgView.setScaleY(1.2f); + + ImageView starFgView = new ImageView(context); + starFgView.setImageDrawable(starFg); + topView.addView(starFgView, LayoutHelper.createFrame(26, 26, Gravity.CENTER)); + starFgView.setTranslationX(dp(26)); + starFgView.setTranslationY(dp(26)); + + StarsBalanceView balanceView = new StarsBalanceView(context, currentAccount); + ScaleStateListAnimator.apply(balanceView); + balanceView.setOnClickListener(v -> { + if (balanceView.lastBalance <= 0) return; + BaseFragment lastFragment = LaunchActivity.getLastFragment(); + if (lastFragment != null) { + BaseFragment.BottomSheetParams bottomSheetParams = new BaseFragment.BottomSheetParams(); + bottomSheetParams.transitionFromLeft = true; + bottomSheetParams.allowNestedScroll = false; + lastFragment.showAsSheet(new StarsIntroActivity(), bottomSheetParams); + } + }); + topView.addView(balanceView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.RIGHT, 0, 0, -8, 0)); + + linearLayout.addView(topView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 117, Gravity.FILL_HORIZONTAL)); + + TextView titleView = new TextView(context); + titleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20); + titleView.setTypeface(AndroidUtilities.bold()); + titleView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, resourcesProvider)); + titleView.setText(getString(R.string.StarsSubscribeTitle)); + titleView.setGravity(Gravity.CENTER); + linearLayout.addView(titleView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL, 0, 8, 0, 0)); + + TextView subtitleView = new TextView(context); + subtitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + subtitleView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, resourcesProvider)); + if (chatInvite.subscription_pricing.period == StarsController.PERIOD_MONTHLY) { + subtitleView.setText(AndroidUtilities.replaceTags(formatPluralString("StarsSubscribeText", (int) chatInvite.subscription_pricing.amount, chatInvite.title))); + } else { + final String period = chatInvite.subscription_pricing.period == StarsController.PERIOD_5MINUTES ? "5 minutes" : "a minute"; + subtitleView.setText(AndroidUtilities.replaceTags(formatPluralString("StarsSubscribeTextTest", (int) chatInvite.subscription_pricing.amount, chatInvite.title, period))); + } + subtitleView.setMaxWidth(HintView2.cutInFancyHalf(subtitleView.getText(), subtitleView.getPaint())); + subtitleView.setGravity(Gravity.CENTER); + linearLayout.addView(subtitleView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL, 0, 6, 0, 22)); + + if (!TextUtils.isEmpty(chatInvite.about)) { + TextView aboutView = new TextView(context); + aboutView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + aboutView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, resourcesProvider)); + aboutView.setText(Emoji.replaceEmoji(chatInvite.about, aboutView.getPaint().getFontMetricsInt(), false)); + aboutView.setGravity(Gravity.CENTER); + linearLayout.addView(aboutView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL, 0, 6, 0, 22)); + } + + ButtonWithCounterView button = new ButtonWithCounterView(context, resourcesProvider); + button.setText(getString(R.string.StarsSubscribeButton), false); + linearLayout.addView(button, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48)); + + LinkSpanDrawable.LinksTextView infoTextView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + infoTextView.setText(AndroidUtilities.replaceSingleTag(getString(R.string.StarsSubscribeInfo), () -> { + Browser.openUrl(context, getString(R.string.StarsSubscribeInfoLink)); + })); + infoTextView.setGravity(Gravity.CENTER); + infoTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + infoTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText4, resourcesProvider)); + infoTextView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + linearLayout.addView(infoTextView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL | Gravity.TOP, 14, 14, 14, 6)); + + b.setCustomView(linearLayout); + BottomSheet sheet = b.create(); + + button.setOnClickListener(v -> { + if (whenConfirmed != null) { + sheet.setCanDismissWithSwipe(false); + button.setLoading(true); + whenConfirmed.run(close -> { + if (close) { + sheet.dismiss(); + } else { + AndroidUtilities.runOnUIThread(() -> { + sheet.setCanDismissWithSwipe(false); + button.setLoading(false); + }, 400); + } + }); + } else { + sheet.dismiss(); + } + }); + sheet.setOnDismissListener(d -> { + if (whenDismissed != null) { + whenDismissed.run(); + } + }); + + sheet.fixNavigationBar(Theme.getColor(Theme.key_dialogBackground, resourcesProvider)); + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (!AndroidUtilities.isTablet() && lastFragment != null && !AndroidUtilities.hasDialogOnTop(lastFragment)) { + sheet.makeAttached(lastFragment); + } + + sheet.show(); + return sheet; + } + public static class StarsNeededSheet extends BottomSheetWithRecyclerListView implements NotificationCenter.NotificationCenterDelegate { private final long starsNeeded; @@ -1599,6 +2035,14 @@ public void didReceivedNotification(int id, int account, Object... args) { @Override public void show() { + long balance = StarsController.getInstance(currentAccount).getBalance(); + if (balance >= starsNeeded) { + if (whenPurchased != null) { + whenPurchased.run(); + whenPurchased = null; + } + return; + } BaseFragment lastFragment = LaunchActivity.getLastFragment(); if (lastFragment instanceof ChatActivity) { ChatActivity chatActivity = (ChatActivity) lastFragment; @@ -1616,11 +2060,18 @@ public void dismissInternal() { NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.starBalanceUpdated); } + public static final int TYPE_BOT = 0; + public static final int TYPE_SUBSCRIPTION_BUY = 1; + public static final int TYPE_SUBSCRIPTION_KEEP = 2; + public static final int TYPE_SUBSCRIPTION_REFULFIL = 3; + public static final int TYPE_LINK = 4; + public static final int TYPE_REACTIONS = 5; + public StarsNeededSheet( Context context, Theme.ResourcesProvider resourcesProvider, long starsNeeded, - String botName, + int type, String botName, Runnable whenPurchased ) { super(context, null, false, false, false, resourcesProvider); @@ -1651,9 +2102,34 @@ public StarsNeededSheet( headerView = new HeaderView(context, currentAccount, resourcesProvider); long balance = StarsController.getInstance(currentAccount).getBalance(); - headerView.titleView.setText(formatPluralString("StarsNeededTitle", (int) (starsNeeded - balance))); - headerView.subtitleView.setText(AndroidUtilities.replaceTags(formatString(R.string.StarsNeededText, botName))); - headerView.subtitleView.setMaxWidth(HintView2.cutInFancyHalf(headerView.subtitleView.getText(), headerView.subtitleView.getPaint())); + headerView.titleView.setText(formatPluralString("StarsNeededTitle", (int) Math.max(0, starsNeeded - balance))); + String stringRes; + if (type == TYPE_SUBSCRIPTION_BUY) { + stringRes = "StarsNeededTextBuySubscription"; + } else if (type == TYPE_SUBSCRIPTION_KEEP) { + stringRes = "StarsNeededTextKeepSubscription"; + } else if (type == TYPE_SUBSCRIPTION_REFULFIL) { + stringRes = "StarsNeededTextKeepSubscription"; + } else if (type == TYPE_LINK) { + stringRes = botName == null ? "StarsNeededTextLink" : "StarsNeededTextLink_" + botName.toLowerCase(); + if (LocaleController.nullable(LocaleController.getString(stringRes)) == null) { + stringRes = "StarsNeededTextLink"; + } + } else if (type == TYPE_REACTIONS) { + stringRes = "StarsNeededTextReactions"; + } else { + stringRes = "StarsNeededText"; + } + if (TextUtils.isEmpty(stringRes)) { + headerView.subtitleView.setText(""); + } else { + String str = LocaleController.nullable(formatString(stringRes, LocaleController.getStringResId(stringRes), botName)); + if (str == null) { + str = getString(stringRes); + } + headerView.subtitleView.setText(AndroidUtilities.replaceTags(str)); + headerView.subtitleView.setMaxWidth(HintView2.cutInFancyHalf(headerView.subtitleView.getText(), headerView.subtitleView.getPaint())); + } actionBar.setTitle(getTitle()); footerView = new FrameLayout(context); @@ -1707,7 +2183,7 @@ public void fillItems(ArrayList<UItem> items, UniversalAdapter adapter) { if (option.stars < starsNeeded) { continue; } - if (option.collapsed && !expanded && shownNearest) { + if (option.extended && !expanded && shownNearest) { hidden++; continue; } @@ -1715,7 +2191,31 @@ public void fillItems(ArrayList<UItem> items, UniversalAdapter adapter) { shownNearest = true; count++; } - if (count > 0) { + if (count < 3) { + items.clear(); + items.add(UItem.asCustom(headerView)); + items.add(UItem.asHeader(getString(R.string.TelegramStarsChoose))); + count = 0; + for (int id = 0; id < options.size(); ++id) { + TLRPC.TL_starsTopupOption option = options.get(id); + if (option.stars < starsNeeded) { + continue; + } + items.add(StarTierView.Factory.asStarTier(id, stars++, option)); + count++; + } + if (count == 0) { + for (int id = 0; id < options.size(); ++id) { + TLRPC.TL_starsTopupOption option = options.get(id); + items.add(StarTierView.Factory.asStarTier(id, stars++, option)); + count++; + } + if (!expanded) + items.add(ExpandView.Factory.asExpand(BUTTON_EXPAND, getString(expanded ? R.string.NotifyLessOptions : R.string.NotifyMoreOptions), !expanded).accent()); + } else { + expanded = true; + } + } else if (count > 0) { if (!expanded && hidden > 0) items.add(ExpandView.Factory.asExpand(BUTTON_EXPAND, getString(expanded ? R.string.NotifyLessOptions : R.string.NotifyMoreOptions), !expanded).accent()); } else { @@ -1748,8 +2248,7 @@ public void onItemClick(UItem item, UniversalAdapter adapter) { StarsController.getInstance(currentAccount).buy(activity, (TLRPC.TL_starsTopupOption) item.object, (success, error) -> { if (getContext() == null) return; if (success) { - Drawable starDrawable = getContext().getResources().getDrawable(R.drawable.star_small_inner).mutate(); - BulletinFactory.of((FrameLayout) containerView, resourcesProvider).createSimpleBulletin(starDrawable, getString(R.string.StarsAcquired), AndroidUtilities.replaceTags(formatPluralString("StarsAcquiredInfo", (int) item.longValue))).show(); + BulletinFactory.of((FrameLayout) containerView, resourcesProvider).createSimpleBulletin(R.raw.stars_topup, getString(R.string.StarsAcquired), AndroidUtilities.replaceTags(formatPluralString("StarsAcquiredInfo", (int) item.longValue))).show(); fireworksOverlay.start(true); StarsController.getInstance(currentAccount).invalidateTransactions(true); } else if (error != null) { @@ -1827,21 +2326,276 @@ public HeaderView(Context context, int currentAccount, Theme.ResourcesProvider r } } - public static SpannableStringBuilder replaceStars(CharSequence cs) { - return replaceStars(cs, 1.13f); - } + public static class GiftStarsSheet extends BottomSheetWithRecyclerListView implements NotificationCenter.NotificationCenterDelegate { - public static SpannableStringBuilder replaceStars(CharSequence cs, final float scale) { - if (cs == null) return null; - SpannableStringBuilder ssb; - if (!(cs instanceof SpannableStringBuilder)) { - ssb = new SpannableStringBuilder(cs); - } else { - ssb = (SpannableStringBuilder) cs; - } - SpannableString spacedStar = new SpannableString("⭐ "); - ColoredImageSpan span = new ColoredImageSpan(R.drawable.msg_premium_liststar); - span.setScale(scale, scale); + private final HeaderView headerView; + private final FrameLayout footerView; + private final FireworksOverlay fireworksOverlay; + private final TLRPC.User user; + private final Runnable whenPurchased; + + @Override + public void didReceivedNotification(int id, int account, Object... args) { + if (id == NotificationCenter.starGiftOptionsLoaded || id == NotificationCenter.starBalanceUpdated) { + if (adapter != null) { + adapter.update(true); + } + } + } + + @Override + public void show() { + BaseFragment lastFragment = LaunchActivity.getLastFragment(); + if (lastFragment instanceof ChatActivity) { + ChatActivity chatActivity = (ChatActivity) lastFragment; + if (chatActivity.isKeyboardVisible() && chatActivity.getChatActivityEnterView() != null) { + chatActivity.getChatActivityEnterView().closeKeyboard(); + } + } + super.show(); + } + + @Override + public void dismissInternal() { + super.dismissInternal(); + NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.starGiftOptionsLoaded); + NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.starBalanceUpdated); + } + + public GiftStarsSheet( + Context context, + Theme.ResourcesProvider resourcesProvider, + TLRPC.User user, + Runnable whenPurchased + ) { + super(context, null, false, false, false, resourcesProvider); + + this.user = user; + this.whenPurchased = whenPurchased; + topPadding = .2f; + + NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.starGiftOptionsLoaded); + NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.starBalanceUpdated); + + fixNavigationBar(); + recyclerListView.setPadding(backgroundPaddingLeft, 0, backgroundPaddingLeft, 0); + recyclerListView.setOnItemClickListener((view, position) -> { + if (adapter == null) return; + UItem item = adapter.getItem(position - 1); + if (item == null) return; + onItemClick(item, adapter); + }); + DefaultItemAnimator itemAnimator = new DefaultItemAnimator(); + itemAnimator.setSupportsChangeAnimations(false); + itemAnimator.setDelayAnimations(false); + itemAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + itemAnimator.setDurations(350); + recyclerListView.setItemAnimator(itemAnimator); + setBackgroundColor(Theme.getColor(Theme.key_dialogBackgroundGray, resourcesProvider)); + + headerView = new HeaderView(context, currentAccount, resourcesProvider); + +// long balance = StarsController.getInstance(currentAccount).getBalance(); + headerView.titleView.setText(getString(R.string.GiftStarsTitle)); + headerView.subtitleView.setText( + TextUtils.concat( + AndroidUtilities.replaceTags(formatString(R.string.GiftStarsSubtitle, UserObject.getForcedFirstName(user))), + " ", + AndroidUtilities.replaceArrows(AndroidUtilities.replaceSingleTag(getString(R.string.GiftStarsSubtitleLinkName).replace(' ', ' '), () -> { + StarAppsSheet sheet = new StarAppsSheet(getContext()); + if (!AndroidUtilities.isTablet() && !AndroidUtilities.hasDialogOnTop(attachedFragment) && attachedFragment != null) { + sheet.makeAttached(attachedFragment); + } + sheet.show(); + }), true) + ) + ); + headerView.subtitleView.setMaxWidth(HintView2.cutInFancyHalf(headerView.subtitleView.getText(), headerView.subtitleView.getPaint()) + 1); + actionBar.setTitle(getTitle()); + + AvatarDrawable avatarDrawable = new AvatarDrawable(); + avatarDrawable.setInfo(user); + headerView.avatarImageView.setForUserOrChat(user, avatarDrawable); + + footerView = new FrameLayout(context); + LinkSpanDrawable.LinksTextView footerTextView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + footerView.setPadding(0, dp(11), 0, dp(11)); + footerTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12); + footerTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText4, resourcesProvider)); + footerTextView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + footerTextView.setText(AndroidUtilities.replaceSingleTag(getString(R.string.StarsTOS), () -> { + Browser.openUrl(getContext(), getString(R.string.StarsTOSLink)); + })); + footerTextView.setGravity(Gravity.CENTER); + footerTextView.setMaxWidth(HintView2.cutInFancyHalf(footerTextView.getText(), footerTextView.getPaint())); + footerView.addView(footerTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.CENTER)); + footerView.setBackgroundColor(Theme.getColor(Theme.key_dialogBackground, resourcesProvider)); + + fireworksOverlay = new FireworksOverlay(getContext()); + containerView.addView(fireworksOverlay, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + + if (adapter != null) { + adapter.update(false); + } + } + + @Override + protected CharSequence getTitle() { + if (headerView == null) return null; + return headerView.titleView.getText(); + } + + private UniversalAdapter adapter; + @Override + protected RecyclerListView.SelectionAdapter createAdapter(RecyclerListView listView) { + return adapter = new UniversalAdapter(recyclerListView, getContext(), currentAccount, 0, true, this::fillItems, resourcesProvider); + } + + private boolean expanded; + private final int BUTTON_EXPAND = -1; + + public void fillItems(ArrayList<UItem> items, UniversalAdapter adapter) { + items.add(UItem.asCustom(headerView)); + items.add(UItem.asHeader(getString(R.string.TelegramStarsChoose))); + int stars = 1; + ArrayList<TLRPC.TL_starsGiftOption> options = StarsController.getInstance(currentAccount).getGiftOptions(); + if (options != null && !options.isEmpty()) { + int hidden = 0; + for (int id = 0; id < options.size(); ++id) { + TLRPC.TL_starsGiftOption option = options.get(id); + if (!expanded && option.extended) { + hidden++; + continue; + } + items.add(StarTierView.Factory.asStarTier(id, stars++, option)); + } + if (!expanded && hidden > 0) { + items.add(ExpandView.Factory.asExpand(BUTTON_EXPAND, getString(expanded ? R.string.NotifyLessOptions : R.string.NotifyMoreOptions), !expanded).accent()); + } + } else { + items.add(UItem.asFlicker(FlickerLoadingView.STAR_TIER)); + items.add(UItem.asFlicker(FlickerLoadingView.STAR_TIER)); + items.add(UItem.asFlicker(FlickerLoadingView.STAR_TIER)); + } + items.add(UItem.asCustom(footerView)); + } + + public void onItemClick(UItem item, UniversalAdapter adapter) { + if (item.id == BUTTON_EXPAND) { + expanded = !expanded; + adapter.update(true); + recyclerListView.smoothScrollBy(0, dp(200), CubicBezierInterpolator.EASE_OUT); + } else if (item.instanceOf(StarTierView.Factory.class)) { + if (item.object instanceof TLRPC.TL_starsGiftOption) { + Activity activity = AndroidUtilities.findActivity(getContext()); + if (activity == null) { + activity = LaunchActivity.instance; + } + if (activity == null) { + return; + } + final long userId = user.id; + StarsController.getInstance(currentAccount).buyGift(activity, (TLRPC.TL_starsGiftOption) item.object, userId, (success, error) -> { + if (getContext() == null) return; + if ((success || error != null) && whenPurchased != null) { + whenPurchased.run(); + } + dismiss(); + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + FireworksOverlay fireworksOverlay = LaunchActivity.instance.getFireworksOverlay(); + if (lastFragment == null) return; + if (success) { + BulletinFactory.of(lastFragment) + .createSimpleBulletin( + R.raw.stars_send, + getString(R.string.StarsGiftSentPopup), + AndroidUtilities.replaceTags(formatPluralString("StarsGiftSentPopupInfo", (int) item.longValue, UserObject.getForcedFirstName(user))), + getString(R.string.ViewInChat), + () -> { + BaseFragment lastFragment2 = LaunchActivity.getSafeLastFragment(); + if (lastFragment2 != null) { + lastFragment2.presentFragment(ChatActivity.of(userId)); + } + } + ) + .setDuration(Bulletin.DURATION_PROLONG) + .show(true); + if (fireworksOverlay != null) { + fireworksOverlay.start(true); + } + StarsController.getInstance(currentAccount).invalidateTransactions(true); + } else if (error != null) { + BulletinFactory.of(lastFragment).createSimpleBulletin(R.raw.error, LocaleController.formatString(R.string.UnknownErrorCode, error)).show(); + } + }); + } + } + } + + @Override + public void dismiss() { + super.dismiss(); +// if (headerView != null) { +// headerView.iconView.setPaused(true); +// } + } + + public static class HeaderView extends LinearLayout { + private final FrameLayout topView; + public final StarParticlesView particlesView; + public final BackupImageView avatarImageView; + public final TextView titleView; + public final LinkSpanDrawable.LinksTextView subtitleView; + + public HeaderView(Context context, int currentAccount, Theme.ResourcesProvider resourcesProvider) { + super(context); + + setOrientation(VERTICAL); + topView = new FrameLayout(context); + topView.setClipChildren(false); + topView.setClipToPadding(false); + + particlesView = makeParticlesView(context, 70, 0); + topView.addView(particlesView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + + avatarImageView = new BackupImageView(context); + avatarImageView.setRoundRadius(dp(50)); + topView.addView(avatarImageView, LayoutHelper.createFrame(100, 100, Gravity.CENTER, 0, 32, 0, 24)); + + addView(topView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 150)); + + titleView = new TextView(context); + titleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20); + titleView.setTypeface(AndroidUtilities.bold()); + titleView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, resourcesProvider)); + titleView.setGravity(Gravity.CENTER); + addView(titleView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL, 0, 2, 0, 0)); + + subtitleView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + subtitleView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + subtitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + subtitleView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, resourcesProvider)); + subtitleView.setGravity(Gravity.CENTER); + addView(subtitleView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL, 0, 9, 0, 18)); + } + } + } + + public static SpannableStringBuilder replaceStars(CharSequence cs) { + return replaceStars(cs, 1.13f); + } + + public static SpannableStringBuilder replaceStars(CharSequence cs, final float scale) { + if (cs == null) return null; + SpannableStringBuilder ssb; + if (!(cs instanceof SpannableStringBuilder)) { + ssb = new SpannableStringBuilder(cs); + } else { + ssb = (SpannableStringBuilder) cs; + } + SpannableString spacedStar = new SpannableString("⭐ "); + ColoredImageSpan span = new ColoredImageSpan(R.drawable.msg_premium_liststar); + span.setScale(scale, scale); spacedStar.setSpan(span, 0, spacedStar.length() - 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); AndroidUtilities.replaceMultipleCharSequence("⭐️", ssb, "⭐"); AndroidUtilities.replaceMultipleCharSequence("⭐ ", ssb, "⭐"); @@ -1851,7 +2605,6 @@ public static SpannableStringBuilder replaceStars(CharSequence cs, final float s return ssb; } - public static SpannableStringBuilder replaceStars(CharSequence cs, ColoredImageSpan[] spanRef) { if (cs == null) return null; SpannableStringBuilder ssb; @@ -1880,7 +2633,6 @@ public static SpannableStringBuilder replaceStars(CharSequence cs, ColoredImageS return ssb; } - public static SpannableStringBuilder replaceStarsWithPlain(CharSequence cs, float scale) { if (cs == null) return null; SpannableStringBuilder ssb; @@ -1902,10 +2654,28 @@ public static SpannableStringBuilder replaceStarsWithPlain(CharSequence cs, floa return ssb; } - public static CharSequence getTransactionTitle(boolean bot, TLRPC.StarsTransaction t) { + public static CharSequence getTransactionTitle(int currentAccount, boolean bot, TLRPC.StarsTransaction t) { if (!t.extended_media.isEmpty()) { return getString(R.string.StarMediaPurchase); } + if (t.subscription) { + if (t.subscription_period == StarsController.PERIOD_MONTHLY) { + return getString(R.string.StarSubscriptionPurchase); + } + if (t.subscription_period == StarsController.PERIOD_5MINUTES) { + return "5-minute subscription fee"; + } + if (t.subscription_period == StarsController.PERIOD_MINUTE) { + return "Minute subscription fee"; + } + } + if (t.gift) { + if (t.sent_by != null) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(DialogObject.getPeerDialogId(t.sent_by)); + return getString(UserObject.isUserSelf(user) ? R.string.StarsGiftSent : R.string.StarsGiftReceived); + } + return getString(R.string.StarsGiftReceived); + } if (t.title != null) { return t.title; } @@ -1926,6 +2696,36 @@ public static CharSequence getTransactionTitle(boolean bot, TLRPC.StarsTransacti } } + public static BottomSheet showTransactionSheet(Context context, int currentAccount, int date, TLRPC.Peer sent_by, TLRPC.Peer received_by, TLRPC.TL_messageActionGiftStars action, Theme.ResourcesProvider resourcesProvider) { + TLRPC.StarsTransaction t = new TLRPC.StarsTransaction(); + t.title = null; + t.description = null; + t.photo = null; + t.peer = new TLRPC.TL_starsTransactionPeer(); + t.peer.peer = sent_by; + t.date = date; + t.stars = action.stars; + t.id = action.transaction_id; + t.gift = true; + t.sent_by = sent_by; + t.received_by = received_by; + return showTransactionSheet(context, false, 0, currentAccount, t, resourcesProvider); + } + + public static BottomSheet showTransactionSheet(Context context, int currentAccount, int date, TLRPC.TL_messageActionPaymentRefunded action, Theme.ResourcesProvider resourcesProvider) { + TLRPC.StarsTransaction t = new TLRPC.StarsTransaction(); + t.title = null; + t.description = null; + t.photo = null; + t.peer = new TLRPC.TL_starsTransactionPeer(); + t.peer.peer = action.peer; + t.date = date; + t.stars = action.total_amount; + t.id = action.charge.id; + t.refund = true; + return showTransactionSheet(context, false, 0, currentAccount, t, resourcesProvider); + } + public static BottomSheet showTransactionSheet(Context context, boolean bot, int currentAccount, TLRPC.TL_payments_paymentReceiptStars receipt, Theme.ResourcesProvider resourcesProvider) { TLRPC.StarsTransaction t = new TLRPC.StarsTransaction(); t.title = receipt.title; @@ -1934,7 +2734,7 @@ public static BottomSheet showTransactionSheet(Context context, boolean bot, int t.peer = new TLRPC.TL_starsTransactionPeer(); t.peer.peer = MessagesController.getInstance(currentAccount).getPeer(receipt.bot_id); t.date = receipt.date; - t.stars = receipt.total_amount; + t.stars = -receipt.total_amount; t.id = receipt.transaction_id; return showTransactionSheet(context, bot, 0, currentAccount, t, resourcesProvider); } @@ -1948,10 +2748,82 @@ public static BottomSheet showTransactionSheet(Context context, boolean bot, lon LinearLayout linearLayout = new LinearLayout(context); linearLayout.setOrientation(LinearLayout.VERTICAL); - linearLayout.setPadding(dp(16), dp(16), dp(16), dp(8)); + linearLayout.setPadding(dp(16), dp(transaction.gift ? 0 : 20), dp(16), dp(8)); + linearLayout.setClipChildren(false); + linearLayout.setClipToPadding(false); BackupImageView imageView = new BackupImageView(context); - if (!transaction.extended_media.isEmpty()) { + if (transaction.gift) { + final boolean[] played = new boolean[1]; + Runnable setImage = () -> { + TLRPC.TL_messages_stickerSet set; + TLRPC.Document document = null; + + String packName = UserConfig.getInstance(currentAccount).premiumGiftsStickerPack; + if (packName == null) { + MediaDataController.getInstance(currentAccount).checkPremiumGiftStickers(); + return; + } + set = MediaDataController.getInstance(currentAccount).getStickerSetByName(packName); + if (set == null) { + set = MediaDataController.getInstance(currentAccount).getStickerSetByEmojiOrName(packName); + } + if (set != null) { + String emoji; + if (transaction.stars <= 1000) { + emoji = "2⃣"; + } else if (transaction.stars < 2500) { + emoji = "3⃣"; + } else { + emoji = "4⃣"; + } + for (int i = 0; i < set.packs.size(); ++i) { + TLRPC.TL_stickerPack pack = set.packs.get(i); + if (TextUtils.equals(pack.emoticon, emoji) && !pack.documents.isEmpty()) { + long documentId = pack.documents.get(0); + for (int j = 0; j < set.documents.size(); ++j) { + TLRPC.Document d = set.documents.get(j); + if (d != null && d.id == documentId) { + document = d; + break; + } + } + break; + } + } + if (document == null && !set.documents.isEmpty()) { + document = set.documents.get(0); + } + } + + final ImageReceiver imageReceiver = imageView.getImageReceiver(); + if (document != null) { + imageReceiver.setAllowStartLottieAnimation(true); + imageReceiver.setDelegate(new ImageReceiver.ImageReceiverDelegate() { + @Override + public void didSetImage(ImageReceiver imageReceiver, boolean set, boolean thumb, boolean memCache) { + if (set) { + RLottieDrawable drawable = imageReceiver.getLottieAnimation(); + if (drawable != null && !played[0]) { + drawable.setCurrentFrame(0, false); + AndroidUtilities.runOnUIThread(drawable::restart); + played[0] = true; + } + } + } + }); + SvgHelper.SvgDrawable svgThumb = DocumentObject.getSvgThumb(document, Theme.key_windowBackgroundGray, 0.3f); + imageReceiver.setAutoRepeat(0); + imageReceiver.setImage(ImageLocation.getForDocument(document), String.format(Locale.US, "%d_%d_nr", 160, 160), svgThumb, "tgs", set, 1); + } else { + MediaDataController.getInstance(currentAccount).loadStickersByEmojiOrName(packName, false, set == null); + } + }; + setImage.run(); + NotificationCenter.getInstance(currentAccount).listen(imageView, NotificationCenter.didUpdatePremiumGiftStickers, args -> setImage.run()); + NotificationCenter.getInstance(currentAccount).listen(imageView, NotificationCenter.diceStickersDidLoad, args -> setImage.run()); + linearLayout.addView(imageView, LayoutHelper.createLinear(160, 160, Gravity.CENTER, 0, -8, 0, 10)); + } else if (!transaction.extended_media.isEmpty()) { imageView.setRoundRadius(dp(30)); TLRPC.MessageMedia media = transaction.extended_media.get(0); ImageLocation location = null; @@ -2025,14 +2897,14 @@ public boolean validateGroupId(long groupId) { imageView.setImage(ImageLocation.getForWebFile(WebFile.createWithWebDocument(transaction.photo)), "100_100", null, 0, null); } else { imageView.setRoundRadius(dp(50)); - final long did = DialogObject.getPeerDialogId(transaction.peer.peer); + final long did = transaction.subscription && bot ? dialogId : DialogObject.getPeerDialogId(transaction.peer.peer); AvatarDrawable avatarDrawable = new AvatarDrawable(); if (did >= 0) { TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(did); avatarDrawable.setInfo(user); imageView.setForUserOrChat(user, avatarDrawable); } else { - TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(did); + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did); avatarDrawable.setInfo(chat); imageView.setForUserOrChat(chat, avatarDrawable); } @@ -2062,15 +2934,15 @@ public boolean validateGroupId(long groupId) { textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20); textView.setTypeface(AndroidUtilities.bold()); textView.setGravity(Gravity.CENTER); - textView.setText(getTransactionTitle(bot, transaction)); + textView.setText(getTransactionTitle(currentAccount, bot, transaction)); linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 20, 0, 20, 4)); textView = new TextView(context); - textView.setTextColor(Theme.getColor(transaction.stars >= 0 ? Theme.key_color_green : Theme.key_color_red, resourcesProvider)); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18); textView.setTypeface(AndroidUtilities.bold()); textView.setGravity(Gravity.CENTER); - textView.setText(replaceStarsWithPlain((transaction.stars >= 0 ? "+" : "-") + LocaleController.formatNumber((int) Math.abs(transaction.stars), ' ') + " ⭐️", .8f)); + textView.setTextColor(Theme.getColor(transaction.stars >= 0 ? Theme.key_color_green : Theme.key_color_red, resourcesProvider)); + textView.setText(replaceStarsWithPlain((transaction.stars >= 0 ? "+" : "-") + LocaleController.formatNumber((int) Math.abs(transaction.stars), ' ') + " ⭐️", .8f)); SpannableStringBuilder s = new SpannableStringBuilder(textView.getText()); if (transaction.refund) { appendStatus(s, textView, getString(R.string.StarsRefunded)); @@ -2084,7 +2956,35 @@ public boolean validateGroupId(long groupId) { textView.setText(s); linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 20, 0, 20, 4)); - if (transaction.description != null && transaction.extended_media.isEmpty()) { + if (transaction.gift) { + final TLRPC.User user = transaction.sent_by == null ? null : MessagesController.getInstance(currentAccount).getUser(DialogObject.getPeerDialogId(transaction.sent_by)); + final TLRPC.User received = transaction.sent_by == null ? null : MessagesController.getInstance(currentAccount).getUser(DialogObject.getPeerDialogId(transaction.received_by)); + final boolean self = UserObject.isUserSelf(user); + + if (self) { + textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); + textView.setText(replaceStarsWithPlain(LocaleController.formatNumber((int) Math.abs(transaction.stars), ' ') + " ⭐️", .8f)); + } + + textView = new LinkSpanDrawable.LinksTextView(context); + textView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + textView.setGravity(Gravity.CENTER); + textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + ((LinkSpanDrawable.LinksTextView) textView).setDisablePaddingsOffsetY(true); + textView.setText(TextUtils.concat( + AndroidUtilities.replaceTags(self ? formatString(R.string.ActionGiftStarsSubtitle, UserObject.getForcedFirstName(received)) : getString(R.string.ActionGiftStarsSubtitleYou)), + " ", + AndroidUtilities.replaceArrows(AndroidUtilities.replaceSingleTag(getString(R.string.GiftStarsSubtitleLinkName).replace(' ', ' '), () -> { + StarAppsSheet sheet1 = new StarAppsSheet(context); + if (!AndroidUtilities.isTablet() && !AndroidUtilities.hasDialogOnTop(sheet[0].attachedFragment) && sheet[0] != null && sheet[0].attachedFragment != null) { + sheet1.makeAttached(sheet[0].attachedFragment); + } + sheet1.show(); + }), true) + )); + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 20, 0, 20, 4)); + } else if (transaction.description != null && transaction.extended_media.isEmpty()) { textView = new TextView(context); textView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, resourcesProvider)); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); @@ -2102,16 +3002,27 @@ public boolean validateGroupId(long groupId) { textView.setTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setSingleLine(true); ((LinkSpanDrawable.LinksTextView) textView).setDisablePaddingsOffsetY(true); AvatarSpan avatarSpan = new AvatarSpan(textView, currentAccount, 24); CharSequence username; boolean deleted = false; - if (did >= 0) { + final boolean unknown; + if (UserObject.isService(did)) { + deleted = false; + unknown = true; + username = getString(R.string.StarsTransactionUnknown); + CombinedDrawable iconDrawable = getPlatformDrawable("fragment"); + iconDrawable.setIconSize(dp(16), dp(16)); + avatarSpan.setImageDrawable(iconDrawable); + } else if (did >= 0) { + unknown = false; TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(did); deleted = user == null; username = UserObject.getUserName(user); avatarSpan.setUser(user); } else { + unknown = false; TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did); deleted = chat == null; username = chat == null ? "" : chat.title; @@ -2123,9 +3034,13 @@ public boolean validateGroupId(long groupId) { @Override public void onClick(@NonNull View widget) { sheet[0].dismiss(); - BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); - if (lastFragment != null) { - lastFragment.presentFragment(ChatActivity.of(did)); + if (unknown) { + Browser.openUrl(context, getString(R.string.StarsTransactionUnknownLink)); + } else { + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment != null) { + lastFragment.presentFragment(ChatActivity.of(did)); + } } } @@ -2136,10 +3051,42 @@ public void updateDrawState(@NonNull TextPaint ds) { }, 3, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(ssb); if (!deleted) { - tableView.addRowUnpadded(getString(R.string.StarsTransactionRecipient), textView); + tableView.addRowUnpadded(getString(transaction.subscription && !bot ? R.string.StarSubscriptionTo : R.string.StarsTransactionRecipient), textView); } } else if (transaction.peer instanceof TLRPC.TL_starsTransactionPeerFragment) { - tableView.addRow(getString(R.string.StarsTransactionSource), getString(R.string.Fragment)); + if (transaction.gift) { + textView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + textView.setPadding(dp(12.66f), dp(9.33f), dp(12.66f), dp(9.33f)); + textView.setEllipsize(TextUtils.TruncateAt.END); + textView.setTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setSingleLine(true); + ((LinkSpanDrawable.LinksTextView) textView).setDisablePaddingsOffsetY(true); + AvatarSpan avatarSpan = new AvatarSpan(textView, currentAccount, 24); + CharSequence username = getString(R.string.StarsTransactionUnknown); + CombinedDrawable iconDrawable = getPlatformDrawable("fragment", 24); + iconDrawable.setIconSize(dp(16), dp(16)); + avatarSpan.setImageDrawable(iconDrawable); + SpannableStringBuilder ssb = new SpannableStringBuilder("x " + username); + ssb.setSpan(avatarSpan, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ssb.setSpan(new ClickableSpan() { + @Override + public void onClick(@NonNull View widget) { + sheet[0].dismiss(); + Browser.openUrl(context, getString(R.string.StarsTransactionUnknownLink)); + } + + @Override + public void updateDrawState(@NonNull TextPaint ds) { + ds.setUnderlineText(false); + } + }, 3, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + textView.setText(ssb); + tableView.addRowUnpadded(getString(R.string.StarsTransactionRecipient), textView); + } else { + tableView.addRow(getString(R.string.StarsTransactionSource), getString(R.string.Fragment)); + } } else if (transaction.peer instanceof TLRPC.TL_starsTransactionPeerAppStore) { tableView.addRow(getString(R.string.StarsTransactionSource), getString(R.string.AppStore)); } else if (transaction.peer instanceof TLRPC.TL_starsTransactionPeerPlayMarket) { @@ -2219,7 +3166,7 @@ public void updateDrawState(@NonNull TextPaint ds) { textView.setEllipsize(TextUtils.TruncateAt.END); textView.setText(ssb); textView.setOnClickListener(v -> open.run()); - tableView.addRowUnpadded(getString(R.string.StarsTransactionMedia), textView); + tableView.addRowUnpadded(getString(transaction.reaction ? R.string.StarsTransactionMessage : R.string.StarsTransactionMedia), textView); } } @@ -2276,6 +3223,7 @@ public void updateDrawState(@NonNull TextPaint ds) { b.setCustomView(linearLayout); sheet[0] = b.create(); + sheet[0].useBackgroundTopPadding = false; if ((transaction.flags & 32) != 0) { button.setOnClickListener(v -> { Browser.openUrl(context, transaction.transaction_url); @@ -2287,6 +3235,318 @@ public void updateDrawState(@NonNull TextPaint ds) { } sheet[0].fixNavigationBar(); + BaseFragment fragment = LaunchActivity.getSafeLastFragment(); + if (!AndroidUtilities.isTablet() && !AndroidUtilities.hasDialogOnTop(fragment)) { + sheet[0].makeAttached(fragment); + } + sheet[0].show(); + return sheet[0]; + } + + public static BottomSheet showSubscriptionSheet(Context context, int currentAccount, TLRPC.StarsSubscription subscription, Theme.ResourcesProvider resourcesProvider) { + if (subscription == null || context == null) + return null; + + BottomSheet.Builder b = new BottomSheet.Builder(context, false, resourcesProvider); + BottomSheet[] sheet = new BottomSheet[1]; + + LinearLayout linearLayout = new LinearLayout(context); + linearLayout.setOrientation(LinearLayout.VERTICAL); + linearLayout.setPadding(dp(16), dp(20), dp(16), dp(4)); + linearLayout.setClipChildren(false); + linearLayout.setClipToPadding(false); + + FrameLayout topView = new FrameLayout(context); + linearLayout.addView(topView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.FILL_HORIZONTAL, 0, 0, 0, 10)); + + BackupImageView imageView = new BackupImageView(context); + imageView.setRoundRadius(dp(50)); + final long did = DialogObject.getPeerDialogId(subscription.peer); + AvatarDrawable avatarDrawable = new AvatarDrawable(); + if (did >= 0) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(did); + avatarDrawable.setInfo(user); + imageView.setForUserOrChat(user, avatarDrawable); + } else { + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did); + avatarDrawable.setInfo(chat); + imageView.setForUserOrChat(chat, avatarDrawable); + } + topView.addView(imageView, LayoutHelper.createFrame(100, 100, Gravity.CENTER)); + + Drawable starBg = context.getResources().getDrawable(R.drawable.star_small_outline); + starBg.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_dialogBackground, resourcesProvider), PorterDuff.Mode.SRC_IN)); + Drawable starFg = context.getResources().getDrawable(R.drawable.star_small_inner); + + ImageView starBgView = new ImageView(context); + starBgView.setImageDrawable(starBg); + topView.addView(starBgView, LayoutHelper.createFrame(28, 28, Gravity.CENTER)); + starBgView.setTranslationX(dp(34)); + starBgView.setTranslationY(dp(35)); + starBgView.setScaleX(1.1f); + starBgView.setScaleY(1.1f); + + ImageView starFgView = new ImageView(context); + starFgView.setImageDrawable(starFg); + topView.addView(starFgView, LayoutHelper.createFrame(28, 28, Gravity.CENTER)); + starFgView.setTranslationX(dp(34)); + starFgView.setTranslationY(dp(35)); + + TextView textView = new TextView(context); + textView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20); + textView.setTypeface(AndroidUtilities.bold()); + textView.setGravity(Gravity.CENTER); + textView.setText(getString(R.string.StarsSubscriptionTitle)); + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 20, 0, 20, 4)); + + textView = new TextView(context); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setGravity(Gravity.CENTER); + textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText4, resourcesProvider)); + if (subscription.pricing.period == StarsController.PERIOD_MONTHLY) { + textView.setText(replaceStarsWithPlain(formatString(R.string.StarsSubscriptionPrice, subscription.pricing.amount), .8f)); + } else { + final String period = subscription.pricing.period == StarsController.PERIOD_5MINUTES ? "5min" : "min"; + textView.setText(replaceStarsWithPlain(formatString(R.string.StarsSubscriptionPrice, subscription.pricing.amount, period), .8f)); + } + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 20, 0, 20, 4)); + + TableView tableView = new TableView(context, resourcesProvider); + textView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + textView.setPadding(dp(12.66f), dp(9.33f), dp(12.66f), dp(9.33f)); + textView.setEllipsize(TextUtils.TruncateAt.END); + textView.setTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setSingleLine(true); + ((LinkSpanDrawable.LinksTextView) textView).setDisablePaddingsOffsetY(true); + AvatarSpan avatarSpan = new AvatarSpan(textView, currentAccount, 24); + CharSequence username; + boolean deleted = false; + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did); + deleted = chat == null; + username = chat == null ? "" : chat.title; + avatarSpan.setChat(chat); + SpannableStringBuilder ssb = new SpannableStringBuilder("x " + username); + ssb.setSpan(avatarSpan, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ssb.setSpan(new ClickableSpan() { + @Override + public void onClick(@NonNull View widget) { + sheet[0].dismiss(); + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment != null) { + lastFragment.presentFragment(ChatActivity.of(did)); + } + } + + @Override + public void updateDrawState(@NonNull TextPaint ds) { + ds.setUnderlineText(false); + } + }, 3, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + textView.setText(ssb); + if (!deleted) { + tableView.addRowUnpadded(getString(R.string.StarsSubscriptionChannel), textView); + } + + tableView.addRow( + getString(R.string.StarsSubscriptionSince), + LocaleController.formatString(R.string.formatDateAtTime, LocaleController.getInstance().getFormatterGiveawayCard().format(new Date((subscription.until_date - subscription.pricing.period) * 1000L)), LocaleController.getInstance().getFormatterDay().format(new Date((subscription.until_date - subscription.pricing.period) * 1000L))) + ); + final long now = ConnectionsManager.getInstance(currentAccount).getCurrentTime(); + tableView.addRow( + getString(subscription.canceled ? R.string.StarsSubscriptionUntilExpires : now > subscription.until_date ? R.string.StarsSubscriptionUntilExpired : R.string.StarsSubscriptionUntilRenews), + LocaleController.formatString(R.string.formatDateAtTime, LocaleController.getInstance().getFormatterGiveawayCard().format(new Date(subscription.until_date * 1000L)), LocaleController.getInstance().getFormatterDay().format(new Date(subscription.until_date * 1000L))) + ); + linearLayout.addView(tableView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 17, 0, 0)); + + textView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2, resourcesProvider)); + textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setText(AndroidUtilities.replaceSingleTag(getString(R.string.StarsTransactionTOS), () -> { + Browser.openUrl(context, getString(R.string.StarsTOSLink)); + })); + textView.setGravity(Gravity.CENTER); + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 14, 15, 14, 7)); + + if (now < subscription.until_date) { + if (subscription.can_refulfill) { + textView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2, resourcesProvider)); + textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setText(formatString(R.string.StarsSubscriptionRefulfillInfo, LocaleController.formatDateChat(subscription.until_date))); + textView.setSingleLine(false); + textView.setMaxLines(4); + textView.setGravity(Gravity.CENTER); + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 26, 7, 26, 15)); + + ButtonWithCounterView button = new ButtonWithCounterView(context, true, resourcesProvider); + button.setText(getString(R.string.StarsSubscriptionRefulfill), false); + linearLayout.addView(button, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48)); + button.setOnClickListener(v -> { + if (button.isLoading()) return; + StarsController c = StarsController.getInstance(currentAccount); + final Runnable refulfil = () -> { + button.setLoading(true); + TLRPC.TL_fulfillStarsSubscription req = new TLRPC.TL_fulfillStarsSubscription(); + req.subscription_id = subscription.id; + req.peer = new TLRPC.TL_inputPeerSelf(); + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + button.setLoading(false); + if (sheet[0] != null) { + sheet[0].dismiss(); + } + StarsController.getInstance(currentAccount).invalidateSubscriptions(true); + + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment == null) return; + lastFragment.presentFragment(ChatActivity.of(did)); + })); + }; + if (c.balance < subscription.pricing.amount) { + new StarsNeededSheet(context, resourcesProvider, subscription.pricing.amount, StarsNeededSheet.TYPE_SUBSCRIPTION_KEEP, chat == null ? "" : chat.title, refulfil).show(); + } else { + refulfil.run(); + } + }); + } else if (subscription.canceled) { + textView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + textView.setTextColor(Theme.getColor(Theme.key_color_red, resourcesProvider)); + textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setText(getString(R.string.StarsSubscriptionCancelledText)); + textView.setSingleLine(false); + textView.setMaxLines(4); + textView.setGravity(Gravity.CENTER); + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 26, 7, 26, 15)); + + if (subscription.chat_invite_hash != null) { + ButtonWithCounterView button = new ButtonWithCounterView(context, true, resourcesProvider); + button.setText(getString(R.string.StarsSubscriptionRenew), false); + linearLayout.addView(button, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48)); + button.setOnClickListener(v -> { + if (button.isLoading()) return; + button.setLoading(true); + TLRPC.TL_changeStarsSubscription req = new TLRPC.TL_changeStarsSubscription(); + req.canceled = false; + req.peer = new TLRPC.TL_inputPeerSelf(); + req.subscription_id = subscription.id; + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + button.setLoading(false); + if (sheet[0] != null) { + sheet[0].dismiss(); + } + StarsController.getInstance(currentAccount).invalidateSubscriptions(true); + + BaseFragment fragment = LaunchActivity.getSafeLastFragment(); + if (fragment != null) { + BulletinFactory.of(fragment).createUsersBulletin(Collections.singletonList(chat), getString(R.string.StarsSubscriptionRenewedToast), AndroidUtilities.replaceTags(formatString(R.string.StarsSubscriptionRenewedToastText, chat == null ? "" : chat.title))).show(false); + } + })); + }); + } + } else { + textView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2, resourcesProvider)); + textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setText(formatString(R.string.StarsSubscriptionCancelInfo, LocaleController.formatDateChat(subscription.until_date))); + textView.setSingleLine(false); + textView.setMaxLines(4); + textView.setGravity(Gravity.CENTER); + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 26, 7, 26, 15)); + + ButtonWithCounterView button = new ButtonWithCounterView(context, false, resourcesProvider); + button.setText(getString(R.string.StarsSubscriptionCancel), false); + button.setTextColor(Theme.getColor(Theme.key_color_red, resourcesProvider)); + linearLayout.addView(button, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48)); + button.setOnClickListener(v -> { + if (button.isLoading()) return; + button.setLoading(true); + TLRPC.TL_changeStarsSubscription req = new TLRPC.TL_changeStarsSubscription(); + req.canceled = true; + req.peer = new TLRPC.TL_inputPeerSelf(); + req.subscription_id = subscription.id; + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + button.setLoading(false); + if (sheet[0] != null) { + sheet[0].dismiss(); + } + StarsController.getInstance(currentAccount).invalidateSubscriptions(true); + + BaseFragment fragment = LaunchActivity.getSafeLastFragment(); + if (fragment != null) { + BulletinFactory.of(fragment).createUsersBulletin(Collections.singletonList(chat), getString(R.string.StarsSubscriptionCancelledToast), AndroidUtilities.replaceTags(formatString(R.string.StarsSubscriptionCancelledToastText, LocaleController.formatDateChat(subscription.until_date)))).show(false); + } + })); + }); + } + } else { + textView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2, resourcesProvider)); + textView.setLinkTextColor(Theme.getColor(Theme.key_chat_messageLinkIn, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setText(formatString(R.string.StarsSubscriptionExpiredInfo, LocaleController.formatDateChat(subscription.until_date))); + textView.setSingleLine(false); + textView.setMaxLines(4); + textView.setGravity(Gravity.CENTER); + linearLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 26, 7, 26, 15)); + + if (subscription.chat_invite_hash != null) { + ButtonWithCounterView button = new ButtonWithCounterView(context, true, resourcesProvider); + button.setText(getString(R.string.StarsSubscriptionAgain), false); + linearLayout.addView(button, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48)); + button.setOnClickListener(v -> { + if (button.isLoading()) return; + button.setLoading(true); + TLRPC.TL_messages_checkChatInvite req = new TLRPC.TL_messages_checkChatInvite(); + req.hash = subscription.chat_invite_hash; + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + button.setLoading(false); + if (res instanceof TLRPC.ChatInvite) { + TLRPC.ChatInvite invite = (TLRPC.ChatInvite) res; + if (invite.subscription_pricing == null) { // wtf + BulletinFactory.of(sheet[0].topBulletinContainer, resourcesProvider).createErrorBulletin(getString(R.string.UnknownError)).show(false); + return; + } + final long stars = invite.subscription_pricing.amount; + StarsController.getInstance(currentAccount).subscribeTo(req.hash, invite, (status, dialogId) -> { + if ("paid".equals(status) && dialogId != 0) { + AndroidUtilities.runOnUIThread(() -> { + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment == null) return; + BaseFragment chatActivity = ChatActivity.of(dialogId); + lastFragment.presentFragment(chatActivity); + + TLRPC.Chat newChat = MessagesController.getInstance(currentAccount).getChat(-dialogId); + if (newChat != null) { + AndroidUtilities.runOnUIThread(() -> { + BulletinFactory.of(chatActivity).createSimpleBulletin(R.raw.stars_send, getString(R.string.StarsSubscriptionCompleted), AndroidUtilities.replaceTags(formatPluralString("StarsSubscriptionCompletedText", (int) stars, newChat.title))).show(true); + }, 250); + } + }); + } + }); + } else { + BulletinFactory.of(sheet[0].topBulletinContainer, resourcesProvider).createErrorBulletin(LocaleController.getString(R.string.LinkHashExpired)).show(false); + } + })); + }); + } + } + + b.setCustomView(linearLayout); + sheet[0] = b.create(); + sheet[0].useBackgroundTopPadding = false; + + sheet[0].fixNavigationBar(); + BaseFragment fragment = LaunchActivity.getSafeLastFragment(); + if (!AndroidUtilities.isTablet() && !AndroidUtilities.hasDialogOnTop(fragment)) { + sheet[0].makeAttached(fragment); + } sheet[0].show(); return sheet[0]; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsReactionsSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsReactionsSheet.java new file mode 100644 index 00000000000..fc76c106130 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/StarsReactionsSheet.java @@ -0,0 +1,1400 @@ +package org.telegram.ui.Stars; + +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.AndroidUtilities.lerp; +import static org.telegram.messenger.AndroidUtilities.rectTmp; +import static org.telegram.messenger.LocaleController.getString; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.LinearGradient; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; +import android.graphics.Rect; +import android.graphics.RectF; +import android.graphics.Shader; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.util.Log; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.HapticFeedbackConstants; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.animation.Interpolator; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.google.common.collect.Lists; +import com.google.zxing.common.detector.MathUtils; + +import org.checkerframework.checker.units.qual.A; +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.DialogObject; +import org.telegram.messenger.ImageReceiver; +import org.telegram.messenger.LocaleController; +import org.telegram.messenger.MessageObject; +import org.telegram.messenger.MessagesController; +import org.telegram.messenger.MessagesStorage; +import org.telegram.messenger.NotificationCenter; +import org.telegram.messenger.R; +import org.telegram.messenger.UserConfig; +import org.telegram.messenger.UserObject; +import org.telegram.messenger.Utilities; +import org.telegram.messenger.browser.Browser; +import org.telegram.tgnet.ConnectionsManager; +import org.telegram.tgnet.TLRPC; +import org.telegram.ui.ActionBar.ActionBar; +import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.ActionBar.BottomSheet; +import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.Cells.ChatMessageCell; +import org.telegram.ui.ChatActivity; +import org.telegram.ui.Components.AnimatedFloat; +import org.telegram.ui.Components.AnimatedTextView; +import org.telegram.ui.Components.AvatarDrawable; +import org.telegram.ui.Components.ButtonBounce; +import org.telegram.ui.Components.CheckBox2; +import org.telegram.ui.Components.ColoredImageSpan; +import org.telegram.ui.Components.CubicBezierInterpolator; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.LinkSpanDrawable; +import org.telegram.ui.Components.Premium.GLIcon.GLIconRenderer; +import org.telegram.ui.Components.Premium.GLIcon.GLIconTextureView; +import org.telegram.ui.Components.Premium.GLIcon.Icon3D; +import org.telegram.ui.Components.Reactions.ReactionsLayoutInBubble; +import org.telegram.ui.Components.ScaleStateListAnimator; +import org.telegram.ui.Components.Text; +import org.telegram.ui.Components.WallpaperCheckBoxView; +import org.telegram.ui.LaunchActivity; +import org.telegram.ui.ProfileActivity; +import org.telegram.ui.Stories.recorder.ButtonWithCounterView; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; + +public class StarsReactionsSheet extends BottomSheet { + + private final Theme.ResourcesProvider resourcesProvider; + private final int currentAccount; + + private final LinearLayout layout; + private final FrameLayout topLayout; + private final StarsSlider slider; + private final TextView titleView; + private final StarsIntroActivity.StarsBalanceView balanceView; + private final TextView statusView; + private final ButtonWithCounterView buttonView; + @Nullable + private final View separatorView; + @Nullable + private final TopSendersView topSendersView; + + public boolean anonymous; + private final View checkSeparatorView; + private final LinearLayout checkLayout; + private final CheckBox2 checkBox; + private final TextView checkTextView; + + private final GLIconTextureView icon3dView; + + private final MessageObject messageObject; + private final ArrayList<TLRPC.MessageReactor> reactors; + + public StarsReactionsSheet( + Context context, + int currentAccount, + long dialogId, + ChatActivity chatActivity, + MessageObject messageObject, + ArrayList<TLRPC.MessageReactor> reactors, + Theme.ResourcesProvider resourcesProvider + ) { + super(context, false, resourcesProvider); + + this.resourcesProvider = resourcesProvider; + this.currentAccount = currentAccount; + this.messageObject = messageObject; + this.reactors = reactors; + + TLRPC.MessageReactor me = null; + final long selfId = UserConfig.getInstance(currentAccount).getClientUserId(); + if (reactors != null) { + for (TLRPC.MessageReactor reactor : reactors) { + long reactorDialogId = DialogObject.getPeerDialogId(reactor.peer_id); + if (reactor.anonymous && reactor.my) { + reactorDialogId = selfId; + } + if (reactor.my || reactorDialogId == selfId) { + me = reactor; + } + } + } + final boolean withTopSenders = reactors != null && !reactors.isEmpty(); + anonymous = StarsController.getInstance(currentAccount).arePaidReactionsAnonymous(messageObject); + + fixNavigationBar(Theme.getColor(Theme.key_dialogBackground, resourcesProvider)); + + layout = new LinearLayout(context); + layout.setOrientation(LinearLayout.VERTICAL); + + topLayout = new FrameLayout(context); + layout.addView(topLayout, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + + slider = new StarsSlider(context) { + @Override + public void onValueChanged(int value) { + updateSenders(value); + if (buttonView != null) { + buttonView.setText(StarsIntroActivity.replaceStars(LocaleController.formatString(R.string.StarsReactionSend, LocaleController.formatNumber(value, ',')), starRef), true); + } + } + }; + int[] steps_arr = new int[] { 1, 50, 100, /*250,*/ 500, 1_000, 2_000, 5_000, 7_500, 10_000 }; + final long max = MessagesController.getInstance(currentAccount).starsPaidReactionAmountMax; + ArrayList<Integer> steps = new ArrayList<>(); + for (int i = 0; i < steps_arr.length; ++i) { + if (steps_arr[i] > max) { + steps.add((int) max); + break; + } + steps.add(steps_arr[i]); + if (steps_arr[i] == max) break; + } + steps_arr = new int[ steps.size() ]; + for (int i = 0; i < steps.size(); ++i) steps_arr[i] = steps.get(i); + slider.setSteps(100, steps_arr); + topLayout.addView(slider, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + + titleView = new TextView(context) { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(ActionBar.getCurrentActionBarHeight(), MeasureSpec.EXACTLY)); + } + }; + titleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + titleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20); + titleView.setText(getString(R.string.StarsReactionTitle)); + titleView.setGravity(Gravity.CENTER_VERTICAL); + titleView.setTypeface(AndroidUtilities.bold()); + topLayout.addView(titleView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.LEFT, 22, 0, 22,0)); + + balanceView = new StarsIntroActivity.StarsBalanceView(context, currentAccount); + ScaleStateListAnimator.apply(balanceView); + balanceView.setOnClickListener(v -> { + dismiss(); + chatActivity.presentFragment(new StarsIntroActivity() { + @Override + public void onFragmentDestroy() { + super.onFragmentDestroy(); + if (chatActivity.isFullyVisible) { + StarsReactionsSheet.this.show(); + } + } + }); + }); + topLayout.addView(balanceView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.RIGHT, 6, 0, 6, 0)); + + LinearLayout topLayoutTextLayout = new LinearLayout(context); + topLayoutTextLayout.setOrientation(LinearLayout.VERTICAL); + topLayout.addView(topLayoutTextLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 135 + 44, 0, 15)); + + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-dialogId); + statusView = new TextView(context); + statusView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + statusView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + statusView.setGravity(Gravity.CENTER); + statusView.setSingleLine(false); + statusView.setMaxLines(3); + statusView.setText(AndroidUtilities.replaceTags(me != null ? LocaleController.formatPluralStringComma("StarsReactionTextSent", me.count) : LocaleController.formatString(R.string.StarsReactionText, chat == null ? "" : chat.title))); + topLayoutTextLayout.addView(statusView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.FILL_HORIZONTAL, 40, 0, 40, 0)); + + if (withTopSenders) { + separatorView = new View(context) { + private final LinearGradient gradient = new LinearGradient(0, 0, 255, 0, new int[]{0xFFEEAC0D, 0xFFF9D316}, new float[]{0, 1}, Shader.TileMode.CLAMP); + private final Matrix gradientMatrix = new Matrix(); + private final Paint backgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint separatorPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Text text = new Text(getString(R.string.StarsReactionTopSenders), 14.16f, AndroidUtilities.bold()); + + @Override + public void dispatchDraw(Canvas canvas) { + gradientMatrix.reset(); + gradientMatrix.postTranslate(dp(14), 0); + gradientMatrix.postScale((getWidth() - dp(14 * 2)) / 255f, 1f); + gradient.setLocalMatrix(gradientMatrix); + backgroundPaint.setShader(gradient); + + final float textWidth = text.getCurrentWidth() + dp(15 + 15); + + separatorPaint.setColor(Theme.getColor(Theme.key_divider, resourcesProvider)); + canvas.drawRect(dp(24), getHeight() / 2f - 1, (getWidth() - textWidth) / 2f - dp(8), getHeight() / 2f, separatorPaint); + canvas.drawRect((getWidth() + textWidth) / 2f + dp(8), getHeight() / 2f - 1, getWidth() - dp(24), getHeight() / 2f, separatorPaint); + + AndroidUtilities.rectTmp.set((getWidth() - textWidth) / 2f, 0, (getWidth() + textWidth) / 2f, getHeight()); + canvas.drawRoundRect(AndroidUtilities.rectTmp, getHeight() / 2f, getHeight() / 2f, backgroundPaint); + text.draw(canvas, (getWidth() - text.getCurrentWidth()) / 2f, getHeight() / 2f, 0xFFFFFFFF, 1f); + } + }; + topLayoutTextLayout.addView(separatorView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 30, Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 20, 0, 0)); + + topSendersView = new TopSendersView(context); + topSendersView.setOnSenderClickListener(senderDialogId -> { + Bundle args = new Bundle(); + args.putLong("user_id", senderDialogId); + if (senderDialogId == UserConfig.getInstance(currentAccount).getClientUserId()) { + args.putBoolean("my_profile", true); + } + chatActivity.presentFragment(new ProfileActivity(args) { + @Override + public void onFragmentDestroy() { + super.onFragmentDestroy(); + StarsReactionsSheet.this.show(); + } + }); + dismiss(); + }); + layout.addView(topSendersView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 110)); + + checkSeparatorView = new View(context); + checkSeparatorView.setBackgroundColor(Theme.getColor(Theme.key_divider, resourcesProvider)); + layout.addView(checkSeparatorView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 1.0f / AndroidUtilities.density, Gravity.FILL_HORIZONTAL, 24, 0, 24, 0)); + } else { + separatorView = null; + topSendersView = null; + checkSeparatorView = null; + } + + checkBox = new CheckBox2(context, 21, resourcesProvider); + checkBox.setColor(Theme.key_radioBackgroundChecked, Theme.key_checkboxDisabled, Theme.key_checkboxCheck); + checkBox.setDrawUnchecked(true); + checkBox.setChecked(!anonymous, false); + if (topSendersView != null) { + topSendersView.setMyselfAsAnonymous(anonymous); + } + checkBox.setDrawBackgroundAsArc(10); + + checkTextView = new TextView(context); + checkTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider)); + checkTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + checkTextView.setText(LocaleController.getString(R.string.StarsReactionShowMeInTopSenders)); + + checkLayout = new LinearLayout(context); + checkLayout.setOrientation(LinearLayout.HORIZONTAL); + checkLayout.setPadding(dp(12), dp(8), dp(12), dp(8)); + checkLayout.addView(checkBox, LayoutHelper.createLinear(21, 21, Gravity.CENTER_VERTICAL, 0, 0, 9, 0)); + checkLayout.addView(checkTextView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL)); + checkLayout.setOnClickListener(v -> { + checkBox.setChecked(!checkBox.isChecked(), true); + anonymous = !checkBox.isChecked(); + if (topSendersView != null) { + topSendersView.setMyselfAsAnonymous(anonymous); + } + }); + ScaleStateListAnimator.apply(checkLayout, .05f, 1.2f); + checkLayout.setBackground(Theme.createRadSelectorDrawable(Theme.getColor(Theme.key_listSelector, resourcesProvider), 6, 6)); + + layout.addView(checkLayout, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL, 0, withTopSenders ? 10 : 4, 0, 10)); + + buttonView = new ButtonWithCounterView(context, resourcesProvider); + layout.addView(buttonView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48, 14, 0, 14, 0)); + updateSenders(0); + buttonView.setText(StarsIntroActivity.replaceStars(LocaleController.formatString(R.string.StarsReactionSend, LocaleController.formatNumber(50, ',')), starRef), true); + buttonView.setOnClickListener(v -> { + if (messageObject == null || chatActivity == null || iconAnimator != null) { + return; + } + final long totalStars = slider.getValue(); + final StarsController starsController = StarsController.getInstance(currentAccount); + + final Runnable send = () -> { + Boolean currentAnonymous = messageObject == null ? null : messageObject.isMyPaidReactionAnonymous(); + if (currentAnonymous == null && messageObject != null) { + StarsController.getInstance(currentAccount).saveAnonymous(messageObject, anonymous); + } + StarsController.PendingPaidReactions pending = starsController.sendPaidReaction(messageObject, chatActivity, totalStars, false, true, !checkBox.isChecked()); + if (pending == null) { + return; + } + AndroidUtilities.runOnUIThread(() -> { + sending = true; + animate3dIcon(pending::apply); + AndroidUtilities.runOnUIThread(this::dismiss, 240); + }); + }; + + if (starsController.balanceAvailable() && starsController.getBalance() < totalStars) { + new StarsIntroActivity.StarsNeededSheet(context, resourcesProvider, totalStars, StarsIntroActivity.StarsNeededSheet.TYPE_REACTIONS, chat == null ? "" : chat.title, send).show(); + } else { + send.run(); + } + }); + + LinkSpanDrawable.LinksTextView termsView = new LinkSpanDrawable.LinksTextView(context, resourcesProvider); + termsView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + termsView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2, resourcesProvider)); + termsView.setText(AndroidUtilities.replaceSingleTag(getString(R.string.StarsReactionTerms), () -> { + Browser.openUrl(context, getString(R.string.StarsReactionTermsLink)); + })); + termsView.setGravity(Gravity.CENTER); + termsView.setLinkTextColor(getThemedColor(Theme.key_dialogTextLink)); + layout.addView(termsView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 14, 14, 14, 12)); + + setCustomView(layout); + + icon3dView = new GLIconTextureView(context, GLIconRenderer.DIALOG_STYLE, Icon3D.TYPE_GOLDEN_STAR) { + @Override + protected void startIdleAnimation() {} + }; + icon3dView.mRenderer.colorKey1 = Theme.key_starsGradient1; + icon3dView.mRenderer.colorKey2 = Theme.key_starsGradient2; + icon3dView.mRenderer.updateColors(); + icon3dView.mRenderer.white = 1f; + icon3dView.setVisibility(View.INVISIBLE); + icon3dView.setPaused(true); + container.addView(icon3dView, LayoutHelper.createFrame(150, 150)); + slider.setValue(50); + + if (reactors != null) { + long top = 0; + for (int i = 0; i < reactors.size(); ++i) { + final TLRPC.MessageReactor reactor = reactors.get(i); + long count = reactor.count; + if (count > top) top = count; + } + if (me != null) { + top -= me.count; + } + if (top > 0) { + slider.setStarsTop(1 + top); + } + } + } + + private final ColoredImageSpan[] starRef = new ColoredImageSpan[1]; + public void updateSenders(long my_stars) { + if (topSendersView != null) { + ArrayList<SenderData> array = new ArrayList<>(); + final long selfId = UserConfig.getInstance(currentAccount).getClientUserId(); + long existingStars = 0; + if (reactors != null) { + for (int i = 0; i < reactors.size(); ++i) { + final TLRPC.MessageReactor reactor = reactors.get(i); + long dialogId = DialogObject.getPeerDialogId(reactor.peer_id); + if (reactor.anonymous) { + if (reactor.my) { + dialogId = selfId; + } else { + dialogId = -i; + } + } + if (reactor.my || dialogId == selfId) { + existingStars = reactor.count; + continue; + } + array.add(SenderData.of(reactor.anonymous, dialogId, reactor.count)); + } + } + if (existingStars + my_stars > 0) { + array.add(SenderData.of(anonymous, selfId, existingStars + my_stars)); + } + Collections.sort(array, (a1, a2) -> (int) (a2.stars - a1.stars)); + topSendersView.setSenders(new ArrayList<>(array.subList(0, Math.min(3, array.size())))); + } + } + + private boolean sending; + private boolean checkedVisiblity = false; + private void checkVisibility() { + if (checkedVisiblity) return; + checkedVisiblity = true; + if (messageObject == null) return; + Boolean currentAnonymous = messageObject.isMyPaidReactionAnonymous(); + StarsController.getInstance(currentAccount).saveAnonymous(messageObject, anonymous); + if (currentAnonymous == null || currentAnonymous != anonymous) { + messageObject.setMyPaidReactionAnonymous(anonymous); + + final StarsController.MessageId key = StarsController.MessageId.from(messageObject); + TLRPC.TL_messages_togglePaidReactionPrivacy req = new TLRPC.TL_messages_togglePaidReactionPrivacy(); + req.peer = MessagesController.getInstance(currentAccount).getInputPeer(key.did); + req.msg_id = key.mid; + req.isPrivate = anonymous; + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.starReactionAnonymousUpdate, key.did, key.mid, anonymous); + + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> { + if (res instanceof TLRPC.TL_boolTrue) { + MessagesStorage.getInstance(currentAccount).putMessages(new ArrayList<>(Arrays.asList(messageObject.messageOwner)), true, true, true, 0, 0, 0); + } + }); + } + } + + @Override + public void dismiss() { + if (!sending) checkVisibility(); + super.dismiss(); + } + + private ChatActivity chatActivity; + private int messageId; + private ChatMessageCell messageCell; + + public void setMessageCell(ChatActivity chatActivity, int id, ChatMessageCell cell) { + this.chatActivity = chatActivity; + this.messageId = id; + this.messageCell = cell; + } + + public void setValue(int value) { + slider.setValue(value); + updateSenders(value); + if (buttonView != null) { + buttonView.setText(StarsIntroActivity.replaceStars(LocaleController.formatString(R.string.StarsReactionSend, LocaleController.formatNumber(value, ',')), starRef), true); + } + } + + private ValueAnimator iconAnimator; + private void animate3dIcon(Runnable pushed) { + if (messageCell == null || !messageCell.isCellAttachedToWindow() || messageCell.getPrimaryMessageObject() == null || messageCell.getPrimaryMessageObject().getId() != messageId) return; + ChatMessageCell _cell = messageCell; + ReactionsLayoutInBubble.ReactionButton _button = _cell.reactionsLayoutInBubble.getReactionButton(ReactionsLayoutInBubble.VisibleReaction.asStar()); + if (_button == null) { + MessageObject.GroupedMessages group = chatActivity.getValidGroupedMessage(messageCell.getPrimaryMessageObject()); + if (group != null && !group.posArray.isEmpty()) { + MessageObject msg = null; + for (MessageObject m : group.messages) { + MessageObject.GroupedMessagePosition pos = group.getPosition(m); + if (pos != null && (pos.flags & MessageObject.POSITION_FLAG_LEFT) != 0 && (pos.flags & MessageObject.POSITION_FLAG_BOTTOM) != 0) { + msg = m; + break; + } + } + if (msg != null) { + _cell = chatActivity.findMessageCell(msg.getId(), false); + } + } + if (_cell == null) return; + _button = _cell.reactionsLayoutInBubble.getReactionButton(ReactionsLayoutInBubble.VisibleReaction.asStar()); + } + if (_button == null) { + return; + } + final ChatMessageCell cell = _cell; + final ReactionsLayoutInBubble.ReactionButton button = _button; + + final int[] loc = new int[2]; + + final RectF from = new RectF(); + slider.getLocationInWindow(loc); + from.set(slider.counterImage.getBounds()); + from.inset(-dp(3.5f), -dp(3.5f)); + from.offset(loc[0], loc[1]); + icon3dView.whenReady(() -> { + slider.drawCounterImage = false; + slider.invalidate(); + }); + button.drawImage = false; + cell.invalidate(); + + final RectF to = new RectF(); + final Runnable updateTo = () -> { + cell.getLocationInWindow(loc); + to.set( + loc[0] + cell.reactionsLayoutInBubble.x + button.x + dp(4), + loc[1] + cell.reactionsLayoutInBubble.y + button.y + (button.height - dp(22)) / 2f, + loc[0] + cell.reactionsLayoutInBubble.x + button.x + dp(4 + 22), + loc[1] + cell.reactionsLayoutInBubble.y + button.y + (button.height + dp(22)) / 2f + ); + }; + updateTo.run(); + + icon3dView.setPaused(false); + icon3dView.setVisibility(View.VISIBLE); + + final RectF rect = new RectF(); + rect.set(from); + icon3dView.setTranslationX(rect.centerX() - dp(150) / 2f); + icon3dView.setTranslationY(rect.centerY() - dp(150) / 2f); + icon3dView.setScaleX(rect.width() / dp(150)); + icon3dView.setScaleY(rect.height() / dp(150)); + + if (iconAnimator != null) { + iconAnimator.cancel(); + } + final boolean[] doneRipple = new boolean[1]; + iconAnimator = ValueAnimator.ofFloat(0, 1); + iconAnimator.addUpdateListener(anm -> { + float t = (float) anm.getAnimatedValue(); + updateTo.run(); + AndroidUtilities.lerp(from, to, t, rect); + icon3dView.setTranslationX(rect.centerX() - dp(150) / 2f); + icon3dView.setTranslationY(rect.centerY() - dp(150) / 2f); + float s = Math.max(rect.width() / dp(150), rect.height() / dp(150)); + s = lerp(s, 1f, (float) Math.sin(t * Math.PI)); + icon3dView.setScaleX(s); + icon3dView.setScaleY(s); + icon3dView.mRenderer.angleX = 360 * t; + icon3dView.mRenderer.white = Math.max(0, 1 - 4f * t); + + if (!doneRipple[0] && t > .95f) { + doneRipple[0] = true; + LaunchActivity.makeRipple(to.centerX(), to.centerY(), 1.5f); + try { + container.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); + } catch (Exception ignore) {} + if (pushed != null) { + pushed.run(); + } + } + }); + iconAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + icon3dView.setVisibility(View.INVISIBLE); + icon3dView.setPaused(true); + button.drawImage = true; + messageCell.invalidate(); + + StarsReactionsSheet.super.dismissInternal(); + + if (!doneRipple[0]) { + doneRipple[0] = true; + LaunchActivity.makeRipple(to.centerX(), to.centerY(), 1.5f); + try { + container.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); + } catch (Exception ignore) {} + if (pushed != null) { + pushed.run(); + } + } + if (LaunchActivity.instance != null && LaunchActivity.instance.getFireworksOverlay() != null) { + LaunchActivity.instance.getFireworksOverlay().start(true); + } + } + }); + iconAnimator.setDuration(800); + iconAnimator.setInterpolator(new Interpolator() { + @Override + public float getInterpolation(float x) { + return (float) Math.pow(x, 2); + } + }); + iconAnimator.start(); + } + + @Override + public void dismissInternal() { + if (iconAnimator != null && iconAnimator.isRunning()) { + return; + } + super.dismissInternal(); + } + + @Override + protected boolean canDismissWithSwipe() { + if (slider.tracking) return false; + return super.canDismissWithSwipe(); + } + + public static class StarsSlider extends View { + + private final Paint sliderInnerPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint sliderPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint sliderCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint textBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + + private final Particles sliderParticles = new Particles(Particles.TYPE_RIGHT, 300); + private final Particles textParticles = new Particles(Particles.TYPE_RADIAL, 30); + + private final LinearGradient gradient = new LinearGradient(0, 0, 255, 0, new int[] {0xFFEEAC0D, 0xFFF9D316}, new float[] {0, 1}, Shader.TileMode.CLAMP); + private final Matrix gradientMatrix = new Matrix(); + + public boolean drawCounterImage = true; + private final Drawable counterImage; + private final AnimatedTextView.AnimatedTextDrawable counterText = new AnimatedTextView.AnimatedTextDrawable(false, true, true); + + private final ColoredImageSpan[] starRef = new ColoredImageSpan[1]; + + private final Paint topPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Text topText = new Text(getString(R.string.StarsReactionTop), 14, AndroidUtilities.getTypeface("fonts/rcondensedbold.ttf")); + private final AnimatedFloat overTop = new AnimatedFloat(this, 0, 320, CubicBezierInterpolator.EASE_OUT_QUINT); + private final AnimatedFloat overTopText = new AnimatedFloat(this, 0, 320, CubicBezierInterpolator.EASE_OUT_QUINT); + + public StarsSlider(Context context) { + super(context); + + counterImage = context.getResources().getDrawable(R.drawable.msg_premium_liststar).mutate(); + counterImage.setColorFilter(new PorterDuffColorFilter(0xFFFFFFFF, PorterDuff.Mode.SRC_IN)); + + counterText.setTextColor(0xFFFFFFFF); + counterText.setTypeface(AndroidUtilities.getTypeface("fonts/num.otf")); + counterText.setTextSize(AndroidUtilities.dp(21)); + counterText.setCallback(this); + counterText.setOverrideFullWidth(AndroidUtilities.displaySize.x); + counterText.setGravity(Gravity.CENTER); + + topPaint.setColor(Theme.getColor(Theme.key_dialogBackground)); + topPaint.setStyle(Paint.Style.STROKE); + topPaint.setStrokeWidth(dp(1)); + } + + private long currentTop = -1; + + public void setStarsTop(long top) { + currentTop = top; + invalidate(); + } + + @Override + protected boolean verifyDrawable(@NonNull Drawable who) { + return who == counterText || super.verifyDrawable(who); + } + + private final RectF sliderInnerRect = new RectF(); + private final RectF sliderRect = new RectF(); + private final RectF sliderCircleRect = new RectF(); + private final RectF arc = new RectF(); + + private final Path sliderInnerPath = new Path(); + private final Path sliderPath = new Path(); + + private final RectF textRect = new RectF(); + private final Path textPath = new Path(); + + public float progress = 0; + public float aprogress; + public int steps; + public int[] stops; + + public void setSteps(int steps, int... stops) { + this.steps = steps; + this.stops = stops; + } + + public void setValue(int value) { + setValue(value, false); + } + public void setValue(int value, boolean byScroll) { + this.progress = getProgress(value); + if (!byScroll) { + this.aprogress = this.progress; + } + updateText(true); + } + + public int getValue() { + return getValue(progress); + } + + public float getProgress() { + return progress; + } + + public int getValue(float progress) { + if (progress <= 0f) return stops[0]; + if (progress >= 1f) return stops[stops.length - 1]; + float scaledProgress = progress * (stops.length - 1); + int index = (int) scaledProgress; + float localProgress = scaledProgress - index; + return Math.round(stops[index] + localProgress * (stops[index + 1] - stops[index])); + } + + public float getProgress(int value) { + for (int i = 1; i < stops.length; ++i) { + if (value <= stops[i]) { + float local = (float) (value - stops[i - 1]) / (stops[i] - stops[i - 1]); + return (i - 1 + local) / (stops.length - 1); + } + } + return 1f; + } + + public void updateText(boolean animated) { + counterText.cancelAnimation(); + counterText.setText(StarsIntroActivity.replaceStars(LocaleController.formatNumber(getValue(), ','), starRef), animated); + } + + protected void onValueChanged(int value) {} + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), dp(220)); + final int w = getMeasuredWidth(); + final int h = getMeasuredHeight(); + + final int pad = dp(14); + final int top = dp(135); + + sliderInnerRect.set(pad, top, w - pad, top + dp(24)); + + sliderInnerPaint.setColor(0x26EFAD0D); + sliderPaint.setColor(0xFFEFAD0D); + sliderCirclePaint.setColor(0xFFFFFFFF); + } + + @Override + protected void dispatchDraw(Canvas canvas) { + super.dispatchDraw(canvas); + + gradientMatrix.reset(); + gradientMatrix.postTranslate(sliderInnerRect.left, 0); + gradientMatrix.postScale(sliderInnerRect.width() / 255f, 1f); + gradient.setLocalMatrix(gradientMatrix); + sliderPaint.setShader(gradient); + + sliderInnerPath.rewind(); + sliderInnerPath.addRoundRect(sliderInnerRect, dp(12), dp(12), Path.Direction.CW); + canvas.drawPath(sliderInnerPath, sliderInnerPaint); + + sliderRect.set(sliderInnerRect); + final float roundedValue = getProgress(getValue()); + sliderRect.right = lerp(sliderRect.left + dp(24), sliderRect.right, roundedValue); + + sliderPath.rewind(); + sliderPath.addRoundRect(sliderRect, dp(12), dp(12), Path.Direction.CW); + + sliderParticles.setBounds(sliderInnerRect); + sliderParticles.setSpeed(1f + progress * 15f); + sliderParticles.setVisible(.15f + .85f * progress); + sliderParticles.process(); + canvas.save(); + canvas.clipPath(sliderInnerPath); + sliderParticles.draw(canvas, 0xFFF5B90E); + if (currentTop != -1 && getProgress((int) currentTop) < 1f && getProgress((int) currentTop) > 0) { + final float topX = sliderInnerRect.left + dp(12) + (sliderInnerRect.width() - dp(24)) * Utilities.clamp01(getProgress((int) currentTop)); + final float isOverTop = overTop.set(Math.abs(sliderRect.right - dp(10) - topX) < dp(14)); + final float textPad = lerp(dp(9), dp(16), overTopText.set(Math.abs(sliderRect.right - dp(10) - topX) < dp(12))); + final float topTextX = topX + topText.getCurrentWidth() + 2 * dp(16) > sliderInnerRect.right ? topX - textPad - topText.getCurrentWidth() : topX + textPad; + topPaint.setStrokeWidth(dp(1)); + topPaint.setColor(Theme.multAlpha(0xFFF5B90E, .6f)); + canvas.drawLine(topX, lerp(sliderInnerRect.top, sliderInnerRect.centerY(), isOverTop), topX, lerp(sliderInnerRect.bottom, sliderInnerRect.centerY(), isOverTop), topPaint); + topText.draw(canvas, topTextX, sliderInnerRect.centerY(), 0xFFF5B90E, .6f); + } + canvas.drawPath(sliderPath, sliderPaint); + canvas.clipPath(sliderPath); + sliderParticles.draw(canvas, Color.WHITE); + if (currentTop != -1 && getProgress((int) currentTop) < 1f && getProgress((int) currentTop) > 0) { + final float topX = sliderInnerRect.left + dp(12) + (sliderInnerRect.width() - dp(24)) * Utilities.clamp01(getProgress((int) currentTop)); + final float isOverTop = overTop.set(Math.abs(sliderRect.right - dp(10) - topX) < dp(14)); + final float textPad = lerp(dp(9), dp(16), overTopText.set(Math.abs(sliderRect.right - dp(10) - topX) < dp(12))); + final float topTextX = topX + topText.getCurrentWidth() + 2 * dp(16) > sliderInnerRect.right ? topX - textPad - topText.getCurrentWidth() : topX + textPad; + topPaint.setStrokeWidth(dp(1)); + topPaint.setColor(Theme.multAlpha(Theme.getColor(Theme.key_dialogBackground), .4f)); + canvas.drawLine(topX, lerp(sliderInnerRect.top, sliderInnerRect.centerY(), isOverTop), topX, lerp(sliderInnerRect.bottom, sliderInnerRect.centerY(), isOverTop), topPaint); + topText.draw(canvas, topTextX, sliderInnerRect.centerY(), Color.WHITE, .75f); + } + canvas.restore(); + invalidate(); + + sliderCircleRect.set( + sliderRect.right - dp(16) - dp(16 - 12), + (sliderRect.centerY() - dp(16) / 2f), + sliderRect.right - dp(16 - 12), + (sliderRect.centerY() + dp(16) / 2f) + ); + canvas.drawRoundRect(sliderCircleRect, dp(12), dp(12), sliderCirclePaint); + + final float slide = dp(9) / sliderInnerRect.width(); + final float pointerX = lerp( + lerp(sliderCircleRect.left, sliderCircleRect.right, roundedValue), + lerp(sliderCircleRect.left + dp(9), sliderCircleRect.right - dp(9), roundedValue), + Math.min(Utilities.clamp01(roundedValue / slide), Utilities.clamp01((1f - roundedValue) / slide)) + ); // slide < dp(12) ? sliderInnerRect.left + dp(12) : slide > (sliderInnerRect.width() - dp(12)) ? sliderInnerRect.right - dp(12) : sliderCircleRect.centerX(); + final float textWidth = counterText.getCurrentWidth() + dp(24 + 26); + final float textHeight = dp(44); + final float left = Utilities.clamp(pointerX - textWidth / 2f, sliderInnerRect.right - textWidth - dp(4), sliderInnerRect.left + dp(4)); + textRect.set(left, sliderInnerRect.top - dp(21) - textHeight, left + textWidth, sliderInnerRect.top - dp(21)); + + float d = textRect.height(), r = d / 2f; + + final float px = Utilities.clamp(pointerX, textRect.right, textRect.left); + final float lpx = Utilities.clamp(px - dp(9), textRect.right, textRect.left); + final float rpx = Utilities.clamp(px + dp(9), textRect.right, textRect.left); + + + final float rotate = Utilities.clamp(progress - aprogress, 1, -1) * 60; + final float rotateCx = px, rotateCy = textRect.bottom + dp(8); + + textPath.rewind(); + arc.set(textRect.left, textRect.top, textRect.left + d, textRect.top + d); + textPath.arcTo(arc, -180, 90); + arc.set(textRect.right - d, textRect.top, textRect.right, textRect.top + d); + textPath.arcTo(arc, -90, 90); + arc.set(textRect.right - d, textRect.bottom - d, textRect.right, textRect.bottom); + float rr = Utilities.clamp01((rpx - arc.centerX()) / r); + textPath.arcTo(arc, 0, (float) Utilities.clamp(.85f * Math.acos(rr) / Math.PI * 180, 90, 0)); + if (lpx < textRect.right - d * .7f) { + textPath.lineTo(rpx, textRect.bottom); + textPath.lineTo(px + 2, textRect.bottom + dp(8)); + } + textPath.lineTo(px, textRect.bottom + dp(8) + 1); + if (rpx > textRect.left + d * .7f) { + textPath.lineTo(px - 2, textRect.bottom + dp(8)); + textPath.lineTo(lpx, textRect.bottom); + } + arc.set(textRect.left, textRect.bottom - d, textRect.left + d, textRect.bottom); + float lr = Utilities.clamp01((lpx - arc.left) / r); + float a = 90 + (float) Utilities.clamp(.85f * Math.acos(lr) / Math.PI * 180, 90, 0); + textPath.arcTo(arc, a, 180 - a); + textPath.lineTo(textRect.left, textRect.bottom); + + textPath.close(); + + AndroidUtilities.rectTmp.set(textRect); + AndroidUtilities.rectTmp.inset(-dp(12), -dp(12)); + textParticles.setBounds(AndroidUtilities.rectTmp); + textParticles.setSpeed(1f + progress * 15f); + textParticles.process(); + canvas.save(); +// canvas.translate(textRect.centerX(), textRect.centerY()); + textParticles.draw(canvas, 0xFFF5B90E); + canvas.restore(); + + canvas.save(); + canvas.rotate(rotate, rotateCx, rotateCy); + if (Math.abs(progress - aprogress) > .001f) { + aprogress = AndroidUtilities.lerp(aprogress, progress, .1f); + invalidate(); + } + + textBackgroundPaint.setShader(gradient); + canvas.drawPath(textPath, textBackgroundPaint); + + canvas.save(); + canvas.clipPath(textPath); + canvas.rotate(-rotate, rotateCx, rotateCy); +// canvas.translate(textRect.centerX(), textRect.centerY()); + textParticles.draw(canvas, Color.WHITE); + canvas.restore(); + + counterImage.setBounds((int) (textRect.left + dp(13)), (int) (textRect.centerY() - dp(10)), (int) (textRect.left + dp(13 + 20)), (int) (textRect.centerY() + dp(10))); + if (drawCounterImage) { + counterImage.draw(canvas); + } + counterText.setBounds(textRect.left + dp(24), textRect.top, textRect.right, textRect.bottom); + counterText.draw(canvas); + + canvas.restore(); + + } + + private float lastX, lastY; + private long pressTime; + private int pointerId; + private boolean tracking; + + @Override + public boolean dispatchTouchEvent(MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + lastX = event.getX(); + lastY = event.getY(); + pointerId = event.getPointerId(0); + pressTime = System.currentTimeMillis(); + tracking = false; + } else if (event.getAction() == MotionEvent.ACTION_MOVE && event.getPointerId(0) == pointerId) { + final float dx = event.getX() - lastX; + final float dy = event.getY() - lastY; + if (!tracking && Math.abs(dx) > Math.abs(1.5f * dy) && Math.abs(dx) > AndroidUtilities.touchSlop) { + getParent().requestDisallowInterceptTouchEvent(true); + tracking = true; + if (progressAnimator != null) { + progressAnimator.cancel(); + } + } + if (tracking) { + final int pastValue = getValue(); + progress = Utilities.clamp01(progress + dx / (1f * getWidth())); + if (getValue() != pastValue) { + onValueChanged(getValue()); + updateText(true); + } + lastX = event.getX(); + } + } else if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) { + if (!tracking && event.getPointerId(0) == pointerId && MathUtils.distance(lastX, lastY, event.getX(), event.getY()) < AndroidUtilities.touchSlop && System.currentTimeMillis() - pressTime <= ViewConfiguration.getTapTimeout() * 1.5f) { + // tap + float newProgress = Utilities.clamp01((event.getX() - sliderInnerRect.left) / (float) sliderInnerRect.width()); + if (currentTop > 0 && Math.abs(getProgress((int) currentTop) - newProgress) < 0.035f) { + newProgress = Utilities.clamp01(getProgress((int) currentTop)); + } + animateProgressTo(newProgress); + } + tracking = false; + } + return true; + } + + private ValueAnimator progressAnimator; + private void animateProgressTo(float toProgress) { + if (progressAnimator != null) { + progressAnimator.cancel(); + } + progressAnimator = ValueAnimator.ofFloat(progress, toProgress); + progressAnimator.addUpdateListener(anm -> { + progress = (float) anm.getAnimatedValue(); + invalidate(); + }); + progressAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + final int pastValue = getValue(); + progress = toProgress; + if (getValue() != pastValue) { + onValueChanged(getValue()); + } + invalidate(); + } + }); + progressAnimator.setDuration(320); + progressAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + progressAnimator.start(); + + final int pastValue = getValue(); + if (getValue(toProgress) != pastValue) { + onValueChanged(getValue(toProgress)); + } + + counterText.cancelAnimation(); + counterText.setText(StarsIntroActivity.replaceStars(LocaleController.formatNumber(getValue(toProgress), ','), starRef), true); + } + } + + public static class Particles { + + public static final int TYPE_RIGHT = 0; + public static final int TYPE_RADIAL = 1; + + public final int type; + public final ArrayList<Particle> particles; + public final RectF bounds = new RectF(); + + public final Bitmap b; + private int bPaintColor; + public final Paint bPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); + public final Rect rect = new Rect(); + + private float speed = 1f; + private int visibleCount; + + private boolean firstDraw = true; + + public Particles(int type, int n) { + this.type = type; + this.visibleCount = n; + particles = new ArrayList<>(n); + for (int i = 0; i < n; ++i) { + particles.add(new Particle()); + } + + final int size = dp(10); + final float k = .85f; + b = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888); + Path path = new Path(); + int sizeHalf = size >> 1; + int mid = (int) (sizeHalf * k); + path.moveTo(0, sizeHalf); + path.lineTo(mid, mid); + path.lineTo(sizeHalf, 0); + path.lineTo(size - mid, mid); + path.lineTo(size, sizeHalf); + path.lineTo(size - mid, size - mid); + path.lineTo(sizeHalf, size); + path.lineTo(mid, size - mid); + path.lineTo(0, sizeHalf); + path.close(); + Canvas canvas = new Canvas(b); + Paint paint = new Paint(); + paint.setColor(Theme.multAlpha(Color.WHITE, .75f)); + canvas.drawPath(path, paint); + } + + public void setVisible(float x) { + this.visibleCount = (int) (particles.size() * x); + } + + public void setBounds(RectF bounds) { + this.bounds.set(bounds); + if (type == TYPE_RADIAL) { + final long now = System.currentTimeMillis(); + for (int i = 0; i < particles.size(); ++i) { + final Particle p = particles.get(i); + if (!bounds.contains(p.x, p.y)) gen(p, now, firstDraw); + } + } + } + + public void setSpeed(float speed) { + this.speed = speed; + } + + private long lastTime; + public void process() { + final long now = System.currentTimeMillis(); + final float deltaTime = Math.min(lastTime - now, 16) / 1000f * speed; + for (int i = 0; i < Math.min(visibleCount, particles.size()); ++i) { + final Particle p = particles.get(i); + float lifetime = p.lifetime <= 0 ? 2f : (now - p.start) / (float) p.lifetime; + if (lifetime > 1f) { + gen(p, now, firstDraw); + lifetime = 0f; + } + p.x += p.vx * deltaTime; + p.y += p.vy * deltaTime; + p.la = 4f * lifetime - 4f * lifetime * lifetime; + } + lastTime = now; + } + + public void draw(Canvas canvas, int color) { + if (bPaintColor != color) { + bPaint.setColorFilter(new PorterDuffColorFilter(bPaintColor = color, PorterDuff.Mode.SRC_IN)); + } + for (int i = 0; i < Math.min(visibleCount, particles.size()); ++i) { + final Particle p = particles.get(i); + p.draw(canvas, color, p.la); + } + firstDraw = false; + } + + public void gen(Particle p, final long now, boolean prefire) { + p.start = now; + p.lifetime = lerp(500, 2500, Utilities.fastRandom.nextFloat()); + if (prefire) { + p.start -= (long) (p.lifetime * Utilities.clamp01(Utilities.fastRandom.nextFloat())); + } + p.x = lerp(bounds.left, bounds.right, Utilities.fastRandom.nextFloat()); + p.y = lerp(bounds.top, bounds.bottom, Utilities.fastRandom.nextFloat()); + if (type == TYPE_RIGHT) { + p.vx = dp(lerp(-7f, -18f, Utilities.fastRandom.nextFloat())); + p.vy = dp(lerp(-2f, 2f, Utilities.fastRandom.nextFloat())); + } else { + p.vx = bounds.centerX() - p.x; + p.vy = bounds.centerY() - p.y; + final float d = dp(lerp(1f, 4f, Utilities.fastRandom.nextFloat())) / (float) Math.sqrt(p.vx * p.vx + p.vy * p.vy); + p.vx *= d; + p.vy *= d; + } + p.a = lerp(.4f, 1f, Utilities.fastRandom.nextFloat()); + p.s = .7f * lerp(.8f, 1.2f, Utilities.fastRandom.nextFloat()); + } + + public class Particle { + public float x, y; + public float vx, vy; + public float s; + public long start, lifetime; + public float la, a; + + public void draw(Canvas canvas, int color, float alpha) { + bPaint.setAlpha((int) (0xFF * alpha)); + rect.set( + (int) (x - b.getWidth() / 2f * a * s * alpha), + (int) (y - b.getHeight() / 2f * a * s * alpha), + (int) (x + b.getWidth() / 2f * a * s * alpha), + (int) (y + b.getHeight() / 2f * a * s * alpha) + ); + canvas.drawBitmap(b, null, rect, bPaint); + } + } + } + + public static class SenderData { + public boolean anonymous; + public long did; + public long stars; + public static SenderData of(boolean anonymous, long did, long stars) { + SenderData d = new SenderData(); + d.anonymous = anonymous; + d.did = did; + d.stars = stars; + return d; + } + } + + public class TopSendersView extends View { + + public final ArrayList<Sender> senders = new ArrayList<>(); + public final ArrayList<Sender> oldSenders = new ArrayList<>(); + + public final Paint backgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + public final Paint starsBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + + public final AnimatedFloat animatedCount = new AnimatedFloat(TopSendersView.this, 0, 320, CubicBezierInterpolator.EASE_OUT_QUINT); + public float count; + + public TopSendersView(Context context) { + super(context); + + backgroundPaint.setStyle(Paint.Style.FILL_AND_STROKE); + backgroundPaint.setStrokeWidth(dp(3)); + backgroundPaint.setColor(Theme.getColor(Theme.key_dialogBackground)); + starsBackgroundPaint.setColor(0xFFF0B302); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + for (int i = 0; i < this.senders.size(); ++i) { + Sender sender = this.senders.get(i); + sender.imageReceiver.onAttachedToWindow(); + } + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + for (int i = 0; i < this.senders.size(); ++i) { + Sender sender = this.senders.get(i); + sender.imageReceiver.onDetachedFromWindow(); + } + } + + @Override + protected void dispatchDraw(Canvas canvas) { + count = animatedCount.set(senders.size()); + for (int i = 0; i < oldSenders.size(); ++i) { + oldSenders.get(i).draw(canvas); + } + for (int i = 0; i < senders.size(); ++i) { + senders.get(i).draw(canvas); + } + } + + private Sender pressedSender; + @Override + public boolean onTouchEvent(MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + if (pressedSender != null) { + pressedSender.bounce.setPressed(false); + } + pressedSender = null; + for (int i = 0; i < senders.size(); ++i) { + if (senders.get(i).clickBounds.contains(event.getX(), event.getY())) { + pressedSender = senders.get(i); + break; + } + } + if (pressedSender != null) { + pressedSender.bounce.setPressed(true); + } + } else if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) { + if (event.getAction() == MotionEvent.ACTION_UP) { + if (pressedSender != null && !pressedSender.anonymous && pressedSender.clickBounds.contains(event.getX(), event.getY()) && clickListener != null) { + clickListener.run(pressedSender.did); + } + } + if (pressedSender != null) { + pressedSender.bounce.setPressed(false); + } + pressedSender = null; + } + return pressedSender != null; + } + + public void setMyselfAsAnonymous(boolean anonymous) { + final long selfId = UserConfig.getInstance(currentAccount).getClientUserId(); + for (int i = 0; i < this.senders.size(); ++i) { + Sender sender = this.senders.get(i); + if (sender.did == selfId) { + sender.setAnonymous(anonymous); + return; + } + } + } + + public void setSenders(ArrayList<SenderData> senders) { + // remove old + for (int i = 0; i < this.senders.size(); ++i) { + Sender sender = this.senders.get(i); + SenderData senderData = null; + for (int j = 0; j < senders.size(); ++j) { + if (senders.get(j).did == sender.did) { + senderData = senders.get(j); + break; + } + } + if (senderData == null) { + sender.imageReceiver.onDetachedFromWindow(); + this.senders.remove(i); + i--; + sender.index = -1; + this.oldSenders.add(sender); + } + } + + // insert new, update existing + for (int i = 0; i < senders.size(); ++i) { + SenderData senderData = senders.get(i); + Sender sender = null; + for (int j = 0; j < this.senders.size(); ++j) { + if (this.senders.get(j).did == senderData.did) { + sender = this.senders.get(j); + break; + } + } + if (sender == null) { + for (int j = 0; j < oldSenders.size(); ++j) { + if (oldSenders.get(j).did == senderData.did) { + sender = oldSenders.get(j); + break; + } + } + if (sender != null) { + oldSenders.remove(sender); + sender.imageReceiver.onAttachedToWindow(); + this.senders.add(sender); + } + } + if (sender == null) { + sender = new Sender(senderData.did); + sender.animatedScale.set(0f, true); + this.senders.add(sender); + sender.animatedPosition.set(senders.size() - 1 - i, true); + } + sender.setStars(senderData.stars); + sender.setAnonymous(senderData.anonymous); + sender.index = senders.size() - 1 - i; + } + + invalidate(); + } + + private Utilities.Callback<Long> clickListener; + public void setOnSenderClickListener(Utilities.Callback<Long> listener) { + clickListener = listener; + } + + public class Sender { + + public int index; + public final RectF clickBounds = new RectF(); + public final AnimatedFloat animatedPosition = new AnimatedFloat(TopSendersView.this, 0, 600, CubicBezierInterpolator.EASE_OUT_QUINT); + public final AnimatedFloat animatedScale = new AnimatedFloat(TopSendersView.this, 0, 200, CubicBezierInterpolator.EASE_OUT_QUINT); + public final AnimatedFloat animatedAnonymous = new AnimatedFloat(TopSendersView.this, 0, 350, CubicBezierInterpolator.EASE_OUT_QUINT); + + public final long did; + public final ImageReceiver imageReceiver = new ImageReceiver(TopSendersView.this); + public final AvatarDrawable avatarDrawable = new AvatarDrawable(); + public final AvatarDrawable anonymousAvatarDrawable = new AvatarDrawable(); + public Text text; + public Text starsText; + public boolean anonymous; + + public final ButtonBounce bounce = new ButtonBounce(TopSendersView.this); + + public Sender(long did) { + this.did = did; + + String name; + if (did >= 0) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(did); + name = UserObject.getForcedFirstName(user); + + avatarDrawable.setInfo(user); + imageReceiver.setForUserOrChat(user, avatarDrawable); + } else { + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did); + name = chat == null ? "" : chat.title; + + avatarDrawable.setInfo(chat); + imageReceiver.setForUserOrChat(chat, avatarDrawable); + } + imageReceiver.setRoundRadius(dp(56)); + imageReceiver.onAttachedToWindow(); + + anonymousAvatarDrawable.setAvatarType(AvatarDrawable.AVATAR_TYPE_ANONYMOUS); + anonymousAvatarDrawable.setColor(Theme.getColor(Theme.key_avatar_backgroundGray)); + + text = new Text(name, 12); + } + + public void detach() { + imageReceiver.onDetachedFromWindow(); + } + + public void setAnonymous(boolean anonymous) { + if (this.anonymous != anonymous) { + this.anonymous = anonymous; + + String name; + if (anonymous) { + name = LocaleController.getString(R.string.StarsReactionAnonymous); + } else if (did >= 0) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(did); + name = UserObject.getForcedFirstName(user); + } else { + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did); + name = chat == null ? "" : chat.title; + } + + text = new Text(name, 12); + + TopSendersView.this.invalidate(); + } + } + + public void setStars(long stars) { + starsText = new Text(StarsIntroActivity.replaceStars("⭐️" + LocaleController.formatNumber(stars, ','), .85f), 12, AndroidUtilities.getTypeface("fonts/num.otf")); + } + + public void draw(Canvas canvas) { + final float position = animatedPosition.set(index); + final float alpha = animatedScale.set(index >= 0 && index < senders.size()); + + canvas.save(); + final float cx = dp(40) + (TopSendersView.this.getWidth() - dp(80)) / Math.max(1, count) * (count - (.5f + position)); + final float cy = dp(40); + + final float w = (TopSendersView.this.getWidth() - dp(80)) / Math.max(1, count); + clickBounds.set(cx - w / 2f, cy - dp(50), cx + w / 2f, cy + dp(50)); + + canvas.scale(.7f + .3f * alpha, .7f + .3f * alpha, cx, cy); + final float s = bounce.getScale(0.04f); + canvas.scale(s, s, cx, cy); + + if (alpha > 0) { + final float anonymous = animatedAnonymous.set(this.anonymous); + if (anonymous < 1) { + imageReceiver.setImageCoords(cx - dp(56) / 2f, cy - dp(56) / 2f, dp(56), dp(56)); + imageReceiver.setAlpha(alpha); + imageReceiver.draw(canvas); + imageReceiver.setAlpha(1f); + } + if (anonymous > 0) { + anonymousAvatarDrawable.setBounds((int) cx - dp(56) / 2, (int) cy - dp(56) / 2, (int) cx + dp(56) / 2, (int) cy + dp(56) / 2); + anonymousAvatarDrawable.setAlpha((int) (0xFF * alpha * anonymous)); + anonymousAvatarDrawable.draw(canvas); + anonymousAvatarDrawable.setAlpha(0xFF); + } + } + + rectTmp.set(cx - starsText.getCurrentWidth() / 2f - dp(5.66f), cy + dp(23) - dp(16) / 2f, cx + starsText.getCurrentWidth() / 2f + dp(5.66f), cy + dp(23) + dp(16) / 2f); + canvas.drawRoundRect(rectTmp, rectTmp.height() / 2f, rectTmp.height() / 2f, backgroundPaint); + starsBackgroundPaint.setAlpha((int) (0xFF * alpha)); + canvas.drawRoundRect(rectTmp, rectTmp.height() / 2f, rectTmp.height() / 2f, starsBackgroundPaint); + starsText.draw(canvas, cx - starsText.getCurrentWidth() / 2f, cy + dp(23), 0xFFFFFFFF, alpha); + + text.draw(canvas, cx - text.getCurrentWidth() / 2f, cy + dp(42), Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider), alpha); + + canvas.restore(); + } + + } + + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/SuperRipple.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/SuperRipple.java new file mode 100644 index 00000000000..e9333aeeb71 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/SuperRipple.java @@ -0,0 +1,169 @@ +package org.telegram.ui.Stars; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; +import android.graphics.RenderEffect; +import android.graphics.RuntimeShader; +import android.os.Build; +import android.view.RoundedCorner; +import android.view.View; +import android.view.WindowInsets; + +import androidx.annotation.RequiresApi; + +import com.google.zxing.common.detector.MathUtils; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.R; +import org.telegram.ui.Components.CubicBezierInterpolator; +import org.telegram.ui.Components.RLottieDrawable; + +import java.util.ArrayList; + +@RequiresApi(api = Build.VERSION_CODES.TIRAMISU) +public class SuperRipple extends ISuperRipple { + + public static boolean supports() { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU; + } + + public static class Effect { + public final ValueAnimator animator; + public final float cx, cy; + public final float intensity; + public float t; + + private Effect( + float cx, float cy, + float intensity, + ValueAnimator animator + ) { + this.cx = cx; + this.cy = cy; + this.intensity = intensity; + this.animator = animator; + } + } + + public final ArrayList<Effect> effects = new ArrayList<>(); + + public final RuntimeShader shader; + public RenderEffect effect; + + public final int MAX_COUNT = 7; + public int count; + public int width, height; + public float density; + public final float[] t = new float[MAX_COUNT]; + public final float[] centerX = new float[MAX_COUNT]; + public final float[] centerY = new float[MAX_COUNT]; + public final float[] intensity = new float[MAX_COUNT]; + + public SuperRipple(View view) { + super(view); + + final String code = RLottieDrawable.readRes(null, R.raw.superripple_effect); + shader = new RuntimeShader(code); + setupSizeUniforms(true); + + effect = RenderEffect.createRuntimeShaderEffect(shader, "img"); + } + + private void setupSizeUniforms(boolean force) { + if (force || width != view.getWidth() || height != view.getHeight() || Math.abs(density - AndroidUtilities.density) > 0.01f) { + shader.setFloatUniform("size", width = view.getWidth(), height = view.getHeight()); + shader.setFloatUniform("density", density = AndroidUtilities.density); + + final WindowInsets insets = view.getRootWindowInsets(); + final RoundedCorner topLeftCorner = insets == null ? null : insets.getRoundedCorner(RoundedCorner.POSITION_TOP_LEFT); + final RoundedCorner topRightCorner = insets == null ? null : insets.getRoundedCorner(RoundedCorner.POSITION_TOP_RIGHT); + final RoundedCorner bottomLeftCorner = insets == null ? null : insets.getRoundedCorner(RoundedCorner.POSITION_BOTTOM_LEFT); + final RoundedCorner bottomRightCorner = insets == null ? null : insets.getRoundedCorner(RoundedCorner.POSITION_BOTTOM_RIGHT); + + shader.setFloatUniform( + "radius", + bottomRightCorner == null || view != view.getRootView() && AndroidUtilities.navigationBarHeight > 0 ? 0 : bottomRightCorner.getRadius(), + topRightCorner == null ? 0 : topRightCorner.getRadius(), + bottomLeftCorner == null || view != view.getRootView() && AndroidUtilities.navigationBarHeight > 0 ? 0 : bottomLeftCorner.getRadius(), + topLeftCorner == null ? 0 : topLeftCorner.getRadius() + ); + } + } + + @Override + public void animate(float cx, float cy, float intensity) { + if (effects.size() >= MAX_COUNT) return; + + final float speed = 1200 * AndroidUtilities.density; + final float max_dist = Math.max( + Math.max( + MathUtils.distance(0, 0, cx, cy), + MathUtils.distance(view.getWidth(), 0, cx, cy) + ), Math.max( + MathUtils.distance(0, view.getHeight(), cx, cy), + MathUtils.distance(view.getWidth(), view.getHeight(), cx, cy) + ) + ); + final float duration = 2.0f * max_dist / speed; + + final ValueAnimator animator = ValueAnimator.ofFloat(0f, duration); + final Effect effect = new Effect(cx, cy, intensity, animator); + + animator.addUpdateListener(anm -> { + effect.t = (float) anm.getAnimatedValue(); + updateProperties(); + }); + animator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + effects.remove(effect); + updateProperties(); + } + }); + animator.setInterpolator(CubicBezierInterpolator.EASE_OUT); + animator.setDuration((long) (duration * 1000L)); + + effects.add(effect); + updateProperties(); + + animator.start(); + } + + private void updateProperties() { + boolean changed = false; + if (!effects.isEmpty()) { + changed = changed || count != Math.min(MAX_COUNT, effects.size()); + + count = Math.min(MAX_COUNT, effects.size()); + for (int i = 0; i < count; ++i) { + Effect e = effects.get(i); + + changed = changed || Math.abs(t[i] - e.t) > 0.001f; + t[i] = e.t; + changed = changed || Math.abs(centerX[i] - e.cx) > 0.001f; + centerX[i] = e.cx; + changed = changed || Math.abs(centerY[i] - e.cy) > 0.001f; + centerY[i] = e.cy; + changed = changed || Math.abs(intensity[i] - e.intensity) > 0.001f; + intensity[i] = e.intensity; + } + + changed = changed || width != view.getWidth() || height != view.getHeight() || Math.abs(density - AndroidUtilities.density) > 0.01f; + if (changed) { + shader.setIntUniform("count", count); + shader.setFloatUniform("t", t); + shader.setFloatUniform("centerX", centerX); + shader.setFloatUniform("centerY", centerY); + shader.setFloatUniform("intensity", intensity); + setupSizeUniforms(false); + effect = RenderEffect.createRuntimeShaderEffect(shader, "img"); + } + } + view.setRenderEffect(effects.isEmpty() ? null : effect); + if (changed) { + view.invalidate(); + } + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stars/SuperRippleFallback.java b/TMessagesProj/src/main/java/org/telegram/ui/Stars/SuperRippleFallback.java new file mode 100644 index 00000000000..7c200860434 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stars/SuperRippleFallback.java @@ -0,0 +1,146 @@ +package org.telegram.ui.Stars; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; +import android.graphics.Outline; +import android.graphics.Path; +import android.graphics.RenderEffect; +import android.os.Build; +import android.view.RoundedCorner; +import android.view.View; +import android.view.ViewOutlineProvider; +import android.view.WindowInsets; +import android.widget.FrameLayout; + +import androidx.annotation.RequiresApi; + +import com.google.zxing.common.detector.MathUtils; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.ui.Components.CubicBezierInterpolator; + +import java.util.ArrayList; + +// for Android that doesn't support AGSL +@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) +public class SuperRippleFallback extends ISuperRipple { + + public static class Effect { + public final ValueAnimator animator; + public final float cx, cy; + public final float intensity; + public float t; + public float duration; + + private Effect( + float cx, float cy, + float intensity, + ValueAnimator animator + ) { + this.cx = cx; + this.cy = cy; + this.intensity = intensity; + this.animator = animator; + } + } + + public final float[] radii = new float[8]; + private final Path outlineProviderPath = new Path(); + private final ViewOutlineProvider outlineProvider = new ViewOutlineProvider() { + @Override + public void getOutline(View view, Outline outline) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), radii[0]); + } + } + }; + + public final ArrayList<Effect> effects = new ArrayList<>(); + public final int MAX_COUNT = 10; + + public SuperRippleFallback(View view) { + super(view); + +// radii[0] = radii[1] = // top left +// radii[2] = radii[3] = // top right +// radii[4] = radii[5] = // bottom right +// radii[6] = radii[7] = // bottom left + + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { + final WindowInsets insets = view.getRootWindowInsets(); + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) { + final RoundedCorner topLeftCorner = insets.getRoundedCorner(RoundedCorner.POSITION_TOP_LEFT); + final RoundedCorner topRightCorner = insets.getRoundedCorner(RoundedCorner.POSITION_TOP_RIGHT); + final RoundedCorner bottomLeftCorner = insets.getRoundedCorner(RoundedCorner.POSITION_BOTTOM_LEFT); + final RoundedCorner bottomRightCorner = insets.getRoundedCorner(RoundedCorner.POSITION_BOTTOM_RIGHT); + + radii[0] = radii[1] = topLeftCorner == null ? 0 : topLeftCorner.getRadius(); + radii[2] = radii[3] = topRightCorner == null ? 0 : topRightCorner.getRadius(); + radii[4] = radii[5] = bottomRightCorner == null || view != view.getRootView() && AndroidUtilities.navigationBarHeight > 0 ? 0 : bottomRightCorner.getRadius(); + radii[6] = radii[7] = bottomLeftCorner == null || view != view.getRootView() && AndroidUtilities.navigationBarHeight > 0 ? 0 : bottomLeftCorner.getRadius(); + } else { + + } + } + + outlineProviderPath.rewind(); + outlineProviderPath.addRoundRect(0, 0, view.getWidth(), view.getHeight(), radii, Path.Direction.CW); + } + + @Override + public void animate(float cx, float cy, float intensity) { + if (effects.size() >= MAX_COUNT) return; + + final float duration = 0.5f; + + final ValueAnimator animator = ValueAnimator.ofFloat(0f, duration); + final Effect effect = new Effect(cx, cy, intensity, animator); + effect.duration = duration; + + animator.addUpdateListener(anm -> { + effect.t = (float) anm.getAnimatedValue(); + updateProperties(); + }); + animator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + effects.remove(effect); + updateProperties(); + } + }); + animator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + animator.setDuration((long) (duration * 1000L)); + + effects.add(effect); + updateProperties(); + + animator.start(); + } + + private void updateProperties() { + float s = 1f, px = 0, py = 0, ps = 0; + for (Effect effect : effects) { + float t = effect.t / effect.duration; + float x = (1f - (float) Math.sin(Math.PI * t)); + s *= (1f - .04f * effect.intensity) + .04f * effect.intensity * x; + px += effect.cx * 1f; + py += effect.cy * 1f; + ps += 1f; + } + if (ps < 1) { + px += view.getWidth() / 2f * (1f - ps); + py += view.getHeight() / 2f * (1f - ps); + ps = 1f; + } + view.setScaleX(s); + view.setScaleY(s); + view.setPivotX(px / ps); + view.setPivotY(py / ps); + if (view.getOutlineProvider() != (effects.isEmpty() ? null : outlineProvider)) { + view.setOutlineProvider(effects.isEmpty() ? null : outlineProvider); + view.invalidate(); + } + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/StatisticActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/StatisticActivity.java index 9abad43c639..0c22ae065b2 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/StatisticActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/StatisticActivity.java @@ -119,7 +119,7 @@ public static BaseFragment create(TLRPC.Chat chat, boolean startFromBoosts) { args.putBoolean("is_megagroup", chat.megagroup); args.putBoolean("start_from_boosts", startFromBoosts); TLRPC.ChatFull chatInfo = MessagesController.getInstance(UserConfig.selectedAccount).getChatFull(chat.id); - if (chatInfo == null || !chatInfo.can_view_stats) { + if (chatInfo == null || !chatInfo.can_view_stats && !chatInfo.can_view_stars_revenue) { return new BoostsActivity(-chat.id); } return new StatisticActivity(args); @@ -172,7 +172,7 @@ public static BaseFragment create(TLRPC.Chat chat, boolean startFromBoosts) { private BaseChartView.SharedUiComponents sharedUi; private LinearLayout progressLayout; private final boolean isMegagroup; - private boolean startFromBoosts; + private boolean startFromBoosts, startFromMonetization; private long maxDateOverview; private long minDateOverview; @@ -187,6 +187,7 @@ public StatisticActivity(Bundle args) { chatId = args.getLong("chat_id"); isMegagroup = args.getBoolean("is_megagroup", false); startFromBoosts = args.getBoolean("start_from_boosts", false); + startFromMonetization = args.getBoolean("start_from_monetization", false); onlyBoostsStat = args.getBoolean("only_boosts", false); this.chat = getMessagesController().getChatFull(chatId); } @@ -571,16 +572,20 @@ public View createView(Context context) { sharedUi = new BaseChartView.SharedUiComponents(); TLRPC.Chat currentChat = MessagesController.getInstance(currentAccount).getChat(chatId); TLRPC.ChatFull chatFull = MessagesController.getInstance(currentAccount).getChatFull(chatId); + final boolean hasStats = chatFull != null && chatFull.can_view_stats; boolean isBoostSupported = ChatObject.isBoostSupported(currentChat); final boolean hasMonetization = ChatObject.isChannelAndNotMegaGroup(currentChat) && chatFull != null && (chatFull.can_view_revenue || chatFull.can_view_stars_revenue); BottomPagerTabs storiesTabsView = new BottomPagerTabs(context, getResourceProvider()) { @Override public Tab[] createTabs() { ArrayList<Tab> tabs = new ArrayList<>(); - tabs.add(new Tab(0, R.raw.stats, 25, 49, getString(R.string.Statistics)).customFrameInvert()); - tabs.add(new Tab(1, R.raw.boosts, 25, 49, getString(R.string.Boosts))); + int i = 0; + if (hasStats) { + tabs.add(new Tab(i++, R.raw.stats, 25, 49, getString(R.string.Statistics)).customFrameInvert()); + } + tabs.add(new Tab(i++, R.raw.boosts, 25, 49, getString(R.string.Boosts))); if (hasMonetization) { - tabs.add(new Tab(2, R.raw.monetize, 19, 45, getString(R.string.Monetization))); + tabs.add(new Tab(i++, R.raw.monetize, 19, 45, getString(R.string.Monetization))); } return tabs.toArray(new Tab[0]); } @@ -611,37 +616,33 @@ protected void onTabAnimationUpdate(boolean manual) { monetizationLayout = new ChannelMonetizationLayout(getContext(), StatisticActivity.this, currentAccount, -chatId, getResourceProvider(), chatFull.can_view_revenue, chatFull.can_view_stars_revenue); monetizationLayout.setActionBar(actionBar); } - boolean showTabs = isBoostSupported && !onlyBoostsStat; - if (showTabs && startFromBoosts) { - viewPagerFixed.setPosition(1); - } viewPagerFixed.setAdapter(new ViewPagerFixed.Adapter() { @Override public int getItemCount() { - int count = onlyBoostsStat ? 1 : 1 + (isBoostSupported ? 1 : 0); - if (hasMonetization) { - count++; - } - return count; + if (onlyBoostsStat) return 1; + return ( + (hasStats ? 1 : 0) + + (isBoostSupported ? 1 : 0) + + (hasMonetization ? 1 : 0) + ); } @Override public View createView(int viewType) { - if (viewType == 0) { - return statisticLayout; + if (onlyBoostsStat) { + return boostLayout; } - viewType--; - if (viewType == 0) { - if (!onlyBoostsStat && isBoostSupported) { - return boostLayout; - } else { - return monetizationLayout; - } - } else { + if (hasStats) { + if (viewType == 0) return statisticLayout; + viewType--; + } + if (isBoostSupported) { + if (viewType == 0) return boostLayout; viewType--; } - if (viewType == 0) { - return monetizationLayout; + if (hasMonetization) { + if (viewType == 0) return monetizationLayout; + viewType--; } return statisticLayout; } @@ -656,6 +657,13 @@ public void bindView(View view, int position, int viewType) { } }); + boolean showTabs = isBoostSupported && !onlyBoostsStat; + if (showTabs && startFromBoosts) { + viewPagerFixed.setPosition(hasStats ? 1 : 0); + } else if (showTabs && startFromMonetization) { + storiesTabsView.setProgress((hasStats ? 1 : 0) + (!onlyBoostsStat && isBoostSupported ? 1 : 0)); + viewPagerFixed.setPosition((hasStats ? 1 : 0) + (!onlyBoostsStat && isBoostSupported ? 1 : 0)); + } FrameLayout contentLayout = new SizeNotifierFrameLayout(getContext()); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/PeerStoriesView.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/PeerStoriesView.java index 11a31bfb26b..4587fcbdc28 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/PeerStoriesView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/PeerStoriesView.java @@ -827,14 +827,14 @@ public void onLinkClick(CharacterStyle span, View spoilersTextView) { if (span instanceof URLSpanUserMention) { TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(Utilities.parseLong(((URLSpanUserMention) span).getURL())); if (user != null) { - MessagesController.openChatOrProfileWith(user, null, storyViewer.fragment, 0, false); + MessagesController.getInstance(currentAccount).openChatOrProfileWith(user, null, storyViewer.fragment, 0, false); } } else if (span instanceof URLSpanNoUnderline) { String str = ((URLSpanNoUnderline) span).getURL(); - if (str != null && str.startsWith("#")) { + if (str != null && (str.startsWith("#") || str.startsWith("$"))) { Bundle args = new Bundle(); args.putInt("type", MediaActivity.TYPE_STORIES_SEARCH); - args.putString("hashtag", str.substring(1)); + args.putString("hashtag", str); if (storyViewer != null) { storyViewer.presentFragment(new MediaActivity(args, null)); } @@ -891,7 +891,7 @@ public void onLinkLongPress(URLSpan span, View spoilersTextView, Runnable done) try { try { Uri uri = Uri.parse(formattedUrl); - formattedUrl = Browser.replaceHostname(uri, IDN.toUnicode(uri.getHost(), IDN.ALLOW_UNASSIGNED)); + formattedUrl = Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null); } catch (Exception e) { FileLog.e(e, false); } @@ -1158,7 +1158,7 @@ protected boolean verifyDrawable(@NonNull Drawable who) { MessagesController.getInstance(currentAccount).getStoriesController().getDraftsController().load(); } final boolean userCanEditStory = isSelf || MessagesController.getInstance(currentAccount).getStoriesController().canEditStory(currentStory.storyItem); - final boolean canEditStory = isSelf || (isChannel && userCanEditStory); + final boolean canEditStory = isSelf || ((isChannel || isBotsPreview()) && userCanEditStory); final boolean speedControl = currentStory.isVideo; popupMenu = new CustomPopupMenu(getContext(), resourcesProvider, speedControl) { private boolean edit; @@ -1290,8 +1290,8 @@ protected void onCreate(ActionBarPopupWindow.ActionBarPopupWindowLayout popupLay popupLayout.addView(gap, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 8)); } - if (!unsupported && MessagesController.getInstance(currentAccount).storiesEnabled() && userCanEditStory) { - editStoryItem = ActionBarMenuItem.addItem(popupLayout, R.drawable.msg_edit, LocaleController.getString("EditStory", R.string.EditStory), false, resourcesProvider); + if (!unsupported && (isBotsPreview() || MessagesController.getInstance(currentAccount).storiesEnabled()) && userCanEditStory) { + editStoryItem = ActionBarMenuItem.addItem(popupLayout, R.drawable.msg_edit, LocaleController.getString(isBotsPreview() ? R.string.EditBotPreview : R.string.EditStory), false, resourcesProvider); editStoryItem.setOnClickListener(v -> { if (v.getAlpha() < 1) { AndroidUtilities.shakeViewSpring(v, shiftDp = -shiftDp); @@ -1320,6 +1320,14 @@ protected void onCreate(ActionBarPopupWindow.ActionBarPopupWindowLayout popupLay if (entry != null) { entry = entry.copy(); } + if (isBotsPreview()) { + entry.botId = dialogId; + entry.editingBotPreview = MessagesController.toInputMedia(currentStory.storyItem.media); + if (storyViewer.storiesList instanceof StoriesController.BotPreviewsList) { + StoriesController.BotPreviewsList list = (StoriesController.BotPreviewsList) storyViewer.storiesList; + entry.botLang = list.lang_code; + } + } editor.openEdit(StoryRecorder.SourceView.fromStoryViewer(storyViewer), entry, time, true); editor.setOnFullyOpenListener(() -> { editOpened = true; @@ -1370,6 +1378,129 @@ protected void onCreate(ActionBarPopupWindow.ActionBarPopupWindowLayout popupLay } } + if (currentStory.storyItem != null && currentStory.isVideo && (currentStory.storyItem.pinned || isEditBotsPreview())) { + ActionBarMenuSubItem item = ActionBarMenuItem.addItem(popupLayout, R.drawable.menu_cover_stories, LocaleController.getString(R.string.StoryEditCoverMenu), false, resourcesProvider); + item.setOnClickListener(v -> { + File f = currentStory.getPath(); + if (f == null || !f.exists()) { + showDownloadAlert(); + return; + } + Activity activity = AndroidUtilities.findActivity(context); + if (activity == null) { + return; + } + edit = true; + if (popupMenu != null) { + popupMenu.dismiss(); + } + Runnable openEdit = () -> { + StoryRecorder editor = StoryRecorder.getInstance(activity, currentAccount); + long time = 0; + if (playerSharedScope != null && playerSharedScope.player != null) { + time = playerSharedScope.player.currentPosition; + } + StoryEntry entry = StoryEntry.fromStoryItem(currentStory.getPath(), currentStory.storyItem); + entry.editStoryPeerId = dialogId; + entry.cover = StoryEntry.getCoverTime(currentStory.storyItem); + if (entry != null) { + entry = entry.copy(); + } + entry.isEditingCover = true; + entry.editingCoverDocument = currentStory.storyItem.media.document; + final TL_stories.StoryItem finalStoryItem = currentStory.storyItem; + entry.updateDocumentRef = whenDone -> { + if (finalStoryItem instanceof StoriesController.BotPreview && ((StoriesController.BotPreview) finalStoryItem).list != null) { + StoriesController.BotPreviewsList list = ((StoriesController.BotPreview) finalStoryItem).list; + list.reload(() -> { + for (int i = 0; i < list.messageObjects.size(); ++i) { + MessageObject msg = list.messageObjects.get(i); + if (msg == null || msg.storyItem == null || msg.storyItem.media == null) continue; + if (storyItem.media.document != null) { + if (msg.storyItem.media.document == null) continue; + if (msg.storyItem.media.document.id == storyItem.media.document.id) { + whenDone.run(msg.storyItem.media.document); + return; + } + } + } + whenDone.run(null); + }); + } else { + TL_stories.TL_stories_getStoriesByID req = new TL_stories.TL_stories_getStoriesByID(); + req.peer = MessagesController.getInstance(currentAccount).getInputPeer(finalStoryItem.dialogId); + req.id.add(finalStoryItem.id); + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + if (res instanceof TL_stories.TL_stories_stories) { + TL_stories.TL_stories_stories stories = (TL_stories.TL_stories_stories) res; + MessagesController.getInstance(currentAccount).putUsers(stories.users, false); + MessagesController.getInstance(currentAccount).putChats(stories.chats, false); + for (int i = 0; i < stories.stories.size(); ++i) { + if (stories.stories.get(i).id == finalStoryItem.id) { + whenDone.run(stories.stories.get(i).media.document); + return; + } + } + } + whenDone.run(null); + })); + } + }; + if (isBotsPreview()) { + entry.botId = dialogId; + entry.editingBotPreview = MessagesController.toInputMedia(currentStory.storyItem.media); + if (storyViewer.storiesList instanceof StoriesController.BotPreviewsList) { + StoriesController.BotPreviewsList list = (StoriesController.BotPreviewsList) storyViewer.storiesList; + entry.botLang = list.lang_code; + } + } + editor.openEdit(StoryRecorder.SourceView.fromStoryViewer(storyViewer), entry, time, true); + editor.setOnFullyOpenListener(() -> { + editOpened = true; + setActive(false); + }); + editor.setOnPrepareCloseListener((t, close, sent, did) -> { + final long start = System.currentTimeMillis(); + if (playerSharedScope.player == null) { + delegate.setPopupIsVisible(false); + setActive(true); + editOpened = false; + onImageReceiverThumbLoaded = () -> { + AndroidUtilities.cancelRunOnUIThread(close); + AndroidUtilities.runOnUIThread(close); + }; + if (sent) { + updatePosition(); + } + AndroidUtilities.runOnUIThread(close, 400); + return; + } + playerSharedScope.firstFrameRendered = playerSharedScope.player.firstFrameRendered = false; + playerSharedScope.player.setOnReadyListener(() -> { + AndroidUtilities.cancelRunOnUIThread(close); + AndroidUtilities.runOnUIThread(close, Math.max(0, 32L - (System.currentTimeMillis() - start))); + }); + delegate.setPopupIsVisible(false); + if (muteIconView != null) { + muteIconView.setAnimation(sharedResources.muteDrawable); + } + if (videoDuration > 0 && t > videoDuration - 1400) { + t = 0L; + } + setActive(t, true); + editOpened = false; + AndroidUtilities.runOnUIThread(close, 400); + if (sent) { + updatePosition(); + } + }); + }; + if (!delegate.releasePlayer(openEdit)) { + openEdit.run(); + } + }); + } + if (isSelf || (isChannel && MessagesController.getInstance(currentAccount).getStoriesController().canEditStories(storyItem.dialogId))) { final boolean pin = !storyItem.pinned; String title; @@ -1476,7 +1607,7 @@ protected void onCreate(ActionBarPopupWindow.ActionBarPopupWindowLayout popupLay name = name.substring(0, index); } String finalName = name; - if (!UserObject.isService(dialogId)) { + if (!UserObject.isService(dialogId) && !isBotsPreview()) { if (!muted) { ActionBarMenuSubItem item = ActionBarMenuItem.addItem(popupLayout, R.drawable.msg_mute, LocaleController.getString("NotificationsStoryMute2", R.string.NotificationsStoryMute2), false, resourcesProvider); item.setOnClickListener(v -> { @@ -1633,7 +1764,7 @@ public void setColorFilter(ColorFilter colorFilter) { addViewStatistics(popupLayout, currentStory.storyItem); if (!unsupported) { - if (!UserObject.isService(dialogId)) { + if (!UserObject.isService(dialogId) && !isBotsPreview()) { ActionBarMenuItem.addItem(popupLayout, R.drawable.msg_report, LocaleController.getString("ReportChat", R.string.ReportChat), false, resourcesProvider).setOnClickListener(v -> { AlertsCreator.createReportAlert(getContext(), dialogId, 0, currentStory.storyItem.id, storyViewer.fragment, resourcesProvider, null); if (popupMenu != null) { @@ -1792,6 +1923,7 @@ public void onStateChanged(boolean isSelected) { } private void createStealthModeItem(ActionBarPopupWindow.ActionBarPopupWindowLayout popupLayout) { + if (isBotsPreview()) return; if (UserConfig.getInstance(currentAccount).isPremium()) { ActionBarMenuItem.addItem(popupLayout, R.drawable.msg_stories_stealth2, LocaleController.getString(R.string.StealthModeButton), false, resourcesProvider).setOnClickListener(v -> { if (stealthModeIsActive) { @@ -2721,6 +2853,10 @@ public boolean onceVoiceAvailable() { } checkStealthMode(false); + if (isBotsPreview()) { + chatActivityEnterView.setVisibility(View.GONE); + } + reactionsContainerIndex = getChildCount(); } @@ -2773,7 +2909,7 @@ public void sendBotInlineResult(TLRPC.BotInlineResult result, boolean notify, in SendMessagesHelper.prepareSendingBotContextResult(storyViewer.fragment, getAccountInstance(), result, params, dialogId, null, null, currentStory.storyItem, null, notify, scheduleDate, null, 0); chatActivityEnterView.setFieldText(""); afterMessageSend(); - MediaDataController.getInstance(currentAccount).increaseInlineRaiting(uid); + MediaDataController.getInstance(currentAccount).increaseInlineRating(uid); } }); addView(mentionContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.LEFT | Gravity.BOTTOM)); @@ -3295,7 +3431,7 @@ private void bindInternal(int startFromPosition) { } if (chatActivityEnterView != null) { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-dialogId); - chatActivityEnterView.setVisibility(isGroup && (ChatObject.canSendPlain(chat) || ChatObject.isPossibleRemoveChatRestrictionsByBoosts(chat)) ? View.VISIBLE : View.GONE); + chatActivityEnterView.setVisibility(!isBotsPreview() && isGroup && (ChatObject.canSendPlain(chat) || ChatObject.isPossibleRemoveChatRestrictionsByBoosts(chat)) ? View.VISIBLE : View.GONE); chatActivityEnterView.getEditField().setText(storyViewer.getDraft(dialogId, currentStory.storyItem)); chatActivityEnterView.setDialogId(dialogId, currentAccount); chatActivityEnterView.updateRecordButton(chat, null); @@ -3377,7 +3513,7 @@ private void bindInternal(int startFromPosition) { } updatePosition(); if (chatActivityEnterView != null) { - chatActivityEnterView.setVisibility(UserObject.isService(dialogId) ? View.GONE : View.VISIBLE); + chatActivityEnterView.setVisibility(isBotsPreview() || UserObject.isService(dialogId) ? View.GONE : View.VISIBLE); chatActivityEnterView.getEditField().setText(storyViewer.getDraft(dialogId, currentStory.storyItem)); chatActivityEnterView.setDialogId(dialogId, currentAccount); TLRPC.UserFull userFull = MessagesController.getInstance(currentAccount).getUserFull(dialogId); @@ -3465,6 +3601,16 @@ public void preloadMainImage(long dialogId) { private void updateSelectedPosition() { if (day != null) { + int offset = 0; + if (uploadingStories != null && !uploadingStories.isEmpty()) { + offset = uploadingStories.size(); + for (int i = 0; i < uploadingStories.size(); ++i) { + if (Long.hashCode(uploadingStories.get(i).random_id) == storyViewer.dayStoryId) { + selectedPosition = i; + return; + } + } + } int index = day.indexOf(storyViewer.dayStoryId); if (index < 0) { if (!day.isEmpty()) { @@ -3475,7 +3621,7 @@ private void updateSelectedPosition() { } } } - selectedPosition = index; + selectedPosition = offset + index; } else { selectedPosition = storyViewer.savedPositions.get(dialogId, -1); if (selectedPosition == -1) { @@ -3499,6 +3645,19 @@ private void updateStoryItems() { if (storyViewer.isSingleStory) { storyItems.add(storyViewer.singleStory); } else if (day != null && storyViewer.storiesList != null) { + if (storyViewer.storiesList instanceof StoriesController.BotPreviewsList) { + uploadingStories.clear(); + ArrayList<StoriesController.UploadingStory> list = MessagesController.getInstance(currentAccount).getStoriesController().getUploadingStories(dialogId); + final String lang_code = ((StoriesController.BotPreviewsList) storyViewer.storiesList).lang_code; + if (list != null) { + for (int i = 0; i < list.size(); ++i) { + StoriesController.UploadingStory story = list.get(i); + if (story.entry != null && !story.entry.isEdit && TextUtils.equals(story.entry.botLang, lang_code)) { + uploadingStories.add(story); + } + } + } + } for (int id : day) { MessageObject messageObject = storyViewer.storiesList.findMessageObject(id); if (messageObject != null && messageObject.storyItem != null) { @@ -3612,8 +3771,8 @@ protected void onDraw(Canvas canvas) { private void deleteStory() { AlertDialog.Builder builder = new AlertDialog.Builder(getContext(), resourcesProvider); - builder.setTitle(LocaleController.getString("DeleteStoryTitle", R.string.DeleteStoryTitle)); - builder.setMessage(LocaleController.getString("DeleteStorySubtitle", R.string.DeleteStorySubtitle)); + builder.setTitle(LocaleController.getString(isBotsPreview() ? R.string.DeleteBotPreviewTitle : R.string.DeleteStoryTitle)); + builder.setMessage(LocaleController.getString(isBotsPreview() ? R.string.DeleteBotPreviewSubtitle : R.string.DeleteStorySubtitle)); builder.setPositiveButton(LocaleController.getString("Delete", R.string.Delete), (dialog, which) -> { currentStory.cancelOrDelete(); updateStoryItems(); @@ -3890,15 +4049,23 @@ private void updatePosition(boolean preload) { final boolean wasEditing = isEditing; final boolean wasFailed = isFailed; + final StoriesController.UploadingStory uploadingStory; + final TL_stories.StoryItem storyItem; + + if (storyViewer != null && storyViewer.storiesList != null && storyViewer.storiesList.type == StoriesController.StoriesList.TYPE_BOTS) { + uploadingStory = position >= 0 && position < uploadingStories.size() ? uploadingStories.get(position) : null; + int p = position - uploadingStories.size(); + storyItem = p >= 0 && p < storyItems.size() ? storyItems.get(p) : null; + } else { + storyItem = position >= 0 && position < storyItems.size() ? storyItems.get(position) : null; + int p = position - storyItems.size(); + uploadingStory = p >= 0 && p < uploadingStories.size() ? uploadingStories.get(p) : null; + } + currentStory.editingSourceItem = null; - if (!uploadingStories.isEmpty() && position >= storyItems.size()) { + if (uploadingStory != null) { isUploading = true; isEditing = false; - position -= storyItems.size(); - if (position < 0 || position >= uploadingStories.size()) { - return; - } - StoriesController.UploadingStory uploadingStory = uploadingStories.get(position); isFailed = uploadingStory.failed; isUploading = !isFailed; Drawable thumbDrawable = null; @@ -3921,11 +4088,10 @@ private void updatePosition(boolean preload) { isUploading = false; isEditing = false; isFailed = false; - if (position < 0 || position > storyItems.size() - 1) { + if (storyItem == null) { storyViewer.close(true); return; } - TL_stories.StoryItem storyItem = storyItems.get(position); StoriesController.UploadingStory editingStory = storiesController.findEditingStory(dialogId, storyItem); if (editingStory != null) { isEditing = true; @@ -4082,6 +4248,16 @@ private void updatePosition(boolean preload) { } else { subtitle = StoriesUtilities.getUploadingStr(headerView.subtitleView[0], false, isEditing); } + } else if (isBotsPreview()) { + if (currentStory.storyItem == null || currentStory.storyItem.media == null) { + subtitle = ""; + } else if (currentStory.storyItem.media.document != null) { + subtitle = LocaleController.formatStoryDate(currentStory.storyItem.media.document.date); + } else if (currentStory.storyItem.media.photo != null) { + subtitle = LocaleController.formatStoryDate(currentStory.storyItem.media.photo.date); + } else { + subtitle = ""; + } } else if (currentStory.storyItem != null) { if (currentStory.storyItem.date == -1) { subtitle = LocaleController.getString("CachedStory", R.string.CachedStory); @@ -4242,7 +4418,7 @@ private void updatePosition(boolean preload) { } } else { TLRPC.Chat chat = dialogId < 0 ? MessagesController.getInstance(currentAccount).getChat(-dialogId) : null; - if (UserObject.isService(dialogId) && chatActivityEnterView != null) { + if ((UserObject.isService(dialogId) || isBotsPreview()) && chatActivityEnterView != null) { chatActivityEnterView.setVisibility(View.GONE); } else if (!isSelf && (!isChannel || isGroup && (ChatObject.canSendPlain(chat) || ChatObject.isPossibleRemoveChatRestrictionsByBoosts(chat))) && chatActivityEnterView != null) { chatActivityEnterView.setVisibility(View.VISIBLE); @@ -4272,7 +4448,7 @@ private void updatePosition(boolean preload) { replyDisabledTextView.setVisibility(View.GONE); } if (bottomActionsLinearLayout != null) { - bottomActionsLinearLayout.setVisibility(View.VISIBLE); + bottomActionsLinearLayout.setVisibility(isBotsPreview() ? View.GONE : View.VISIBLE); } } @@ -4426,6 +4602,24 @@ private void updatePosition(boolean preload) { AndroidUtilities.cancelRunOnUIThread(showTapToSoundHint); AndroidUtilities.runOnUIThread(showTapToSoundHint, 250); } + + if (optionsIconView != null) { + optionsIconView.setVisibility(isBotsPreview() && !isEditBotsPreview() && (currentStory == null || !currentStory.isVideo) ? View.GONE : View.VISIBLE); + } + } + + private boolean isEditBotsPreview() { + if (!isBotsPreview()) return false; + TLRPC.User bot = MessagesController.getInstance(currentAccount).getUser(storyViewer.storiesList.dialogId); + return bot != null && bot.bot && bot.bot_can_edit; + } + + private boolean isBotsPreview() { + return ( + storyViewer != null && + storyViewer.storiesList != null && + storyViewer.storiesList.type == StoriesController.StoriesList.TYPE_BOTS + ); } private final Runnable showTapToSoundHint = () -> { @@ -5339,11 +5533,18 @@ protected void onDraw(Canvas canvas) { addView(backupImageView, LayoutHelper.createFrame(32, 32, 0, 12, 2, 0, 0)); setClipChildren(false); - titleView = new SimpleTextView(context); + titleView = new SimpleTextView(context) { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + setPivotY(getMeasuredHeight() / 2f); + } + }; titleView.setTextSize(14); titleView.setTypeface(AndroidUtilities.bold()); titleView.setMaxLines(1); titleView.setEllipsizeByGradient(dp(4)); + titleView.setPivotX(0); // titleView.setSingleLine(true); // titleView.setEllipsize(TextUtils.TruncateAt.END); NotificationCenter.listenEmojiLoading(titleView); @@ -5674,7 +5875,9 @@ public void clear() { } void cancelOrDelete() { - if (storyItem != null) { + if (storyItem instanceof StoriesController.BotPreview) { + ((StoriesController.BotPreview) storyItem).list.delete(storyItem.media); + } else if (storyItem != null) { storiesController.deleteStory(dialogId, storyItem); } else if (uploadingStory != null) { uploadingStory.cancel(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/SelfStoryViewsPage.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/SelfStoryViewsPage.java index 02dbd480a71..5c8ffcbc0c4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/SelfStoryViewsPage.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/SelfStoryViewsPage.java @@ -289,10 +289,11 @@ public boolean onItemClick(View view, int position) { return false; } - boolean isBlocked = messagesController.blockePeers.indexOfKey(user.id) >= 0; - boolean isContact = user != null && (user.contact || ContactsController.getInstance(currentAccount).contactsDict.get(user.id) != null); - boolean storiesShown = isStoryShownToUser(viewUser); - boolean storiesBlocked = messagesController.getStoriesController().isBlocked(viewUser); + final boolean isBlocked = messagesController.blockePeers.indexOfKey(user.id) >= 0; + final boolean isContact = user != null && (user.contact || ContactsController.getInstance(currentAccount).contactsDict.get(user.id) != null); + final boolean storiesShown = isStoryShownToUser(viewUser); + final boolean storiesBlocked = messagesController.getStoriesController().isBlocked(viewUser); + final boolean isSelf = UserObject.isUserSelf(user); String firstName = TextUtils.isEmpty(user.first_name) ? (TextUtils.isEmpty(user.last_name) ? "" : user.last_name) : user.first_name; int index; @@ -300,19 +301,22 @@ public boolean onItemClick(View view, int position) { firstName = firstName.substring(0, index); } final String firstNameFinal = firstName; + if (isSelf) { + return false; + } ItemOptions itemOptions = ItemOptions.makeOptions(storyViewer.containerView, resourcesProvider, view) .setGravity(Gravity.LEFT).ignoreX() .setScrimViewBackground(new ColorDrawable(Theme.getColor(Theme.key_dialogBackground, resourcesProvider))) .setDimAlpha(0x85) - .addIf(storiesShown && !storiesBlocked && !isBlocked, R.drawable.msg_stories_myhide, LocaleController.formatString(R.string.StoryHideFrom, firstNameFinal), () -> { + .addIf(storiesShown && !storiesBlocked && !isBlocked && !isSelf, R.drawable.msg_stories_myhide, LocaleController.formatString(R.string.StoryHideFrom, firstNameFinal), () -> { messagesController.getStoriesController().updateBlockUser(user.id, true); BulletinFactory.of(SelfStoryViewsPage.this, resourcesProvider) .createSimpleBulletin(R.raw.ic_ban, LocaleController.formatString(R.string.StoryHidFromToast, firstNameFinal)) .show(); cell.animateAlpha(isStoryShownToUser(viewUser) ? 1 : 0.5f, true); }).makeMultiline(false).cutTextInFancyHalf() - .addIf(storiesBlocked && !isBlocked, R.drawable.msg_menu_stories, LocaleController.formatString(R.string.StoryShowBackTo, firstNameFinal), () -> { + .addIf(storiesBlocked && !isBlocked && !isSelf, R.drawable.msg_menu_stories, LocaleController.formatString(R.string.StoryShowBackTo, firstNameFinal), () -> { messagesController.getStoriesController().updateBlockUser(user.id, false); BulletinFactory.of(SelfStoryViewsPage.this, resourcesProvider) .createSimpleBulletin(R.raw.contact_check, LocaleController.formatString(R.string.StoryShownBackToToast, firstNameFinal)) @@ -328,18 +332,18 @@ public boolean onItemClick(View view, int position) { // .show(); // cell.animateAlpha(isStoryShownToUser(viewUser) ? 1 : 0.5f, true); // }) - .addIf(!isContact && !isBlocked, R.drawable.msg_user_remove, LocaleController.getString(R.string.BlockUser), true, () -> { + .addIf(!isContact && !isBlocked && !isSelf, R.drawable.msg_user_remove, LocaleController.getString(R.string.BlockUser), true, () -> { messagesController.blockPeer(user.id); BulletinFactory.of(SelfStoryViewsPage.this, resourcesProvider).createBanBulletin(true).show(); cell.animateAlpha(isStoryShownToUser(viewUser) ? 1 : 0.5f, true); }) - .addIf(!isContact && isBlocked, R.drawable.msg_block, LocaleController.getString(R.string.Unblock), () -> { + .addIf(!isContact && isBlocked && !isSelf, R.drawable.msg_block, LocaleController.getString(R.string.Unblock), () -> { messagesController.getStoriesController().updateBlockUser(user.id, false); messagesController.unblockPeer(user.id); BulletinFactory.of(SelfStoryViewsPage.this, resourcesProvider).createBanBulletin(false).show(); cell.animateAlpha(isStoryShownToUser(viewUser) ? 1 : 0.5f, true); }) - .addIf(isContact, R.drawable.msg_user_remove, LocaleController.getString(R.string.StoryDeleteContact), true, () -> { + .addIf(isContact && !isSelf, R.drawable.msg_user_remove, LocaleController.getString(R.string.StoryDeleteContact), true, () -> { ArrayList<TLRPC.User> users = new ArrayList<>(); users.add(user); ContactsController.getInstance(currentAccount).deleteContact(users, false); @@ -349,6 +353,7 @@ public boolean onItemClick(View view, int position) { cell.animateAlpha(isStoryShownToUser(viewUser) ? 1 : 0.5f, true); }); + boolean shownCustomEmoji = false; if (viewUser.reaction instanceof TLRPC.TL_reactionCustomEmoji) { TLRPC.TL_reactionCustomEmoji customEmoji = (TLRPC.TL_reactionCustomEmoji) viewUser.reaction; TLRPC.InputStickerSet inputStickerSet = AnimatedEmojiDrawable.getDocumentFetcher(currentAccount).findStickerSet(customEmoji.document_id); @@ -377,9 +382,14 @@ public Theme.ResourcesProvider getResourceProvider() { itemOptions.dismiss(); }); itemOptions.addView(button); + shownCustomEmoji = true; } } + if (itemOptions.getItemsCount() <= 0 && !shownCustomEmoji) { + return false; + } + itemOptions.show(); try { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesController.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesController.java index 9d10db60747..3b34ccf27d5 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesController.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesController.java @@ -2,6 +2,7 @@ import android.content.Intent; import android.content.SharedPreferences; +import android.nfc.tech.NfcA; import android.text.TextUtils; import android.util.SparseArray; import android.webkit.MimeTypeMap; @@ -24,6 +25,7 @@ import org.telegram.messenger.DownloadController; import org.telegram.messenger.FileLoader; import org.telegram.messenger.FileLog; +import org.telegram.messenger.FileRefController; import org.telegram.messenger.ImageLocation; import org.telegram.messenger.LocaleController; import org.telegram.messenger.MediaController; @@ -35,6 +37,7 @@ import org.telegram.messenger.NotificationsController; import org.telegram.messenger.R; import org.telegram.messenger.SendMessagesHelper; +import org.telegram.messenger.Timer; import org.telegram.messenger.UserConfig; import org.telegram.messenger.UserObject; import org.telegram.messenger.Utilities; @@ -46,6 +49,7 @@ import org.telegram.tgnet.SerializedData; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.tgnet.tl.TL_stories; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.Theme; @@ -54,9 +58,9 @@ import org.telegram.ui.Components.Premium.LimitReachedBottomSheet; import org.telegram.ui.Components.Reactions.ReactionImageHolder; import org.telegram.ui.Components.Reactions.ReactionsLayoutInBubble; -import org.telegram.ui.Components.Text; import org.telegram.ui.LaunchActivity; import org.telegram.ui.StatisticActivity; +import org.telegram.ui.Stories.bots.BotPreviewsEditContainer; import org.telegram.ui.Stories.recorder.DraftsController; import org.telegram.ui.Stories.recorder.StoryEntry; import org.telegram.ui.Stories.recorder.StoryPrivacyBottomSheet; @@ -1485,8 +1489,8 @@ public void loadNextStories(boolean hidden) { } } - public void fillMessagesWithStories(LongSparseArray<ArrayList<MessageObject>> messagesWithUnknownStories, Runnable callback, int classGuid) { - storiesStorage.fillMessagesWithStories(messagesWithUnknownStories, callback, classGuid); + public void fillMessagesWithStories(LongSparseArray<ArrayList<MessageObject>> messagesWithUnknownStories, Runnable callback, int classGuid, Timer timer) { + storiesStorage.fillMessagesWithStories(messagesWithUnknownStories, callback, classGuid, timer); } LongSparseArray<TL_stories.StoryItem> resolvedStories = new LongSparseArray<>(); @@ -1767,11 +1771,11 @@ public class UploadingStory implements NotificationCenter.NotificationCenterDele public final long random_id; public final boolean edit; - final StoryEntry entry; + public final StoryEntry entry; private boolean entryDestroyed; String path; - String firstFramePath; - float progress; + public String firstFramePath; + public float progress; float convertingProgress, uploadProgress; boolean ready; boolean isVideo; @@ -1781,15 +1785,17 @@ public class UploadingStory implements NotificationCenter.NotificationCenterDele private long firstSecondSize = -1; private long duration; - private MessageObject messageObject; - private VideoEditedInfo info; - private boolean putMessages; - private boolean isCloseFriends; + public MessageObject messageObject; + public VideoEditedInfo info; + public boolean putMessages; + public boolean isCloseFriends; public boolean hadFailed; public boolean failed; long dialogId; + public MessageObject sharedMessageObject; + public UploadingStory(StoryEntry entry) { this.entry = entry; random_id = Utilities.random.nextLong(); @@ -1799,7 +1805,9 @@ public UploadingStory(StoryEntry entry) { } failed = hadFailed = entry.isError; - if (entry.isEdit) { + if (entry.botId != 0) { + dialogId = entry.botId; + } else if (entry.isEdit) { dialogId = entry.editStoryPeerId; } else { if (entry.peer == null || entry.peer instanceof TLRPC.TL_inputPeerSelf) { @@ -1822,7 +1830,11 @@ private void startForeground() { } public void start() { - if ((entry.isEdit || entry.isRepost && entry.repostMedia != null) && (!entry.editedMedia && entry.round == null)) { + if (entry.isEditingCover) { + TLRPC.TL_inputFileStoryDocument inputFile = new TLRPC.TL_inputFileStoryDocument(); + inputFile.doc = MessagesController.toInputDocument(entry.editingCoverDocument); + sendUploadedRequest(inputFile); + } else if ((entry.isEdit || entry.isRepost && entry.repostMedia != null) && (!entry.editedMedia && entry.round == null)) { sendUploadedRequest(null); return; } @@ -1911,6 +1923,22 @@ public void cleanup() { map.remove(entry.editStoryId); } } + if (previewMedia != null) { + StoriesList storiesList = getStoriesList(dialogId, StoriesList.TYPE_BOTS, false); + if (entry != null && entry.isEdit) { + if (storiesList instanceof BotPreviewsList) { + ((BotPreviewsList) storiesList).edit(entry.editingBotPreview, previewMedia); + } + BotPreviewsEditContainer.edit(currentAccount, dialogId, entry.botLang, entry.editingBotPreview, previewMedia); + } else { + if (storiesList instanceof BotPreviewsList) { + ((BotPreviewsList) storiesList).push(previewMedia); + } + BotPreviewsEditContainer.push(currentAccount, dialogId, entry.botLang, previewMedia); + } + + previewMedia = null; + } NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.storiesUpdated); if (entry != null && !entry.isEditSaved && !entryDestroyed) { entry.destroy(false); @@ -2022,11 +2050,24 @@ private void sendUploadedRequest(TLRPC.InputFile uploadedFile) { TLRPC.TL_inputMediaUploadedDocument inputMediaVideo = new TLRPC.TL_inputMediaUploadedDocument(); inputMediaVideo.file = uploadedFile; TLRPC.TL_documentAttributeVideo attributeVideo = new TLRPC.TL_documentAttributeVideo(); - SendMessagesHelper.fillVideoAttribute(path, attributeVideo, null); + if (entry.editingCoverDocument != null) { + for (int i = 0; i < entry.editingCoverDocument.attributes.size(); ++i) { + if (entry.editingCoverDocument.attributes.get(i) instanceof TLRPC.TL_documentAttributeVideo) { + attributeVideo = (TLRPC.TL_documentAttributeVideo) entry.editingCoverDocument.attributes.get(i); + break; + } + } + } else { + SendMessagesHelper.fillVideoAttribute(path, attributeVideo, null); + } + inputMediaVideo.attributes.add(attributeVideo); attributeVideo.supports_streaming = true; attributeVideo.flags |= 4; attributeVideo.preload_prefix_size = (int) firstSecondSize; - inputMediaVideo.attributes.add(attributeVideo); + if (entry.cover >= 0) { + attributeVideo.flags |= 16; + attributeVideo.video_start_ts = (entry.cover - entry.left * entry.duration) / 1000.0; + } if (entry.stickers != null && (!entry.stickers.isEmpty() || entry.editStickers != null && !entry.editStickers.isEmpty())) { inputMediaVideo.flags |= 1; inputMediaVideo.stickers = new ArrayList<>(entry.stickers); @@ -2063,112 +2104,136 @@ private void sendUploadedRequest(TLRPC.InputFile uploadedFile) { final int captionLimit = UserConfig.getInstance(currentAccount).isPremium() ? MessagesController.getInstance(currentAccount).storyCaptionLengthLimitPremium : MessagesController.getInstance(currentAccount).storyCaptionLengthLimitDefault; if (edit) { - TL_stories.TL_stories_editStory editStory = new TL_stories.TL_stories_editStory(); - editStory.id = entry.editStoryId; - editStory.peer = MessagesController.getInstance(currentAccount).getInputPeer(dialogId); + if (entry.botId != 0) { + TL_bots.editPreviewMedia editPreviewMedia = new TL_bots.editPreviewMedia(); + editPreviewMedia.bot = MessagesController.getInstance(currentAccount).getInputUser(entry.botId); + editPreviewMedia.media = entry.editingBotPreview; + editPreviewMedia.new_media = media; + editPreviewMedia.lang_code = entry.botLang; + + req = editPreviewMedia; + } else { + TL_stories.TL_stories_editStory editStory = new TL_stories.TL_stories_editStory(); + editStory.id = entry.editStoryId; + editStory.peer = MessagesController.getInstance(currentAccount).getInputPeer(dialogId); - if (media != null && entry.editedMedia) { - editStory.flags |= 1; - editStory.media = media; - } + if (media != null && entry.editedMedia) { + editStory.flags |= 1; + editStory.media = media; + } - if (entry.editedCaption && entry.caption != null) { - editStory.flags |= 2; - CharSequence[] caption = new CharSequence[]{ entry.caption }; - if (caption[0].length() > captionLimit) { - caption[0] = caption[0].subSequence(0, captionLimit); + if (entry.editedCaption && entry.caption != null) { + editStory.flags |= 2; + CharSequence[] caption = new CharSequence[]{entry.caption}; + if (caption[0].length() > captionLimit) { + caption[0] = caption[0].subSequence(0, captionLimit); + } + if (MessagesController.getInstance(currentAccount).storyEntitiesAllowed()) { + editStory.entities = MediaDataController.getInstance(currentAccount).getEntities(caption, true); + } else { + editStory.entities.clear(); + } + if (caption[0].length() > captionLimit) { + caption[0] = caption[0].subSequence(0, captionLimit); + } + editStory.caption = caption[0].toString(); } - if (MessagesController.getInstance(currentAccount).storyEntitiesAllowed()) { - editStory.entities = MediaDataController.getInstance(currentAccount).getEntities(caption, true); - } else { - editStory.entities.clear(); + + if (entry.editedPrivacy) { + editStory.flags |= 4; + editStory.privacy_rules.addAll(entry.privacyRules); } - if (caption[0].length() > captionLimit) { - caption[0] = caption[0].subSequence(0, captionLimit); + + if (entry.editedMediaAreas != null) { + editStory.media_areas.addAll(entry.editedMediaAreas); + } + if (entry.mediaEntities != null) { + for (int i = 0; i < entry.mediaEntities.size(); ++i) { + VideoEditedInfo.MediaEntity mediaEntity = entry.mediaEntities.get(i); + if (mediaEntity.mediaArea != null) { + editStory.media_areas.add(mediaEntity.mediaArea); + } + } + } + if (!editStory.media_areas.isEmpty()) { + editStory.flags |= 8; } - editStory.caption = caption[0].toString(); - } - if (entry.editedPrivacy) { - editStory.flags |= 4; - editStory.privacy_rules.addAll(entry.privacyRules); + req = editStory; } + } else { + if (entry.botId != 0) { + TL_bots.addPreviewMedia addPreviewMedia = new TL_bots.addPreviewMedia(); + addPreviewMedia.bot = MessagesController.getInstance(currentAccount).getInputUser(entry.botId); + addPreviewMedia.media = media; + addPreviewMedia.lang_code = entry.botLang; - if (entry.editedMediaAreas != null) { - editStory.media_areas.addAll(entry.editedMediaAreas); - } - if (entry.mediaEntities != null) { - for (int i = 0; i < entry.mediaEntities.size(); ++i) { - VideoEditedInfo.MediaEntity mediaEntity = entry.mediaEntities.get(i); - if (mediaEntity.mediaArea != null) { - editStory.media_areas.add(mediaEntity.mediaArea); + req = addPreviewMedia; + } else { + TL_stories.TL_stories_sendStory sendStory = new TL_stories.TL_stories_sendStory(); + sendStory.random_id = random_id; + sendStory.peer = MessagesController.getInstance(currentAccount).getInputPeer(dialogId); + sendStory.media = media; + sendStory.privacy_rules.addAll(entry.privacyRules); + sendStory.pinned = entry.pinned; + sendStory.noforwards = !entry.allowScreenshots; + + if (entry.caption != null) { + sendStory.flags |= 3; + CharSequence[] caption = new CharSequence[]{entry.caption}; + if (caption[0].length() > captionLimit) { + caption[0] = caption[0].subSequence(0, captionLimit); + } + if (MessagesController.getInstance(currentAccount).storyEntitiesAllowed()) { + sendStory.entities = MediaDataController.getInstance(currentAccount).getEntities(caption, true); + } else { + sendStory.entities.clear(); + } + if (caption[0].length() > captionLimit) { + caption[0] = caption[0].subSequence(0, captionLimit); } + sendStory.caption = caption[0].toString(); } - } - if (!editStory.media_areas.isEmpty()) { - editStory.flags |= 8; - } - req = editStory; - } else { - TL_stories.TL_stories_sendStory sendStory = new TL_stories.TL_stories_sendStory(); - sendStory.random_id = random_id; - sendStory.peer = MessagesController.getInstance(currentAccount).getInputPeer(dialogId); - sendStory.media = media; - sendStory.privacy_rules.addAll(entry.privacyRules); - sendStory.pinned = entry.pinned; - sendStory.noforwards = !entry.allowScreenshots; - - if (entry.caption != null) { - sendStory.flags |= 3; - CharSequence[] caption = new CharSequence[]{ entry.caption }; - if (caption[0].length() > captionLimit) { - caption[0] = caption[0].subSequence(0, captionLimit); - } - if (MessagesController.getInstance(currentAccount).storyEntitiesAllowed()) { - sendStory.entities = MediaDataController.getInstance(currentAccount).getEntities(caption, true); - } else { - sendStory.entities.clear(); - } - if (caption[0].length() > captionLimit) { - caption[0] = caption[0].subSequence(0, captionLimit); + if (entry.isRepost) { + sendStory.flags |= 64; + sendStory.fwd_from_id = MessagesController.getInstance(currentAccount).getInputPeer(entry.repostPeer); + sendStory.fwd_from_story = entry.repostStoryId; + sendStory.fwd_modified = !sendingSameInput; } - sendStory.caption = caption[0].toString(); - } - - if (entry.isRepost) { - sendStory.flags |= 64; - sendStory.fwd_from_id = MessagesController.getInstance(currentAccount).getInputPeer(entry.repostPeer); - sendStory.fwd_from_story = entry.repostStoryId; - sendStory.fwd_modified = !sendingSameInput; - } - if (entry.period == Integer.MAX_VALUE) { - sendStory.pinned = true; - } else { - sendStory.flags |= 8; - sendStory.period = entry.period; - } + if (entry.period == Integer.MAX_VALUE) { + sendStory.pinned = true; + } else { + sendStory.flags |= 8; + sendStory.period = entry.period; + } - if (entry.mediaEntities != null) { - for (int i = 0; i < entry.mediaEntities.size(); ++i) { - VideoEditedInfo.MediaEntity mediaEntity = entry.mediaEntities.get(i); - if (mediaEntity.mediaArea != null) { - sendStory.media_areas.add(mediaEntity.mediaArea); + if (entry.mediaEntities != null) { + for (int i = 0; i < entry.mediaEntities.size(); ++i) { + VideoEditedInfo.MediaEntity mediaEntity = entry.mediaEntities.get(i); + if (mediaEntity.mediaArea != null) { + sendStory.media_areas.add(mediaEntity.mediaArea); + } + } + if (!sendStory.media_areas.isEmpty()) { + sendStory.flags |= 32; } } - if (!sendStory.media_areas.isEmpty()) { - sendStory.flags |= 32; - } - } - req = sendStory; + req = sendStory; + } } final RequestDelegate requestDelegate = (response, error) -> { - if (response != null) { + if (response instanceof TLRPC.Updates) { failed = false; TLRPC.Updates updates = (TLRPC.Updates) response; + if (entry.isEditingCover) { + MessagesController.getInstance(currentAccount).processUpdates(updates, false); + AndroidUtilities.runOnUIThread(this::cleanup); + return; + } int storyId = 0; TL_stories.StoryItem storyItem = null; for (int i = 0; i < updates.updates.size(); i++) { @@ -2237,13 +2302,26 @@ private void sendUploadedRequest(TLRPC.InputFile uploadedFile) { } entry.isError = false; entry.error = null; - getDraftsController().saveForEdit(entry, did, storyItemFinal); + if (!entry.isEditingCover) { + getDraftsController().saveForEdit(entry, did, storyItemFinal); + } if (!edit) { invalidateStoryLimit(); } }); MessagesController.getInstance(currentAccount).processUpdateArray(updates.updates, updates.users, updates.chats, false, updates.date); } + } else if (response instanceof TL_bots.botPreviewMedia) { + previewMedia = (TL_bots.botPreviewMedia) response; + } else if (error != null && FileRefController.isFileRefError(error.text) && entry.editingCoverDocument != null && entry.updateDocumentRef != null) { + entry.updateDocumentRef.run(newDocument -> { + entry.editingCoverDocument = newDocument; + TLRPC.TL_inputFileStoryDocument inputFile = new TLRPC.TL_inputFileStoryDocument(); + inputFile.doc = MessagesController.toInputDocument(entry.editingCoverDocument); + sendUploadedRequest(inputFile); + }); + entry.updateDocumentRef = null; + return; } else if (error != null && !edit) { AndroidUtilities.runOnUIThread(() -> { entry.isError = true; @@ -2271,6 +2349,8 @@ private void sendUploadedRequest(TLRPC.InputFile uploadedFile) { } } + private TL_bots.botPreviewMedia previewMedia; + private void putMessages() { if (entry.shareUserIds == null || putMessages) { return; @@ -2310,9 +2390,9 @@ public boolean isCloseFriends() { } } - private final HashMap<Long, StoriesList>[] storiesLists = new HashMap[3]; + private final HashMap<Long, StoriesList>[] storiesLists = new HashMap[5]; - @Nullable + @NonNull public StoriesList getStoriesList(long dialogId, int type) { return getStoriesList(dialogId, type, true); } @@ -2324,7 +2404,11 @@ private StoriesList getStoriesList(long dialogId, int type, boolean createIfNotE } StoriesList list = storiesLists[type].get(dialogId); if (list == null && createIfNotExist) { - storiesLists[type].put(dialogId, list = new StoriesList(currentAccount, dialogId, type, this::destroyStoryList)); + if (type == StoriesList.TYPE_BOTS) { + storiesLists[type].put(dialogId, list = new BotPreviewsList(currentAccount, dialogId, null, this::destroyStoryList)); + } else { + storiesLists[type].put(dialogId, list = new StoriesList(currentAccount, dialogId, type, this::destroyStoryList)); + } } return list; } @@ -2395,6 +2479,321 @@ public void destroyStoryList(StoriesList list) { } } + public static class BotPreview extends TL_stories.StoryItem { + public final BotPreviewsList list; + public BotPreview(BotPreviewsList parentList, long dialogId, TL_bots.botPreviewMedia media) { + this.list = parentList; + this.dialogId = dialogId; + this.media = media.media; + if (this.media.document != null) { + this.media.document.date = media.date; + } else if (this.media.photo != null) { + this.media.photo.date = media.date; + } + } + } + + public static class BotPreviewsList extends StoriesList { + + public BotPreviewsList(int currentAccount, long botId, String lang_code, Utilities.Callback<StoriesList> destroy) { + super(currentAccount, botId, TYPE_BOTS, destroy); + this.lang_code = lang_code; + } + + @Override + public boolean isOnlyCache() { + return false; + } + @Override + protected void invalidateCache() {} + @Override + protected void preloadCache() {} + @Override + protected void saveCache() {} + + @Override + protected boolean markAsRead(int storyId) { + return false; + } + + private boolean loading, loaded; + public final String lang_code; + private int reqId; + + public final ArrayList<String> lang_codes = new ArrayList<>(); + private final ArrayList<ArrayList<Integer>> fakeDays = new ArrayList<>(); + private int lastId = 0; + + @Override + public boolean load(boolean force, int count, List<Integer> ids) { + return loadInternal(null); + } + + public boolean loadInternal(Runnable callback) { + if (loading || loaded) return false; + + TLObject reqObj; + if (lang_code != null) { + TL_bots.getPreviewInfo req = new TL_bots.getPreviewInfo(); + req.bot = MessagesController.getInstance(currentAccount).getInputUser(dialogId); + req.lang_code = lang_code; + reqObj = req; + } else { + TL_bots.getPreviewMedias req = new TL_bots.getPreviewMedias(); + req.bot = MessagesController.getInstance(currentAccount).getInputUser(dialogId); + reqObj = req; + } + + loading = true; + + this.reqId = ConnectionsManager.getInstance(currentAccount).sendRequest(reqObj, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + this.reqId = 0; + this.loading = false; + this.loaded = true; + this.done = true; + + final ArrayList<TL_bots.botPreviewMedia> medias = new ArrayList<>(); + if (res instanceof TLRPC.Vector) { + ArrayList<Object> objects = ((TLRPC.Vector) res).objects; + for (Object o : objects) { + TL_bots.botPreviewMedia media = (TL_bots.botPreviewMedia) o; + medias.add(media); + } + } else if (res instanceof TL_bots.previewInfo) { + TL_bots.previewInfo info = (TL_bots.previewInfo) res; + + lang_codes.clear(); + lang_codes.addAll(info.lang_codes); + + medias.addAll(info.media); + } else { + return; + } + + ArrayList<MessageObject> oldMessageObjects = new ArrayList<>(messageObjects); + messageObjects.clear(); + fakeDays.clear(); + + for (TL_bots.botPreviewMedia media : medias) { + MessageObject msg = new MessageObject(currentAccount, new BotPreview(this, dialogId, media)); + + MessageObject old = null; + for (int i = 0; i < oldMessageObjects.size(); ++i) { + if (MessagesController.equals(oldMessageObjects.get(i).storyItem.media, media.media)) { + old = oldMessageObjects.get(i); + break; + } + } + + msg.storyItem.id = msg.messageOwner.id = old == null ? lastId++ : old.getId(); + msg.parentStoriesList = this; + msg.generateThumbs(false); + if (fakeDays.isEmpty()) { + fakeDays.add(new ArrayList<>()); + } + fakeDays.get(0).add(msg.getId()); + messageObjects.add(msg); + } + + AndroidUtilities.cancelRunOnUIThread(super.notify); + AndroidUtilities.runOnUIThread(super.notify); + + if (callback != null) { + AndroidUtilities.runOnUIThread(callback); + } + })); + + return true; + } + + public void push(TL_bots.botPreviewMedia media) { + MessageObject msg = new MessageObject(currentAccount, new BotPreview(this, dialogId, media)); + msg.storyItem.id = msg.messageOwner.id = lastId++; + msg.parentStoriesList = this; + msg.generateThumbs(false); + if (fakeDays.isEmpty()) { + fakeDays.add(new ArrayList<>()); + } + fakeDays.get(0).add(0, msg.getId()); + messageObjects.add(0, msg); + notifyUpdate(); + } + + public void edit(TLRPC.InputMedia old_media, TL_bots.botPreviewMedia new_media) { + int index = 0; + MessageObject oldmsg = null; + for (int i = 0; i < messageObjects.size(); ++i) { + MessageObject m = messageObjects.get(i); + if (old_media != null && m.storyItem != null && m.storyItem.media != null) { + if (old_media instanceof TLRPC.TL_inputMediaPhoto) { + if (m.storyItem.media.photo == null) continue; + if (m.storyItem.media.photo.id == ((TLRPC.TL_inputMediaPhoto) old_media).id.id) { + index = i; + oldmsg = m; + break; + } + } else if (old_media instanceof TLRPC.TL_inputMediaDocument) { + if (m.storyItem.media.document == null) continue; + if (m.storyItem.media.document.id == ((TLRPC.TL_inputMediaDocument) old_media).id.id) { + index = i; + oldmsg = m; + break; + } + } + } + } + if (oldmsg != null) { + messageObjects.remove(oldmsg); + if (fakeDays.isEmpty()) { + fakeDays.add(new ArrayList<>()); + } + if (index > 0 && index < fakeDays.get(0).size()) { + fakeDays.get(0).remove(index); + } + } + + MessageObject msg = new MessageObject(currentAccount, new BotPreview(this, dialogId, new_media)); + msg.storyItem.id = msg.messageOwner.id = oldmsg == null ? lastId++ : oldmsg.getId(); + msg.parentStoriesList = this; + msg.generateThumbs(false); + if (fakeDays.isEmpty()) { + fakeDays.add(new ArrayList<>()); + } + fakeDays.get(0).add(index, msg.getId()); + messageObjects.add(index, msg); + notifyUpdate(); + } + + public void notifyUpdate() { + AndroidUtilities.cancelRunOnUIThread(super.notify); + AndroidUtilities.runOnUIThread(super.notify); + } + + public void reload(Runnable callback) { + if (this.reqId != 0) { + ConnectionsManager.getInstance(currentAccount).cancelRequest(this.reqId, true); + this.reqId = 0; + } + loading = false; + loaded = false; + loadInternal(callback); + } + + public void requestReference(BotPreview story, Utilities.Callback<BotPreview> whenUpdated) { + reload(() -> { + for (int i = 0; i < messageObjects.size(); ++i) { + MessageObject msg = messageObjects.get(i); + if (msg == null || msg.storyItem == null || msg.storyItem.media == null) continue; + if (story.media.document != null) { + if (msg.storyItem.media.document == null) continue; + if (msg.storyItem.media.document.id == story.media.document.id) { + whenUpdated.run((BotPreview) msg.storyItem); + return; + } + } + if (story.media.photo != null) { + if (msg.storyItem.media.photo == null) continue; + if (msg.storyItem.media.photo.id == story.media.photo.id) { + whenUpdated.run((BotPreview) msg.storyItem); + return; + } + } + } + whenUpdated.run(null); + }); + } + + @Override + public int getCount() { + return messageObjects.size(); + } + + @Override + public int getLoadedCount() { + return messageObjects.size(); + } + + @Override + public boolean isLoading() { + return loading; + } + + @Override + protected ArrayList<ArrayList<Integer>> getDays() { + return fakeDays; + } + + @Override + public MessageObject findMessageObject(int id) { + for (int i = 0; i < messageObjects.size(); ++i) { + if (messageObjects.get(i).getId() == id) { + return messageObjects.get(i); + } + } + return null; + } + + @Override + public void updatePinnedOrder(ArrayList<Integer> ids, boolean apply) { + final ArrayList<MessageObject> newOrder = new ArrayList<>(); + final ArrayList<Integer> newOrderIds = new ArrayList<>(); + TL_bots.reorderPreviewMedias req = new TL_bots.reorderPreviewMedias(); + req.bot = MessagesController.getInstance(currentAccount).getInputUser(dialogId); + req.lang_code = lang_code; + for (int id : ids) { + MessageObject msg = findMessageObject(id); + if (msg == null) continue; + req.order.add(MessagesController.toInputMedia(msg.storyItem.media)); + newOrder.add(msg); + newOrderIds.add(id); + } + ConnectionsManager.getInstance(currentAccount).sendRequest(req, null); + + if (fakeDays.isEmpty()) { + fakeDays.add(new ArrayList<>()); + } + fakeDays.get(0).clear(); + fakeDays.get(0).addAll(newOrderIds); + messageObjects.clear(); + messageObjects.addAll(newOrder); + } + + public void delete(ArrayList<TLRPC.MessageMedia> medias) { + if (medias == null) return; + for (int i = 0; i < messageObjects.size(); ++i) { + MessageObject msg = messageObjects.get(i); + boolean contains = false; + for (int j = 0; j < medias.size(); ++j) { + if (MessagesController.equals(msg.storyItem.media, medias.get(j))) { + contains = true; + break; + } + } + if (contains) { + messageObjects.remove(i); + if (!fakeDays.isEmpty() && msg.getId() < fakeDays.get(0).size()) { + fakeDays.get(0).remove(msg.getId()); + } + i--; + } + } + TL_bots.deletePreviewMedia req = new TL_bots.deletePreviewMedia(); + req.bot = MessagesController.getInstance(currentAccount).getInputUser(dialogId); + for (int i = 0; i < medias.size(); ++i) { + req.media.add(MessagesController.toInputMedia(medias.get(i))); + } + ConnectionsManager.getInstance(currentAccount).sendRequest(req, null); + + AndroidUtilities.cancelRunOnUIThread(super.notify); + AndroidUtilities.runOnUIThread(super.notify); + } + + public void delete(TLRPC.MessageMedia media) { + delete(new ArrayList<>(Arrays.asList(media))); + } + + } + public static class SearchStoriesList extends StoriesList { public final String query; @@ -2435,7 +2834,7 @@ public void cancel() { } } - private ArrayList<ArrayList<Integer>> fakeDays = new ArrayList<>(); + private final ArrayList<ArrayList<Integer>> fakeDays = new ArrayList<>(); private boolean loading; private String last_offset = ""; @@ -2545,6 +2944,7 @@ public void unlink(int id) { public static final int TYPE_ARCHIVE = 1; public static final int TYPE_STATISTICS = 2; public static final int TYPE_SEARCH = 3; + public static final int TYPE_BOTS = 4; public final int currentAccount; public final long dialogId; @@ -2587,7 +2987,7 @@ public boolean showVideos() { NotificationCenter.getInstance(StoriesList.this.currentAccount).postNotificationName(NotificationCenter.storiesListUpdated, StoriesList.this); }; - private void fill(boolean notify) { + public void fill(boolean notify) { fill(this.messageObjects, showPhotos, showVideos); if (notify) { AndroidUtilities.cancelRunOnUIThread(this.notify); @@ -2595,7 +2995,7 @@ private void fill(boolean notify) { } } - private void fill(ArrayList<MessageObject> arrayList, boolean showPhotos, boolean showVideos) { + public void fill(ArrayList<MessageObject> arrayList, boolean showPhotos, boolean showVideos) { tempArr.clear(); if (type == TYPE_PINNED) { for (int id : pinnedIds) { @@ -2639,14 +3039,15 @@ private boolean filter(MessageObject msg, boolean photos, boolean videos) { return msg != null && msg.isStory() && (photos && msg.isPhoto() || videos && msg.isVideo() || msg.storyItem.media instanceof TLRPC.TL_messageMediaUnsupported); } - private boolean done; + public boolean done; private int totalCount = -1; - private boolean preloading, loading; + protected boolean preloading; + private boolean loading; private boolean invalidateAfterPreload; private boolean error; private final Runnable destroyRunnable; - private Utilities.CallbackReturn<Integer, Boolean> toLoad; + protected Utilities.CallbackReturn<Integer, Boolean> toLoad; private StoriesList(int currentAccount, long dialogId, int type, Utilities.Callback<StoriesList> destroy) { this.currentAccount = currentAccount; @@ -3808,6 +4209,11 @@ public boolean canPostStories(long dialogId) { return false; } return chat.creator || chat.admin_rights != null && chat.admin_rights.post_stories; + } else if (dialogId > 0) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(dialogId); + if (user != null && user.bot && user.bot_can_edit) { + return true; + } } return false; } @@ -3819,6 +4225,12 @@ public boolean canEditStory(TL_stories.StoryItem storyItem) { if (storyItem.dialogId == getSelfUserId()) { return false; } + if (storyItem.dialogId > 0) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(storyItem.dialogId); + if (user != null && user.bot && user.bot_can_edit) { + return true; + } + } if (storyItem.dialogId < 0) { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-storyItem.dialogId); if (chat == null) { @@ -3844,6 +4256,12 @@ public boolean canDeleteStory(TL_stories.StoryItem storyItem) { if (storyItem.dialogId == getSelfUserId()) { return false; } + if (storyItem.dialogId > 0) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(storyItem.dialogId); + if (user != null && user.bot && user.bot_can_edit) { + return true; + } + } if (storyItem.dialogId < 0) { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-storyItem.dialogId); if (chat == null) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesStorage.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesStorage.java index 8d397d365b6..0900ec99c07 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesStorage.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesStorage.java @@ -17,6 +17,7 @@ import org.telegram.messenger.MessageObject; import org.telegram.messenger.MessagesController; import org.telegram.messenger.MessagesStorage; +import org.telegram.messenger.Timer; import org.telegram.messenger.UserConfig; import org.telegram.messenger.support.LongSparseIntArray; import org.telegram.tgnet.ConnectionsManager; @@ -556,10 +557,10 @@ public void deleteStories(long dialogId, ArrayList<Integer> storyIds) { } //storage queue - public void fillMessagesWithStories(LongSparseArray<ArrayList<MessageObject>> messagesWithUnknownStories, Runnable runnable, int classGuid) { - fillMessagesWithStories(messagesWithUnknownStories, runnable, classGuid, true); + public void fillMessagesWithStories(LongSparseArray<ArrayList<MessageObject>> messagesWithUnknownStories, Runnable runnable, int classGuid, Timer timer) { + fillMessagesWithStories(messagesWithUnknownStories, runnable, classGuid, true, timer); } - public void fillMessagesWithStories(LongSparseArray<ArrayList<MessageObject>> messagesWithUnknownStories, Runnable runnable, int classGuid, boolean updateDatabase) { + public void fillMessagesWithStories(LongSparseArray<ArrayList<MessageObject>> messagesWithUnknownStories, Runnable runnable, int classGuid, boolean updateDatabase, Timer timer) { if (runnable == null) { return; } @@ -568,6 +569,7 @@ public void fillMessagesWithStories(LongSparseArray<ArrayList<MessageObject>> me return; } ArrayList<MessageObject> updatedMessages = new ArrayList<>(); + Timer.Task t1 = Timer.start(timer, "fillMessagesWithStories: applying stories for existing array"); for (int i = 0; i < messagesWithUnknownStories.size(); i++) { long dialogId = messagesWithUnknownStories.keyAt(i); ArrayList<MessageObject> messageObjects = messagesWithUnknownStories.valueAt(i); @@ -588,6 +590,7 @@ public void fillMessagesWithStories(LongSparseArray<ArrayList<MessageObject>> me } } } + Timer.done(t1); if (updateDatabase) { updateMessagesWithStories(updatedMessages); @@ -603,7 +606,9 @@ public void fillMessagesWithStories(LongSparseArray<ArrayList<MessageObject>> me for (int j = 0; j < messageObjects.size(); j++) { request.id.add(getStoryId(messageObjects.get(j))); } + Timer.Task t2 = Timer.start(timer, "fillMessagesWithStories: getStoriesByID did=" + dialogId + " ids=" + TextUtils.join(",", request.id)); int reqId = ConnectionsManager.getInstance(currentAccount).sendRequest(request, (response, error) -> { + Timer.done(t2); if (response != null) { TL_stories.TL_stories_stories stories = (TL_stories.TL_stories_stories) response; for (int j = 0; j < messageObjects.size(); j++) { @@ -627,6 +632,8 @@ public void fillMessagesWithStories(LongSparseArray<ArrayList<MessageObject>> me }); } } + } else if (error != null) { + Timer.log(timer, "fillMessagesWithStories: getStoriesByID error " + error.code + " " + error.text); } requestsCount[0]--; if (requestsCount[0] == 0) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesViewPager.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesViewPager.java index 72a2d09c5e1..16ee9102680 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesViewPager.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesViewPager.java @@ -260,6 +260,9 @@ public void setPeerIds(ArrayList<Long> peerIds, int currentAccount, int position } public void setDays(long dialogId, ArrayList<ArrayList<Integer>> days, int currentAccount) { + if (this.daysDialogId == dialogId && eqA(this.days, days) && this.currentAccount == currentAccount) { + return; + } this.daysDialogId = dialogId; this.days = days; this.currentAccount = currentAccount; @@ -278,6 +281,27 @@ public void setDays(long dialogId, ArrayList<ArrayList<Integer>> days, int curre updateDelegate = true; } + private static boolean eqA(ArrayList<ArrayList<Integer>> a, ArrayList<ArrayList<Integer>> b) { + if (a == null && b == null) return true; + if (a == null || b == null) return false; + if (a.size() != b.size()) return false; + for (int i = 0; i < a.size(); ++i) { + if (!eq(a.get(i), b.get(i))) + return false; + } + return true; + } + private static boolean eq(ArrayList<Integer> a, ArrayList<Integer> b) { + if (a == null && b == null) return true; + if (a == null || b == null) return false; + if (a.size() != b.size()) return false; + for (int i = 0; i < a.size(); ++i) { + if (a.get(i) != b.get(i)) + return false; + } + return true; + } + @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryMediaAreasView.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryMediaAreasView.java index 261e465dd8f..c000ac556e8 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryMediaAreasView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryMediaAreasView.java @@ -49,11 +49,14 @@ import org.telegram.ui.Components.ColoredImageSpan; import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.Paint.Views.LocationMarker; +import org.telegram.ui.Components.Paint.Views.WeatherView; import org.telegram.ui.Components.ScaleStateListAnimator; import org.telegram.ui.EmojiAnimationsOverlay; import org.telegram.ui.LocationActivity; import org.telegram.ui.Stories.recorder.HintView2; import org.telegram.ui.Stories.recorder.StoryEntry; +import org.telegram.ui.Stories.recorder.Weather; import java.util.ArrayList; @@ -156,6 +159,21 @@ public void set(TL_stories.StoryItem storyItem, ArrayList<TL_stories.MediaArea> storyReactionWidgetView.setViews(storyItem.views, false); } ScaleStateListAnimator.apply(areaView); + } else if (mediaArea instanceof TL_stories.TL_mediaAreaWeather) { + TL_stories.TL_mediaAreaWeather weather = (TL_stories.TL_mediaAreaWeather) mediaArea; + + Weather.State state = new Weather.State(); + state.emoji = weather.emoji; + state.temperature = (float) weather.temperature_c; + + LocationMarker marker = new LocationMarker(getContext(), LocationMarker.VARIANT_WEATHER, AndroidUtilities.density, 0); + marker.setMaxWidth(AndroidUtilities.displaySize.x); + marker.setIsVideo(true); + marker.setCodeEmoji(UserConfig.selectedAccount, state.getEmoji()); + marker.setText(state.getTemperature()); + marker.setType(3, weather.color); + + areaView = new FitViewWidget(getContext(), marker, mediaArea); } else { areaView = new AreaView(getContext(), parentView, mediaArea); } @@ -170,6 +188,15 @@ public void set(TL_stories.StoryItem storyItem, ArrayList<TL_stories.MediaArea> hintsContainer.bringToFront(); } + public static int rgbaToArgb(int rgba) { + int red = (rgba >>> 24) & 0xFF; + int green = (rgba >>> 16) & 0xFF; + int blue = (rgba >>> 8) & 0xFF; + int alpha = rgba & 0xFF; + + return (alpha << 24) | (red << 16) | (green << 8) | blue; + } + @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int w = MeasureSpec.getSize(widthMeasureSpec); @@ -187,6 +214,12 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { MeasureSpec.makeMeasureSpec((int) Math.ceil(child.mediaArea.coordinates.w / 100 * w), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec((int) Math.ceil(child.mediaArea.coordinates.h / 100 * h), MeasureSpec.EXACTLY) ); + } else if (view instanceof FitViewWidget) { + FitViewWidget child = (FitViewWidget) getChildAt(i); + child.measure( + MeasureSpec.makeMeasureSpec((int) Math.ceil(child.mediaArea.coordinates.w / 100 * w), MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec((int) Math.ceil(child.mediaArea.coordinates.h / 100 * h), MeasureSpec.EXACTLY) + ); } } setMeasuredDimension(w, h); @@ -409,6 +442,13 @@ protected void onLayout(boolean changed, int left, int top, int right, int botto child.setTranslationX((float) (child.mediaArea.coordinates.x / 100 * getMeasuredWidth())); child.setTranslationY((float) (child.mediaArea.coordinates.y / 100 * getMeasuredHeight())); child.setRotation((float) child.mediaArea.coordinates.rotation); + } else if (view instanceof FitViewWidget) { + FitViewWidget child = (FitViewWidget) view; + int w = child.getMeasuredWidth(), h = child.getMeasuredHeight(); + child.layout(-w / 2, -h / 2, w / 2, h / 2); + child.setTranslationX((float) (child.mediaArea.coordinates.x / 100 * getMeasuredWidth())); + child.setTranslationY((float) (child.mediaArea.coordinates.y / 100 * getMeasuredHeight())); + child.setRotation((float) child.mediaArea.coordinates.rotation); } } } @@ -750,4 +790,40 @@ private void shineInternal() { invalidate(); } } + + public static class FitViewWidget extends FrameLayout { + + public final TL_stories.MediaArea mediaArea; + public final View child; + + public FitViewWidget(Context context, View widget, TL_stories.MediaArea mediaArea) { + super(context); + this.mediaArea = mediaArea; + addView(this.child = widget); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + + this.child.measure(widthMeasureSpec, heightMeasureSpec); + + final int childw = this.child.getMeasuredWidth() - this.child.getPaddingLeft() - this.child.getPaddingRight(); + final int childh = this.child.getMeasuredHeight() - this.child.getPaddingTop() - this.child.getPaddingBottom(); + this.child.setPivotX(this.child.getPaddingLeft() + childw / 2f); + this.child.setPivotY(this.child.getPaddingTop() + childh / 2f); + + final int w = MeasureSpec.getSize(widthMeasureSpec); + final int h = MeasureSpec.getSize(heightMeasureSpec); + setMeasuredDimension(w, h); + + float scale = Math.min( + (float) w / childw, + (float) h / childh + ); + this.child.setTranslationX(w / 2f - (childw / 2f + this.child.getPaddingLeft())); + this.child.setTranslationY(h / 2f - (childh / 2f + this.child.getPaddingTop())); + this.child.setScaleX(scale); + this.child.setScaleY(scale); + } + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryViewer.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryViewer.java index e40df11ae8c..034037b35a9 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryViewer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryViewer.java @@ -21,7 +21,6 @@ import android.media.AudioManager; import android.net.Uri; import android.os.Build; -import android.util.Log; import android.util.LongSparseArray; import android.util.SparseArray; import android.view.GestureDetector; @@ -50,7 +49,6 @@ import org.telegram.messenger.AnimationNotificationsLocker; import org.telegram.messenger.BotWebViewVibrationEffect; import org.telegram.messenger.BuildVars; -import org.telegram.messenger.ChatObject; import org.telegram.messenger.DialogObject; import org.telegram.messenger.FileLoader; import org.telegram.messenger.FileLog; @@ -726,7 +724,7 @@ protected void dispatchDraw(Canvas canvas) { if (isClosed && animateAvatar) { rect2.set(outFromRectAvatar); } else { - while (child != this) { + while (child != this && child != null) { if (child.getParent() == this) { toX += child.getLeft(); toY += child.getTop(); @@ -734,6 +732,9 @@ protected void dispatchDraw(Canvas canvas) { toX += child.getX(); toY += child.getY(); } + if (!(child.getParent() instanceof View)) { + break; + } child = (View) child.getParent(); } rect2.set(toX, toY, toX + headerView.backupImageView.getMeasuredWidth(), toY + headerView.backupImageView.getMeasuredHeight()); @@ -1058,7 +1059,7 @@ public boolean dispatchKeyEventPreIme(KeyEvent event) { } if (event != null && event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { - onBackPressed(); + onAttachedBackPressed(); return true; } return super.dispatchKeyEventPreIme(event); @@ -2444,8 +2445,8 @@ public void release() { MessagesController.getInstance(currentAccount).getStoriesController().stopAllPollers(); if (ATTACH_TO_FRAGMENT) { lockOrientation(false); - if (fragment != null && fragment.sheetsStack != null) { - fragment.sheetsStack.remove(this); + if (fragment != null) { + fragment.removeSheet(this); } } @@ -2482,12 +2483,17 @@ public int getNavigationBarColor(int currentColor) { return ColorUtils.blendARGB(currentColor, Color.BLACK, getBlackoutAlpha()); } + @Override + public boolean isAttachedLightStatusBar() { + return false; + } + private float getBlackoutAlpha() { return progressToOpen * (0.5f + 0.5f * (1f - progressToDismiss)); } @Override - public boolean onBackPressed() { + public boolean onAttachedBackPressed() { if (selfStoriesViewsOffset != 0) { if (selfStoryViewsView.onBackPressed()) { return true; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryWidgetsImageDecorator.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryWidgetsImageDecorator.java index ec47812df6e..4b296f510ea 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryWidgetsImageDecorator.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoryWidgetsImageDecorator.java @@ -1,14 +1,20 @@ package org.telegram.ui.Stories; +import static org.telegram.ui.Stories.StoryMediaAreasView.rgbaToArgb; + import android.graphics.Canvas; import android.graphics.Color; import android.view.View; import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.ImageReceiver; +import org.telegram.messenger.UserConfig; import org.telegram.tgnet.tl.TL_stories; +import org.telegram.ui.Components.Paint.Views.LocationMarker; import org.telegram.ui.Components.Reactions.ReactionImageHolder; import org.telegram.ui.Components.Reactions.ReactionsLayoutInBubble; +import org.telegram.ui.Stories.recorder.Weather; import java.util.ArrayList; @@ -22,6 +28,11 @@ public StoryWidgetsImageDecorator(TL_stories.StoryItem storyItem) { drawingObjects = new ArrayList<>(); } drawingObjects.add(new ReactionWidget((TL_stories.TL_mediaAreaSuggestedReaction) storyItem.media_areas.get(i))); + } else if (storyItem.media_areas.get(i) instanceof TL_stories.TL_mediaAreaWeather) { + if (drawingObjects == null) { + drawingObjects = new ArrayList<>(); + } + drawingObjects.add(new WeatherWidget((TL_stories.TL_mediaAreaWeather) storyItem.media_areas.get(i))); } } } @@ -82,10 +93,10 @@ public static abstract class DrawingObject { public class ReactionWidget extends DrawingObject { - StoryReactionWidgetBackground storyReactionWidgetBackground = new StoryReactionWidgetBackground(null); + private final StoryReactionWidgetBackground storyReactionWidgetBackground = new StoryReactionWidgetBackground(null); - TL_stories.TL_mediaAreaSuggestedReaction mediaArea; - ReactionImageHolder imageHolder = new ReactionImageHolder(null); + private final TL_stories.TL_mediaAreaSuggestedReaction mediaArea; + private final ReactionImageHolder imageHolder = new ReactionImageHolder(null); public ReactionWidget(TL_stories.TL_mediaAreaSuggestedReaction mediaArea) { this.mediaArea = mediaArea; @@ -147,4 +158,70 @@ public void setParent(View parentView) { imageHolder.setParent(parentView); } } + + public class WeatherWidget extends DrawingObject { + + private final LocationMarker marker; + private final TL_stories.TL_mediaAreaWeather mediaArea; + private View parentView; + + public WeatherWidget(TL_stories.TL_mediaAreaWeather mediaArea) { + this.mediaArea = mediaArea; + + final Weather.State state = new Weather.State(); + state.emoji = mediaArea.emoji; + state.temperature = (float) mediaArea.temperature_c; + + this.marker = new LocationMarker(ApplicationLoader.applicationContext, LocationMarker.VARIANT_WEATHER, AndroidUtilities.density, 0) { + @Override + public void invalidate() { + if (parentView != null) { + parentView.invalidate(); + } + } + }; + marker.setMaxWidth(AndroidUtilities.displaySize.x); + marker.setIsVideo(false); + marker.setCodeEmoji(UserConfig.selectedAccount, state.getEmoji()); + marker.setText(state.getTemperature()); + marker.setType(0, mediaArea.color); + + marker.setupLayout(); + } + + @Override + public void draw(Canvas canvas, ImageReceiver imageReceiver, float alpha) { + float x = (float) (imageX + imageW * mediaArea.coordinates.x / 100); + float y = (float) (imageY + imageH * mediaArea.coordinates.y / 100); + float w = (float) (imageW * mediaArea.coordinates.w / 100); + float h = (float) (imageH * mediaArea.coordinates.h / 100); + + canvas.save(); + canvas.translate(x, y); + final int markerWidth = marker.getWidthInternal() - marker.getPaddingLeft() - marker.getPaddingRight(); + final int markerHeight = marker.getHeightInternal() - marker.getPaddingTop() - marker.getPaddingBottom(); + float scale = Math.min(w / markerWidth, h / markerHeight); + canvas.scale(scale, scale); + if (mediaArea.coordinates.rotation != 0) { + canvas.rotate((float) mediaArea.coordinates.rotation); + } + canvas.translate(-markerWidth / 2f - marker.getPaddingLeft(), -markerHeight / 2f - marker.getPaddingTop()); + marker.drawInternal(canvas); + canvas.restore(); + } + + @Override + public void onAttachedToWindow(boolean attached) { + if (attached) { + marker.attachInternal(); + } else { + marker.detachInternal(); + } + } + + @Override + public void setParent(View parentView) { + this.parentView = parentView; + } + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/bots/BotPreviewsEditContainer.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/bots/BotPreviewsEditContainer.java new file mode 100644 index 00000000000..70b675eda4f --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/bots/BotPreviewsEditContainer.java @@ -0,0 +1,2001 @@ +package org.telegram.ui.Stories.bots; + +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.AndroidUtilities.lerp; +import static org.telegram.messenger.LocaleController.formatPluralString; +import static org.telegram.messenger.LocaleController.getString; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; +import android.app.Activity; +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.os.Build; +import android.text.Layout; +import android.text.SpannableString; +import android.text.SpannedString; +import android.text.TextUtils; +import android.text.style.ImageSpan; +import android.util.Log; +import android.util.LongSparseArray; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.VelocityTracker; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; +import androidx.recyclerview.widget.DefaultItemAnimator; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.ItemTouchHelper; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.LocaleController; +import org.telegram.messenger.MediaController; +import org.telegram.messenger.MessageObject; +import org.telegram.messenger.MessagesController; +import org.telegram.messenger.NotificationCenter; +import org.telegram.messenger.R; +import org.telegram.messenger.SharedConfig; +import org.telegram.messenger.TranslateController; +import org.telegram.messenger.Utilities; +import org.telegram.tgnet.ConnectionsManager; +import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; +import org.telegram.tgnet.tl.TL_stories; +import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.ActionBar.BottomSheet; +import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.Cells.SharedAudioCell; +import org.telegram.ui.Cells.SharedDocumentCell; +import org.telegram.ui.Cells.SharedPhotoVideoCell; +import org.telegram.ui.Cells.SharedPhotoVideoCell2; +import org.telegram.ui.Components.BottomSheetWithRecyclerListView; +import org.telegram.ui.Components.ChatAttachAlert; +import org.telegram.ui.Components.ColoredImageSpan; +import org.telegram.ui.Components.CubicBezierInterpolator; +import org.telegram.ui.Components.EditTextBoldCursor; +import org.telegram.ui.Components.ExtendedGridLayoutManager; +import org.telegram.ui.Components.FlickerLoadingView; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.RecyclerAnimationScrollHelper; +import org.telegram.ui.Components.RecyclerListView; +import org.telegram.ui.Components.SharedMediaLayout; +import org.telegram.ui.Components.Size; +import org.telegram.ui.Components.StickerEmptyView; +import org.telegram.ui.Components.TranslateAlert2; +import org.telegram.ui.Components.UItem; +import org.telegram.ui.Components.UniversalAdapter; +import org.telegram.ui.Components.ViewPagerFixed; +import org.telegram.ui.LaunchActivity; +import org.telegram.ui.ProfileActivity; +import org.telegram.ui.Stories.StoriesController; +import org.telegram.ui.Stories.StoriesListPlaceProvider; +import org.telegram.ui.Stories.recorder.ButtonWithCounterView; +import org.telegram.ui.Stories.recorder.StoryEntry; +import org.telegram.ui.Stories.recorder.StoryRecorder; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Locale; + +public class BotPreviewsEditContainer extends FrameLayout implements NotificationCenter.NotificationCenterDelegate { + + private final BaseFragment fragment; + private final int currentAccount; + private final Theme.ResourcesProvider resourcesProvider; + private final long bot_id; + + private static LongSparseArray<LongSparseArray<BotPreviewsEditContainer>> attachedContainers; + private static LongSparseArray<LongSparseArray<StoriesController.BotPreviewsList>> cachedLists; + private final StoriesController.BotPreviewsList mainList; + private final ArrayList<StoriesController.BotPreviewsList> langLists = new ArrayList<>(); + private final ArrayList<String> localLangs = new ArrayList<>(); + + private final ViewPagerFixed viewPager; + private final ViewPagerFixed.TabsView tabsView; + private Boolean shownTabs = null; + + public static void push(int currentAccount, long did, String lang_code, TL_bots.botPreviewMedia media) { + if (cachedLists != null) { + LongSparseArray<StoriesController.BotPreviewsList> arr = cachedLists.get(currentAccount); + if (arr != null) { + StoriesController.BotPreviewsList list = arr.get(did); + if (list.currentAccount == currentAccount) { + if (TextUtils.equals(list.lang_code, lang_code)) { + list.push(media); + } else if (!TextUtils.isEmpty(lang_code) && !list.lang_codes.contains(lang_code)) { + list.lang_codes.add(lang_code); + list.notifyUpdate(); + } + } + } + } + if (attachedContainers != null) { + LongSparseArray<BotPreviewsEditContainer> arr = attachedContainers.get(currentAccount); + if (arr != null) { + BotPreviewsEditContainer container = arr.get(did); + if (container != null) { + for (int i = 0; i < container.langLists.size(); ++i) { + StoriesController.BotPreviewsList list = container.langLists.get(i); + if (list.currentAccount == currentAccount && TextUtils.equals(list.lang_code, lang_code)) { + list.push(media); + } + } + } + } + } + } + public static void edit(int currentAccount, long did, String lang_code, TLRPC.InputMedia old_media, TL_bots.botPreviewMedia media) { + if (cachedLists != null) { + LongSparseArray<StoriesController.BotPreviewsList> arr = cachedLists.get(currentAccount); + if (arr != null) { + StoriesController.BotPreviewsList list = arr.get(did); + if (list.currentAccount == currentAccount) { + if (TextUtils.equals(list.lang_code, lang_code)) { + list.edit(old_media, media); + } else if (!TextUtils.isEmpty(lang_code) && !list.lang_codes.contains(lang_code)) { + list.lang_codes.add(lang_code); + list.notifyUpdate(); + } + } + } + } + if (attachedContainers != null) { + LongSparseArray<BotPreviewsEditContainer> arr = attachedContainers.get(currentAccount); + if (arr != null) { + BotPreviewsEditContainer container = arr.get(did); + if (container != null) { + for (int i = 0; i < container.langLists.size(); ++i) { + StoriesController.BotPreviewsList list = container.langLists.get(i); + if (list.currentAccount == currentAccount && TextUtils.equals(list.lang_code, lang_code)) { + list.edit(old_media, media); + } + } + } + } + } + } + + public BotPreviewsEditContainer( + Context context, + BaseFragment fragment, + long bot_id + ) { + super(context); + + this.fragment = fragment; + this.currentAccount = fragment.getCurrentAccount(); + this.resourcesProvider = fragment.getResourceProvider(); + this.bot_id = bot_id; + + setBackgroundColor(Theme.blendOver( + Theme.getColor(Theme.key_windowBackgroundWhite, resourcesProvider), + Theme.multAlpha(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider), 0.04f) + )); + + if (cachedLists == null) { + cachedLists = new LongSparseArray<>(); + } + LongSparseArray<StoriesController.BotPreviewsList> arr = cachedLists.get(currentAccount); + if (arr == null) cachedLists.put(currentAccount, arr = new LongSparseArray<>()); + StoriesController.BotPreviewsList list = arr.get(bot_id); + if (list == null) { + arr.put(bot_id, list = new StoriesController.BotPreviewsList(currentAccount, bot_id, "", null)); + } + mainList = list; + + viewPager = new ViewPagerFixed(context) { + @Override + protected boolean canScroll(MotionEvent e) { + if (isActionModeShowed()) return false; + return super.canScroll(e); + } + private String lastLang; + @Override + protected void onTabAnimationUpdate(boolean manual) { + String lang = getCurrentLang(); + if (!TextUtils.equals(lastLang, lang)) { + lastLang = lang; + onSelectedTabChanged(); + } + } + @Override + protected void onTabPageSelected(int position) { + String lang = getCurrentLang(); + if (!TextUtils.equals(lastLang, lang)) { + lastLang = lang; + onSelectedTabChanged(); + } + } + @Override + protected void onTabScrollEnd(int position) { + super.onTabScrollEnd(position); + String lang = getCurrentLang(); + if (!TextUtils.equals(lastLang, lang)) { + lastLang = lang; + onSelectedTabChanged(); + } + } + }; + viewPager.setAllowDisallowInterceptTouch(true); + viewPager.setAdapter(new ViewPagerFixed.Adapter() { + @Override + public int getItemCount() { + return 1 + langLists.size(); + } + + @Override + public View createView(int viewType) { + return new BotPreviewsEditLangContainer(context); + } + @Override + public int getItemId(int position) { + if (position == 0) return 0; + return langLists.get(position - 1).lang_code.hashCode(); + } + @Override + public void bindView(View view, int position, int viewType) { + BotPreviewsEditLangContainer container = (BotPreviewsEditLangContainer) view; + StoriesController.BotPreviewsList list = position == 0 ? mainList : langLists.get(position - 1); + list.load(true, 0, null); + container.setList(list); + container.setVisibleHeight(visibleHeight); + } + @Override + public String getItemTitle(int position) { + if (position == 0) { + return getString(R.string.ProfileBotLanguageGeneral); + } + return TranslateAlert2.languageNameCapital(langLists.get(position - 1).lang_code); + } + }); + addView(viewPager, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL)); + + tabsView = viewPager.createTabsView(true, 9); + tabsView.tabMarginDp = 12; + tabsView.setPreTabClick((id, pos) -> { + if (id == -1) { + addTranslation(); + return true; + } + return false; + }); + addView(tabsView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 42, Gravity.TOP)); + + updateLangs(false); + } + + public void addTranslation() { + ChooseLanguageSheet sheet = new ChooseLanguageSheet(fragment, getString(R.string.ProfileBotPreviewLanguageChoose), lng -> { + if (!localLangs.contains(lng)) { + localLangs.add(lng); + updateLangs(true); + } + AndroidUtilities.runOnUIThread(() -> { + int index = -1; + for (int i = 0; i < langLists.size(); ++i) { + if (TextUtils.equals(langLists.get(i).lang_code, lng)) { + index = i; + break; + } + } + if (index >= 0) { + tabsView.scrollToTab(lng.hashCode(), 1 + index); + } + }, 120); + }); +// sheet.makeAttached(fragment); + sheet.show(); + } + + public void onSelectedTabChanged() {} + + public RecyclerListView getCurrentListView() { + View view = viewPager.getCurrentView(); + if (view instanceof BotPreviewsEditLangContainer) { + return ((BotPreviewsEditLangContainer) view).listView; + } + return null; + } + + public String getCurrentLang() { + View[] views = viewPager.getViewPages(); + View view = Math.abs(viewPager.getCurrentPosition() - viewPager.getPositionAnimated()) < .5f && views[1] != null ? views[1] : views[0]; + if (view instanceof BotPreviewsEditLangContainer && ((BotPreviewsEditLangContainer) view).list != null) { + return ((BotPreviewsEditLangContainer) view).list.lang_code; + } + return null; + } + + public StoriesController.BotPreviewsList getCurrentList() { + View view = viewPager.getCurrentView(); + if (view instanceof BotPreviewsEditLangContainer && ((BotPreviewsEditLangContainer) view).list != null) { + return ((BotPreviewsEditLangContainer) view).list; + } + return null; + } + + public int getItemsCount() { + View view = viewPager.getCurrentView(); + if (view instanceof BotPreviewsEditLangContainer && ((BotPreviewsEditLangContainer) view).list != null) { + return ((BotPreviewsEditLangContainer) view).list.getCount(); + } + return 0; + } + + public boolean canScroll(boolean forward) { + if (forward) + return viewPager.getCurrentPosition() == (1 + langLists.size()) - 1; + return viewPager.getCurrentPosition() == 0; + } + + public boolean isSelectedAll() { + View view = viewPager.getCurrentView(); + if (view instanceof BotPreviewsEditLangContainer) { + StoriesController.BotPreviewsList list = ((BotPreviewsEditLangContainer) view).list; + if (list != null) { + for (int i = 0; i < list.messageObjects.size(); ++i) { + if (!isSelected(list.messageObjects.get(i))) { + return false; + } + } + return true; + } + } + return true; + } + + public void selectAll() { + View view = viewPager.getCurrentView(); + if (view instanceof BotPreviewsEditLangContainer) { + StoriesController.BotPreviewsList list = ((BotPreviewsEditLangContainer) view).list; + if (list != null) { + for (int i = 0; i < list.messageObjects.size(); ++i) { + if (!isSelected(list.messageObjects.get(i))) { + select(list.messageObjects.get(i)); + } + } + } + } + } + + public void unselectAll() { + View view = viewPager.getCurrentView(); + if (view instanceof BotPreviewsEditLangContainer) { + StoriesController.BotPreviewsList list = ((BotPreviewsEditLangContainer) view).list; + if (list != null) { + for (int i = 0; i < list.messageObjects.size(); ++i) { + if (isSelected(list.messageObjects.get(i))) { + unselect(list.messageObjects.get(i)); + } + } + } + } + } + + public boolean checkPinchToZoom(MotionEvent ev) { + View view = viewPager.getCurrentView(); + if (view instanceof BotPreviewsEditLangContainer) { + return ((BotPreviewsEditLangContainer) view).checkPinchToZoom(ev); + } + return false; + } + + private int visibleHeight = AndroidUtilities.displaySize.y; + public void setVisibleHeight(int height) { + visibleHeight = height; + View[] views = viewPager.getViewPages(); + if (views != null) { + for (int i = 0; i < views.length; ++i) { + if (views[i] instanceof BotPreviewsEditLangContainer) { + ((BotPreviewsEditLangContainer) views[i]).setVisibleHeight(height); + } + } + } + } + + public String getBotPreviewsSubtitle() { + StringBuilder sb = new StringBuilder(); + View view = viewPager.getCurrentView(); + if (view instanceof BotPreviewsEditLangContainer) { + StoriesController.BotPreviewsList list = ((BotPreviewsEditLangContainer) view).list; + int images = 0, videos = 0; + if (list != null) { + for (int i = 0; i < list.messageObjects.size(); ++i) { + MessageObject msg = list.messageObjects.get(i); + if (msg.storyItem != null && msg.storyItem.media != null) { + if (MessageObject.isVideoDocument(msg.storyItem.media.document)) { + videos++; + } else if (msg.storyItem.media.photo != null) { + images++; + } + } + } + } + if (images == 0 && videos == 0) return getString(R.string.BotPreviewEmpty); + if (images > 0) sb.append(formatPluralString("Images", images)); + if (videos > 0) { + if (sb.length() > 0) sb.append(", "); + sb.append(formatPluralString("Videos", videos)); + } + } + return sb.toString(); + } + + public int getStartedTrackingX() { + return 0; + } + + @Override + public void didReceivedNotification(int id, int account, Object... args) { + if (id == NotificationCenter.storiesListUpdated) { + if (args[0] == mainList) { + updateLangs(true); + View[] views = viewPager.getViewPages(); + for (View view : views) { + if (view instanceof BotPreviewsEditLangContainer && ((BotPreviewsEditLangContainer) view).list == mainList) { + ((BotPreviewsEditLangContainer) view).adapter.notifyDataSetChanged(); + } + } + } else if (langLists.indexOf(args[0]) >= 0) { + View[] views = viewPager.getViewPages(); + for (View view : views) { + if (view instanceof BotPreviewsEditLangContainer && ((BotPreviewsEditLangContainer) view).list == args[0]) { + ((BotPreviewsEditLangContainer) view).adapter.notifyDataSetChanged(); + } + } + } + } else if (id == NotificationCenter.storiesUpdated) { + updateLangs(true); + View[] views = viewPager.getViewPages(); + for (View view : views) { + if (view instanceof BotPreviewsEditLangContainer && view instanceof BotPreviewsEditLangContainer) { + ((BotPreviewsEditLangContainer) view).adapter.notifyDataSetChanged(); + } + } + } + } + + private void updateLangs(boolean animated) { + ArrayList<String> langs = new ArrayList<>(mainList.lang_codes); + for (String l : localLangs) { + if (!langs.contains(l)) { + langs.add(l); + } + } + ArrayList<StoriesController.UploadingStory> uploadingStories = MessagesController.getInstance(currentAccount).getStoriesController().getUploadingStories(bot_id); + if (uploadingStories != null) { + for (StoriesController.UploadingStory story : uploadingStories) { + if (story != null && story.entry != null && story.entry.botId == bot_id && !TextUtils.isEmpty(story.entry.botLang) && !langs.contains(story.entry.botLang)) { + langs.add(story.entry.botLang); + } + } + } + + ArrayList<StoriesController.BotPreviewsList> oldLangLists = new ArrayList<>(langLists); + langLists.clear(); + for (String lang_code : langs) { + StoriesController.BotPreviewsList list = null; + for (int i = 0; i < oldLangLists.size(); ++i) { + if (TextUtils.equals(oldLangLists.get(i).lang_code, lang_code)) { + list = oldLangLists.get(i); + break; + } + } + if (list == null) { + list = new StoriesController.BotPreviewsList(currentAccount, bot_id, lang_code, null); + list.load(true, 0, null); + } + langLists.add(list); + } + + viewPager.fillTabs(true); + SpannableString tab = new SpannableString("+ " + getString(R.string.ProfileBotLanguageAdd)); + ColoredImageSpan span = new ColoredImageSpan(R.drawable.msg_filled_plus); + span.setScale(.9f, .9f); + span.spaceScaleX = .85f; + tab.setSpan(span, 0, 1, SpannedString.SPAN_EXCLUSIVE_EXCLUSIVE); + tabsView.addTab(-1, tab); + tabsView.finishAddingTabs(); + + final boolean showTabs = (1 + langLists.size()) > 1; + updateTabs(showTabs, animated); + } + + public void deleteLang(String lang) { + if (TextUtils.isEmpty(lang)) return; + mainList.lang_codes.remove(lang); + localLangs.remove(lang); + StoriesController.BotPreviewsList list = null; + for (int i = 0; i < langLists.size(); ++i) { + StoriesController.BotPreviewsList l = langLists.get(i); + if (l != null && TextUtils.equals(l.lang_code, lang)) { + list = l; + break; + } + } + if (list != null) { + TL_bots.deletePreviewMedia req = new TL_bots.deletePreviewMedia(); + req.bot = MessagesController.getInstance(currentAccount).getInputUser(bot_id); + req.lang_code = lang; + for (int i = 0; i < list.messageObjects.size(); ++i) { + MessageObject msg = list.messageObjects.get(i); + if (msg.storyItem != null && msg.storyItem.media != null) { + req.media.add(MessagesController.toInputMedia(msg.storyItem.media)); + } + } + ConnectionsManager.getInstance(currentAccount).sendRequest(req, null); + } + updateLangs(true); + tabsView.scrollToTab(-1, 0); + } + + private float tabsAlpha; + private ValueAnimator tabsAnimator; + private void updateTabs(boolean show, boolean animated) { + if (shownTabs != null && shownTabs == show) { + return; + } + if (tabsAnimator != null) { + tabsAnimator.cancel(); + } + shownTabs = show; + if (!animated) { + tabsAlpha = show ? 1f : 0f; + tabsView.setTranslationY(dp(show ? 0 : -42)); + viewPager.setTranslationY(dp(show ? 42 : 0)); + } else { + tabsAnimator = ValueAnimator.ofFloat(tabsAlpha, show ? 1f : 0f); + tabsAnimator.addUpdateListener(anm -> { + tabsAlpha = (float) anm.getAnimatedValue(); + tabsView.setTranslationY(lerp(-dp(42), 0, tabsAlpha)); + viewPager.setTranslationY(lerp(0, dp(42), tabsAlpha)); + }); + tabsAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + tabsAlpha = show ? 1f : 0f; + tabsView.setTranslationY(dp(show ? 0 : -42)); + viewPager.setTranslationY(dp(show ? 42 : 0)); + } + }); + tabsAnimator.setDuration(320); + tabsAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + tabsAnimator.start(); + } + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + if (attachedContainers == null) attachedContainers = new LongSparseArray<>(); + LongSparseArray<BotPreviewsEditContainer> arr = attachedContainers.get(currentAccount); + if (arr == null) attachedContainers.put(currentAccount, arr = new LongSparseArray<>()); + arr.put(bot_id, this); + NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.storiesListUpdated); + NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.storiesUpdated); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + if (attachedContainers == null) attachedContainers = new LongSparseArray<>(); + LongSparseArray<BotPreviewsEditContainer> arr = attachedContainers.get(currentAccount); + if (arr != null) arr.remove(bot_id); + NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.storiesListUpdated); + NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.storiesUpdated); + } + + protected boolean isActionModeShowed() { + return false; + } + + protected boolean isSelected(MessageObject messageObject) { return false; } + protected boolean select(MessageObject messageObject) { return false; } + protected boolean unselect(MessageObject messageObject) { return false; } + + public void updateSelection(boolean animated) { + View view = viewPager.getCurrentView(); + if (view instanceof BotPreviewsEditLangContainer) { + ((BotPreviewsEditLangContainer) view).updateSelection(animated); + } + } + + public void createStory(final String lang_code) { + if (fragment == null || fragment.getParentActivity() == null) return; + + ChatAttachAlert chatAttachAlert = new ChatAttachAlert(fragment.getParentActivity(), fragment, false, false, false, resourcesProvider); + chatAttachAlert.setMaxSelectedPhotos(1, false); + chatAttachAlert.setStoryMediaPicker(); + chatAttachAlert.getPhotoLayout().loadGalleryPhotos(); + if (Build.VERSION.SDK_INT == 21 || Build.VERSION.SDK_INT == 22) { + AndroidUtilities.hideKeyboard(fragment.getFragmentView().findFocus()); + } + chatAttachAlert.setDelegate(new ChatAttachAlert.ChatAttachViewDelegate() { + @Override + public void didPressedButton(int button, boolean arg, boolean notify, int scheduleDate, long effectId, boolean invertMedia, boolean forceDocument) { + if (!chatAttachAlert.getPhotoLayout().getSelectedPhotos().isEmpty()) { + HashMap<Object, Object> selectedPhotos = chatAttachAlert.getPhotoLayout().getSelectedPhotos(); + ArrayList<Object> selectedPhotosOrder = chatAttachAlert.getPhotoLayout().getSelectedPhotosOrder(); + + if (selectedPhotos.size() != 1) { + return; + } + Object value = selectedPhotos.values().iterator().next(); + if (!(value instanceof MediaController.PhotoEntry)) { + return; + } + + MediaController.PhotoEntry entry = (MediaController.PhotoEntry) value; + StoryEntry storyEntry = StoryEntry.fromPhotoEntry(entry); + storyEntry.botId = bot_id; + storyEntry.botLang = lang_code; + storyEntry.setupMatrix(); + StoryRecorder.getInstance(fragment.getParentActivity(), currentAccount).openBotEntry(bot_id, lang_code, storyEntry, null); + AndroidUtilities.runOnUIThread(chatAttachAlert::hide, 400); + } + } + @Override + public boolean selectItemOnClicking() { + return true; + } + }); + chatAttachAlert.init(); + chatAttachAlert.show(); + } + + private int setColumnsCount = Utilities.clamp(SharedConfig.storiesColumnsCount, 6, 2); + public class BotPreviewsEditLangContainer extends FrameLayout { + + private StoriesController.BotPreviewsList list; + + private boolean columnsAnimation; + private float columnsAnimationProgress; + + private int columnsCount = Utilities.clamp(SharedConfig.storiesColumnsCount, 6, 2); + private int animateToColumnsCount = Utilities.clamp(SharedConfig.storiesColumnsCount, 6, 2); + + private final SharedMediaLayout.SharedMediaListView listView; + private final ExtendedGridLayoutManager layoutManager; + private final DefaultItemAnimator itemAnimator; + + private final SharedMediaLayout.InternalListView supportingListView; + private final GridLayoutManager supportingLayoutManager; + + private final StoriesAdapter adapter; + private final StoriesAdapter supportingAdapter; + + private final FlickerLoadingView progressView; + private final StickerEmptyView emptyView; + private final TextView emptyViewOr; + private final ButtonWithCounterView emptyViewButton2; + + private final RecyclerAnimationScrollHelper scrollHelper; + private ItemTouchHelper reorder; + + private boolean allowStoriesSingleColumn = false; + private boolean storiesColumnsCountSet = false; + + private final FooterView footer; + + public void setList(StoriesController.BotPreviewsList list) { + if (this.list != list) { + allowStoriesSingleColumn = false; + storiesColumnsCountSet = false; + columnsCount = setColumnsCount; + } + this.list = list; + adapter.setList(list); + supportingAdapter.setList(list); + updateFooter(); + } + + private void updateFooter() { + final int count = list == null ? 0 : list.getCount(); + final boolean isGeneral = list == null || TextUtils.isEmpty(list.lang_code); + footer.setVisibility(count > 0 ? View.VISIBLE : View.GONE); + footer.set( + isGeneral ? + LocaleController.getString(R.string.ProfileBotPreviewFooterGeneral) : + LocaleController.formatString(R.string.ProfileBotPreviewFooterLanguage, TranslateAlert2.languageName(list.lang_code)), + LocaleController.getString(R.string.ProfileBotAddPreview), () -> createStory(list == null ? "" : list.lang_code), + !isGeneral && count > 0 ? null : LocaleController.getString(isGeneral ? + R.string.ProfileBotPreviewFooterCreateTranslation : + R.string.ProfileBotPreviewFooterDeleteTranslation + ), + !isGeneral && count > 0 ? null : () -> { + if (isGeneral) { + addTranslation(); + } else { + deleteLang(list.lang_code); + } + } + ); + + if (isGeneral) { + this.emptyView.title.setVisibility(View.VISIBLE); + this.emptyView.title.setText(getString(R.string.ProfileBotPreviewEmptyTitle)); + this.emptyView.subtitle.setText(formatPluralString("ProfileBotPreviewEmptyText", MessagesController.getInstance(currentAccount).botPreviewMediasMax)); + this.emptyView.button.setText(getString(R.string.ProfileBotPreviewEmptyButton), false); + this.emptyViewOr.setVisibility(View.GONE); + this.emptyViewButton2.setVisibility(View.GONE); + } else { + this.emptyView.title.setVisibility(View.GONE); + this.emptyView.subtitle.setText(LocaleController.formatString(R.string.ProfileBotPreviewFooterLanguage, TranslateAlert2.languageName(list.lang_code))); + this.emptyView.button.setText(getString(R.string.ProfileBotPreviewEmptyButton), false); + this.emptyViewOr.setVisibility(View.VISIBLE); + this.emptyViewButton2.setVisibility(View.VISIBLE); + this.emptyViewButton2.setText(getString(R.string.ProfileBotPreviewFooterDeleteTranslation), false); + this.emptyViewButton2.setOnClickListener(v -> deleteLang(list.lang_code)); + } + this.emptyView.button.setVisibility(adapter.getItemCount() >= MessagesController.getInstance(currentAccount).botPreviewMediasMax ? View.GONE : View.VISIBLE); + } + + public void setVisibleHeight(int height) { + float t = -(getMeasuredHeight() - Math.max(height, dp(280))) / 2f; + emptyView.setTranslationY(t); + progressView.setTranslationY(-t); + } + + public BotPreviewsEditLangContainer(Context context) { + super(context); + + this.layoutManager = new ExtendedGridLayoutManager(context, 100) { + @Override + public boolean supportsPredictiveItemAnimations() { + return false; + } + + @Override + protected void calculateExtraLayoutSpace(RecyclerView.State state, int[] extraLayoutSpace) { + super.calculateExtraLayoutSpace(state, extraLayoutSpace); + extraLayoutSpace[1] = Math.max(extraLayoutSpace[1], SharedPhotoVideoCell.getItemSize(1) * 2); + } + + private final Size size = new Size(); + @Override + protected Size getSizeForItem(int i) { + size.width = size.height = 100; + return size; + } + + @Override + protected int getFlowItemCount() { + return 0; + } + + @Override + public void onInitializeAccessibilityNodeInfoForItem(RecyclerView.Recycler recycler, RecyclerView.State state, View host, AccessibilityNodeInfoCompat info) { + super.onInitializeAccessibilityNodeInfoForItem(recycler, state, host, info); + final AccessibilityNodeInfoCompat.CollectionItemInfoCompat itemInfo = info.getCollectionItemInfo(); + if (itemInfo != null && itemInfo.isHeading()) { + info.setCollectionItemInfo(AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain(itemInfo.getRowIndex(), itemInfo.getRowSpan(), itemInfo.getColumnIndex(), itemInfo.getColumnSpan(), false)); + } + } + + @Override + public void setSpanCount(int spanCount) { + super.setSpanCount(spanCount); + } + }; + layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { + @Override + public int getSpanSize(int position) { + if (adapter.getItemViewType(position) == 2) { + return columnsCount; + } + return 1; + } + }); + layoutManager.setSpanCount(columnsCount); + this.itemAnimator = new DefaultItemAnimator(); + this.itemAnimator.setDurations(280); + this.itemAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + this.itemAnimator.setSupportsChangeAnimations(false); + + this.listView = new SharedMediaLayout.SharedMediaListView(context) { + @Override + public boolean isStories() { + return true; + } + @Override + public int getColumnsCount() { + return columnsCount; + } + @Override + public int getAnimateToColumnsCount() { + return animateToColumnsCount; + } + @Override + public boolean isChangeColumnsAnimation() { + return columnsAnimation; + } + @Override + public float getChangeColumnsProgress() { + return columnsAnimationProgress; + } + @Override + public SharedMediaLayout.InternalListView getSupportingListView() { + return supportingListView; + } + @Override + public RecyclerListView.FastScrollAdapter getMovingAdapter() { + if (!reorder.isIdle() || isActionModeShowed()) return null; + return adapter; + } + @Override + public RecyclerListView.FastScrollAdapter getSupportingAdapter() { + return supportingAdapter; + } + @Override + protected void dispatchDraw(Canvas canvas) { + super.dispatchDraw(canvas); + float bottom = getListBottom(this); + if (columnsAnimation) { + bottom = lerp(bottom, getListBottom(supportingListView), columnsAnimationProgress); + } + footer.setVisibility(adapter.getItemCount() > 0 ? View.VISIBLE : View.GONE); + footer.setTranslationY(bottom); + } + private int getListBottom(ViewGroup listView) { + int bottom = 0; + for (int i = 0; i < listView.getChildCount(); ++i) { + View child = listView.getChildAt(i); + int childBottom = child.getBottom() - listView.getPaddingTop(); + if (childBottom > bottom) { + bottom = childBottom; + } + } + return bottom; + } + }; + this.listView.setScrollingTouchSlop(RecyclerView.TOUCH_SLOP_PAGING); + this.listView.setPinnedSectionOffsetY(-dp(2)); + this.listView.setPadding(0, 0, 0, 0); + this.listView.setItemAnimator(null); + this.listView.setClipToPadding(false); + this.listView.setSectionsType(RecyclerListView.SECTIONS_TYPE_DATE); + this.listView.setLayoutManager(layoutManager); + addView(this.listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + this.listView.addItemDecoration(new RecyclerView.ItemDecoration() { + @Override + public void getItemOffsets(android.graphics.Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { + if (view instanceof SharedPhotoVideoCell2) { + SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) view; + final int position = listView.getChildAdapterPosition(cell), spanCount = layoutManager.getSpanCount(); + cell.isFirst = position % spanCount == 0; + cell.isLast = position % spanCount == spanCount - 1; + outRect.left = 0; + outRect.top = 0; + outRect.bottom = 0; + outRect.right = 0; + } else { + outRect.left = 0; + outRect.top = 0; + outRect.bottom = 0; + outRect.right = 0; + } + } + }); + this.listView.setOnItemClickListener((view, position) -> { + if (view instanceof SharedPhotoVideoCell2) { + SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) view; + MessageObject obj = cell.getMessageObject(); + + if (isActionModeShowed()) { + if (BotPreviewsEditContainer.this.isSelected(obj)) { + BotPreviewsEditContainer.this.unselect(obj); + } else { + BotPreviewsEditContainer.this.select(obj); + } + } else { + fragment.getOrCreateStoryViewer().open( + getContext(), + obj.getId(), + list, + StoriesListPlaceProvider.of(listView) + .addBottomClip(fragment instanceof ProfileActivity && ((ProfileActivity) fragment).myProfile ? dp(68) : 0) + ); + } + } + }); + this.listView.setOnItemLongClickListener((view, position) -> { + if (isActionModeShowed()) return false; + if (view instanceof SharedPhotoVideoCell2) { + SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) view; + MessageObject obj = cell.getMessageObject(); + if (BotPreviewsEditContainer.this.isSelected(obj)) { + BotPreviewsEditContainer.this.unselect(obj); + } else { + BotPreviewsEditContainer.this.select(obj); + } + return true; + } + return false; + }); + + this.supportingListView = new SharedMediaLayout.InternalListView(context); + this.supportingListView.setLayoutManager(supportingLayoutManager = new GridLayoutManager(context, 3) { + @Override + public boolean supportsPredictiveItemAnimations() { + return false; + } + @Override + public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) { + if (columnsAnimation) { + dy = 0; + } + return super.scrollVerticallyBy(dy, recycler, state); + } + }); + this.supportingListView.addItemDecoration(new RecyclerView.ItemDecoration() { + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + if (view instanceof SharedPhotoVideoCell2) { + SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) view; + final int position = supportingListView.getChildAdapterPosition(cell), spanCount = supportingLayoutManager.getSpanCount(); + cell.isFirst = position % spanCount == 0; + cell.isLast = position % spanCount == spanCount - 1; + outRect.left = 0; + outRect.top = 0; + outRect.bottom = 0; + outRect.right = 0; + } else { + outRect.left = 0; + outRect.top = 0; + outRect.bottom = 0; + outRect.right = 0; + } + } + }); + supportingLayoutManager.setSpanCount(animateToColumnsCount); + this.supportingListView.setVisibility(View.GONE); + addView(this.supportingListView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + + this.adapter = new StoriesAdapter(context) { + @Override + public void notifyDataSetChanged() { + super.notifyDataSetChanged(); + if (supportingListView.getVisibility() == View.VISIBLE) { + supportingAdapter.notifyDataSetChanged(); + } + if (emptyView != null) { + emptyView.showProgress(storiesList != null && storiesList.isLoading()); + } + } + }; + this.listView.setAdapter(adapter); + this.supportingListView.setAdapter(this.supportingAdapter = adapter.makeSupporting()); + + this.progressView = new FlickerLoadingView(context) { + + @Override + public int getColumnsCount() { + return columnsCount; + } + + @Override + public int getViewType() { + setIsSingleCell(false); + return FlickerLoadingView.STORIES_TYPE; + } + + private final Paint backgroundPaint = new Paint(); + @Override + protected void onDraw(Canvas canvas) { + backgroundPaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhite, resourcesProvider)); + canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), backgroundPaint); + super.onDraw(canvas); + } + }; + this.progressView.showDate(false); + + this.emptyView = new StickerEmptyView(context, this.progressView, StickerEmptyView.STICKER_TYPE_SEARCH); + this.emptyView.setVisibility(View.GONE); + this.emptyView.setAnimateLayoutChange(true); + addView(this.emptyView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + this.emptyView.setOnTouchListener((v, event) -> true); + this.emptyView.showProgress(true, false); + this.emptyView.stickerView.setVisibility(View.GONE); + this.emptyView.title.setText(getString(R.string.ProfileBotPreviewEmptyTitle)); + this.emptyView.subtitle.setText(formatPluralString("ProfileBotPreviewEmptyText", MessagesController.getInstance(currentAccount).botPreviewMediasMax)); + this.emptyView.button.setText(getString(R.string.ProfileBotPreviewEmptyButton), false); + this.emptyView.button.setVisibility(View.VISIBLE); + this.emptyView.button.setOnClickListener(v -> { + createStory(list == null ? "" : list.lang_code); + }); + this.emptyViewOr = new TextView(context) { + private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + @Override + protected void dispatchDraw(Canvas canvas) { + final int cy = getHeight() / 2 + dp(1); + final int h = Math.max(1, dp(.66f)); + Layout layout = getLayout(); + if (layout != null) { + paint.setColor(Theme.multAlpha(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText, resourcesProvider), .45f)); + canvas.drawRect(0, cy - h / 2f, (getWidth() - (layout.getLineWidth(0) + dp(16))) / 2f, cy + h / 2f, paint); + canvas.drawRect((getWidth() + layout.getLineWidth(0) + dp(16)) / 2f, cy - h / 2f, getWidth(), cy + h / 2f, paint); + } + super.dispatchDraw(canvas); + } + }; + this.emptyViewOr.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText, resourcesProvider)); + this.emptyViewOr.setText(LocaleController.getString(R.string.ProfileBotOr)); + this.emptyViewOr.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + this.emptyViewOr.setTextAlignment(TEXT_ALIGNMENT_CENTER); + this.emptyViewOr.setGravity(Gravity.CENTER); + this.emptyViewOr.setTypeface(AndroidUtilities.bold()); + this.emptyView.linearLayout.addView(this.emptyViewOr, LayoutHelper.createLinear(165, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 0, 17, 0, 12)); + this.emptyViewButton2 = new ButtonWithCounterView(context, false, resourcesProvider); + this.emptyViewButton2.setMinWidth(dp(200)); + this.emptyView.linearLayout.addView(this.emptyViewButton2, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, 44, Gravity.CENTER)); + + this.emptyView.addView(this.progressView, 0, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + + this.listView.setEmptyView(this.emptyView); + this.listView.setAnimateEmptyView(true, RecyclerListView.EMPTY_VIEW_ANIMATION_TYPE_ALPHA); + + this.scrollHelper = new RecyclerAnimationScrollHelper(this.listView, this.layoutManager); + this.reorder = new ItemTouchHelper(new ItemTouchHelper.Callback() { + @Override + public boolean isLongPressDragEnabled() { + return isActionModeShowed(); + } + + @Override + public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + if (isActionModeShowed() && adapter.canReorder(viewHolder.getAdapterPosition())) { + listView.setItemAnimator(itemAnimator); + return makeMovementFlags(ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT, 0); + } else { + return makeMovementFlags(0, 0); + } + } + + @Override + public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) { + if (!adapter.canReorder(viewHolder.getAdapterPosition()) || !adapter.canReorder(target.getAdapterPosition())) { + return false; + } + adapter.swapElements(viewHolder.getAdapterPosition(), target.getAdapterPosition()); + return true; + } + + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + + } + + @Override + public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) { + if (viewHolder != null) { + listView.hideSelector(false); + } + if (actionState == ItemTouchHelper.ACTION_STATE_IDLE) { + adapter.reorderDone(); + listView.setItemAnimator(null); + } else { + listView.cancelClickRunnables(false); + if (viewHolder != null) { + viewHolder.itemView.setPressed(true); + } + } + super.onSelectedChanged(viewHolder, actionState); + } + + @Override + public void clearView(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + super.clearView(recyclerView, viewHolder); + viewHolder.itemView.setPressed(false); + } + }); + this.reorder.attachToRecyclerView(listView); + + this.footer = new FooterView(context, resourcesProvider); + addView(this.footer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP)); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + listView.setPadding(listView.getPaddingLeft(), listView.topPadding, listView.getPaddingRight(), dp(42) + footer.getMeasuredHeight()); + } + + public void updateSelection(boolean animated) { + for (int i = 0; i < listView.getChildCount(); ++i) { + View child = listView.getChildAt(i); + if (child instanceof SharedPhotoVideoCell2) { + SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) child; + cell.setChecked(BotPreviewsEditContainer.this.isSelected(cell.getMessageObject()), animated); + } + } + } + + @Override + protected boolean drawChild(Canvas canvas, View child, long drawingTime) { + if (child == supportingListView) return true; + return super.drawChild(canvas, child, drawingTime); + } + + public class StoriesAdapter extends RecyclerListView.FastScrollAdapter { + + private final Context context; + private final ArrayList<StoriesController.UploadingStory> uploadingStories = new ArrayList<>(); + @Nullable + public StoriesController.StoriesList storiesList; + private StoriesAdapter supportingAdapter; + + public StoriesAdapter(Context context) { + this.context = context; + checkColumns(); + } + + public void setList(StoriesController.StoriesList list) { + this.storiesList = list; + if (this != BotPreviewsEditLangContainer.this.supportingAdapter) { + checkColumns(); + } + notifyDataSetChanged(); + } + + public StoriesAdapter makeSupporting() { + StoriesAdapter adapter = new StoriesAdapter(getContext()); + this.supportingAdapter = adapter; + return adapter; + } + + private void checkColumns() { + if (storiesList == null) { + return; + } + if ((!storiesColumnsCountSet || allowStoriesSingleColumn && getItemCount() > 1) && getItemCount() > 0) { + if (getItemCount() < 5) { + columnsCount = Math.max(1, getItemCount()); + allowStoriesSingleColumn = columnsCount == 1; + } else if (allowStoriesSingleColumn || columnsCount == 1) { + allowStoriesSingleColumn = false; + columnsCount = Math.max(2, SharedConfig.storiesColumnsCount); + } + layoutManager.setSpanCount(columnsCount); + storiesColumnsCountSet = true; + } + } + + @Override + public void notifyDataSetChanged() { + if (storiesList instanceof StoriesController.BotPreviewsList) { + StoriesController.BotPreviewsList botList = (StoriesController.BotPreviewsList) storiesList; + uploadingStories.clear(); + ArrayList<StoriesController.UploadingStory> list = MessagesController.getInstance(storiesList.currentAccount).getStoriesController().getUploadingStories(bot_id); + if (list != null) { + for (int i = 0; i < list.size(); ++i) { + StoriesController.UploadingStory story = list.get(i); + if (story.entry != null && !story.entry.isEdit && TextUtils.equals(story.entry.botLang, botList.lang_code)) { + uploadingStories.add(story); + } + } + } + } + super.notifyDataSetChanged(); + if (supportingAdapter != null) { + supportingAdapter.notifyDataSetChanged(); + } + if (this != BotPreviewsEditLangContainer.this.supportingAdapter) { + checkColumns(); + updateFooter(); + } + } + + @Override + public int getItemCount() { + if (storiesList == null) { + return 0; + } + return uploadingStories.size() + storiesList.getCount(); + } + + @Override + public int getTotalItemsCount() { + return getItemCount(); + } + + @Override + public boolean isEnabled(RecyclerView.ViewHolder holder) { + return false; + } + + private SharedPhotoVideoCell2.SharedResources sharedResources; + + FlickerLoadingView globalGradientView; + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + if (sharedResources == null) { + sharedResources = new SharedPhotoVideoCell2.SharedResources(parent.getContext(), resourcesProvider); + } + SharedPhotoVideoCell2 cell = new SharedPhotoVideoCell2(context, sharedResources, currentAccount); + cell.setCheck2(); + cell.setGradientView(globalGradientView); + cell.isStory = true; + return new RecyclerListView.Holder(cell); + } + + + private int columnsCount() { + if (this == supportingAdapter) return animateToColumnsCount; + return columnsCount; + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + if (storiesList == null) { + return; + } + int viewType = holder.getItemViewType(); + if (!(holder.itemView instanceof SharedPhotoVideoCell2)) return; + SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) holder.itemView; + cell.isStory = true; + if (position >= 0 && position < uploadingStories.size()) { + StoriesController.UploadingStory uploadingStory = uploadingStories.get(position); + cell.isStoryPinned = false; + if (uploadingStory.sharedMessageObject == null) { + final TL_stories.TL_storyItem storyItem = new TL_stories.TL_storyItem(); + storyItem.id = storyItem.messageId = Long.hashCode(uploadingStory.random_id); + storyItem.attachPath = uploadingStory.firstFramePath; + uploadingStory.sharedMessageObject = new MessageObject(storiesList.currentAccount, storyItem) { + @Override + public float getProgress() { + return uploadingStory.progress; + } + }; + uploadingStory.sharedMessageObject.uploadingStory = uploadingStory; + } + cell.setMessageObject(uploadingStory.sharedMessageObject, columnsCount()); + cell.isStory = true; + cell.setReorder(false); + cell.setChecked(false, false); + return; + } + position -= uploadingStories.size(); + if (position < 0 || position >= storiesList.messageObjects.size()) { + cell.isStoryPinned = false; + cell.setMessageObject(null, columnsCount()); + cell.isStory = true; + return; + } + MessageObject messageObject = storiesList.messageObjects.get(position); + cell.isStoryPinned = messageObject != null && storiesList.isPinned(messageObject.getId()); + cell.setReorder(true); + cell.setMessageObject(messageObject, columnsCount()); + if (isActionModeShowed() && messageObject != null) { + cell.setChecked(BotPreviewsEditContainer.this.isSelected(messageObject), true); + } else { + cell.setChecked(false, false); + } + } + + public void load(boolean force) { + if (storiesList == null) { + return; + } + + final int columnCount = columnsCount(); + final int count = Math.min(100, Math.max(1, columnCount / 2) * columnCount * columnCount); + storiesList.load(force, count); + } + + @Override + public int getItemViewType(int i) { + return 19; + } + + @Override + public String getLetter(int position) { + if (storiesList == null) { + return null; + } + if (position < 0 || position >= storiesList.messageObjects.size()) { + return null; + } + MessageObject messageObject = storiesList.messageObjects.get(position); + if (messageObject == null || messageObject.storyItem == null) { + return null; + } + return LocaleController.formatYearMont(messageObject.storyItem.date, true); + } + + @Override + public void onFastScrollSingleTap() { + + } + + public boolean canReorder(int position) { + if (storiesList == null) return false; + if (storiesList instanceof StoriesController.BotPreviewsList) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(bot_id); + return user != null && user.bot && user.bot_has_main_app && user.bot_can_edit; + } + if (position < 0 || position >= storiesList.messageObjects.size()) return false; + MessageObject messageObject = storiesList.messageObjects.get(position); + return storiesList.isPinned(messageObject.getId()); + } + + public ArrayList<Integer> lastPinnedIds = new ArrayList<>(); + public boolean applyingReorder; + + public boolean swapElements(int fromPosition, int toPosition) { + if (storiesList == null) return false; + if (fromPosition < 0 || fromPosition >= storiesList.messageObjects.size()) return false; + if (toPosition < 0 || toPosition >= storiesList.messageObjects.size()) return false; + + ArrayList<Integer> pinnedIds; + if (storiesList instanceof StoriesController.BotPreviewsList) { + pinnedIds = new ArrayList<>(); + for (int i = 0; i < storiesList.messageObjects.size(); ++i) { + pinnedIds.add(storiesList.messageObjects.get(i).getId()); + } + } else { + pinnedIds = new ArrayList<>(storiesList.pinnedIds); + } + + if (!applyingReorder) { + lastPinnedIds.clear(); + lastPinnedIds.addAll(pinnedIds); + applyingReorder = true; + } + + MessageObject from = storiesList.messageObjects.get(fromPosition); + MessageObject to = storiesList.messageObjects.get(toPosition); + + pinnedIds.remove((Object) from.getId()); + pinnedIds.add(Utilities.clamp(toPosition, pinnedIds.size(), 0), from.getId()); + + storiesList.updatePinnedOrder(pinnedIds, false); + + notifyItemMoved(fromPosition, toPosition); + + return true; + } + + public void reorderDone() { + if (storiesList == null) return; + if (!applyingReorder) return; + + ArrayList<Integer> ids; + if (storiesList instanceof StoriesController.BotPreviewsList) { + ids = new ArrayList<>(); + for (int i = 0; i < storiesList.messageObjects.size(); ++i) { + ids.add(storiesList.messageObjects.get(i).getId()); + } + } else { + ids = storiesList.pinnedIds; + } + + boolean changed = lastPinnedIds.size() != ids.size(); + if (!changed) { + for (int i = 0; i < lastPinnedIds.size(); ++i) { + if (lastPinnedIds.get(i) != ids.get(i)) { + changed = true; + break; + } + } + } + + if (changed) { + storiesList.updatePinnedOrder(ids, true); + } + + applyingReorder = false; + } + + @Override + public void getPositionForScrollProgress(RecyclerListView listView, float progress, int[] position) { + int viewHeight = listView.getChildAt(0).getMeasuredHeight(); + int columnsCount = columnsCount(); + int totalHeight = (int) (Math.ceil(getTotalItemsCount() / (float) columnsCount) * viewHeight); + int listHeight = listView.getMeasuredHeight() - listView.getPaddingTop(); + if (viewHeight == 0) { + position[0] = position[1] = 0; + return; + } + position[0] = (int) ((progress * (totalHeight - listHeight)) / viewHeight) * columnsCount; + position[1] = (int) (progress * (totalHeight - listHeight)) % viewHeight; + } + } + + boolean isInPinchToZoomTouchMode; + boolean maybePinchToZoomTouchMode; + boolean maybePinchToZoomTouchMode2; + boolean isPinnedToTop; + + private int pointerId1, pointerId2; + + float pinchStartDistance; + float pinchScale; + boolean pinchScaleUp; + int pinchCenterPosition; + int pinchCenterOffset; + int pinchCenterX; + int pinchCenterY; + Rect rect = new Rect(); +// +// private int startedTrackingPointerId; +// private boolean startedTracking; +// private boolean maybeStartTracking; +// private int startedTrackingX; +// private int startedTrackingY; +// private VelocityTracker velocityTracker; + + public boolean checkPinchToZoom(MotionEvent ev) { + if (list == null || getParent() == null) { + return false; + } + if (columnsAnimation && !isInPinchToZoomTouchMode) { + return true; + } + + if (ev.getActionMasked() == MotionEvent.ACTION_DOWN || ev.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN) { + if (maybePinchToZoomTouchMode && !isInPinchToZoomTouchMode && ev.getPointerCount() == 2 /*&& finishZoomTransition == null*/) { + pinchStartDistance = (float) Math.hypot(ev.getX(1) - ev.getX(0), ev.getY(1) - ev.getY(0)); + + pinchScale = 1f; + + pointerId1 = ev.getPointerId(0); + pointerId2 = ev.getPointerId(1); + + listView.cancelClickRunnables(false); + listView.cancelLongPress(); + listView.dispatchTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_CANCEL, 0, 0, 0)); + + View view = (View) getParent(); + pinchCenterX = (int) ((int) ((ev.getX(0) + ev.getX(1)) / 2.0f) - view.getX() - getX()); + pinchCenterY = (int) ((int) ((ev.getY(0) + ev.getY(1)) / 2.0f) - view.getY() - getY()); + + selectPinchPosition(pinchCenterX, pinchCenterY); + maybePinchToZoomTouchMode2 = true; + } + if (ev.getActionMasked() == MotionEvent.ACTION_DOWN) { + View view = (View) getParent(); + float y = ev.getY() - view.getY() - getY(); + if (y > 0) { + maybePinchToZoomTouchMode = true; + } + } + + } else if (ev.getActionMasked() == MotionEvent.ACTION_MOVE && (isInPinchToZoomTouchMode || maybePinchToZoomTouchMode2)) { + int index1 = -1; + int index2 = -1; + for (int i = 0; i < ev.getPointerCount(); i++) { + if (pointerId1 == ev.getPointerId(i)) { + index1 = i; + } + if (pointerId2 == ev.getPointerId(i)) { + index2 = i; + } + } + if (index1 == -1 || index2 == -1) { + maybePinchToZoomTouchMode = false; + maybePinchToZoomTouchMode2 = false; + isInPinchToZoomTouchMode = false; + finishPinchToMediaColumnsCount(); + return false; + } + pinchScale = (float) Math.hypot(ev.getX(index2) - ev.getX(index1), ev.getY(index2) - ev.getY(index1)) / pinchStartDistance; + if (!isInPinchToZoomTouchMode && (pinchScale > 1.01f || pinchScale < 0.99f)) { + isInPinchToZoomTouchMode = true; + pinchScaleUp = pinchScale > 1f; + + startPinchToMediaColumnsCount(pinchScaleUp); + } + if (isInPinchToZoomTouchMode) { + if ((pinchScaleUp && pinchScale < 1f) || (!pinchScaleUp && pinchScale > 1f)) { + columnsAnimationProgress = 0; + } else { + columnsAnimationProgress = Math.max(0, Math.min(1, pinchScaleUp ? (1f - (2f - pinchScale) / 1f) : ((1f - pinchScale) / 0.5f))); + } + if (columnsAnimationProgress == 1f || columnsAnimationProgress == 0f) { + if (columnsAnimationProgress == 1f) { + int newRow = (int) Math.ceil(pinchCenterPosition / (float) animateToColumnsCount); + int columnWidth = (int) (listView.getMeasuredWidth() / (float) animateToColumnsCount); + int newColumn = (int) ((getStartedTrackingX() / (float) (listView.getMeasuredWidth() - columnWidth)) * (animateToColumnsCount - 1)); + int newPosition = newRow * animateToColumnsCount + newColumn; + if (newPosition >= adapter.getItemCount()) { + newPosition = adapter.getItemCount() - 1; + } + pinchCenterPosition = newPosition; + } + + finishPinchToMediaColumnsCount(); + if (columnsAnimationProgress == 0) { + pinchScaleUp = !pinchScaleUp; + } + + startPinchToMediaColumnsCount(pinchScaleUp); + pinchStartDistance = (float) Math.hypot(ev.getX(1) - ev.getX(0), ev.getY(1) - ev.getY(0)); + } + + listView.invalidate(); +// if (mediaPages[0].fastScrollHintView != null) { +// mediaPages[0].invalidate(); +// } + } + } else if ((ev.getActionMasked() == MotionEvent.ACTION_UP || (ev.getActionMasked() == MotionEvent.ACTION_POINTER_UP && checkPointerIds(ev)) || ev.getActionMasked() == MotionEvent.ACTION_CANCEL) && isInPinchToZoomTouchMode) { + maybePinchToZoomTouchMode2 = false; + maybePinchToZoomTouchMode = false; + isInPinchToZoomTouchMode = false; + finishPinchToMediaColumnsCount(); + } + + return isInPinchToZoomTouchMode; + } + + private void selectPinchPosition(int pinchCenterX, int pinchCenterY) { + pinchCenterPosition = -1; + int y = pinchCenterY + listView.blurTopPadding; +// if (getY() != 0 && viewType == VIEW_TYPE_PROFILE_ACTIVITY) { +// y = 0; +// } + for (int i = 0; i < listView.getChildCount(); i++) { + View child = listView.getChildAt(i); + child.getHitRect(rect); + if (rect.contains(pinchCenterX, y)) { + pinchCenterPosition = listView.getChildLayoutPosition(child); + pinchCenterOffset = child.getTop(); + } + } +// if (delegate.canSearchMembers()) { +// if (pinchCenterPosition == -1) { +// float x = Math.min(1, Math.max(pinchCenterX / (float) mediaPages[0].listView.getMeasuredWidth(), 0)); +// final int ci = mediaPages[0].selectedType == TAB_STORIES || mediaPages[0].selectedType == TAB_ARCHIVED_STORIES ? 1 : 0; +// pinchCenterPosition = (int) (mediaPages[0].layoutManager.findFirstVisibleItemPosition() + (columnsCount - 1) * x); +// pinchCenterOffset = 0; +// } +// } + } + + private boolean checkPointerIds(MotionEvent ev) { + if (ev.getPointerCount() < 2) { + return false; + } + if (pointerId1 == ev.getPointerId(0) && pointerId2 == ev.getPointerId(1)) { + return true; + } + if (pointerId1 == ev.getPointerId(1) && pointerId2 == ev.getPointerId(0)) { + return true; + } + return false; + } + + + public int getNextMediaColumnsCount(int mediaColumnsCount, boolean up) { + int newColumnsCount = mediaColumnsCount + (!up ? 1 : -1); + if (newColumnsCount > 6) { + newColumnsCount = !up ? 9 : 6; + } + return Utilities.clamp(newColumnsCount, 6, allowStoriesSingleColumn ? 1 : 2); + } + + private void startPinchToMediaColumnsCount(boolean pinchScaleUp) { + if (columnsAnimation) { + return; + } + if (isActionModeShowed()) { + return; + } + int newColumnsCount = getNextMediaColumnsCount(columnsCount, pinchScaleUp); + animateToColumnsCount = newColumnsCount; + if (animateToColumnsCount == columnsCount || allowStoriesSingleColumn) { + return; + } + supportingListView.setVisibility(View.VISIBLE); + supportingListView.setAdapter(supportingAdapter); + supportingListView.setPadding( + supportingListView.getPaddingLeft(), + 0, // changeColumnsTab == TAB_ARCHIVED_STORIES ? dp(64) : 0, + supportingListView.getPaddingRight(), + dp(42) + footer.getMeasuredHeight() // isStoriesView() ? dp(72) : 0 + ); +// mediaPage.buttonView.setVisibility(changeColumnsTab == TAB_STORIES && isStoriesView() ? View.VISIBLE : View.GONE); + + supportingLayoutManager.setSpanCount(newColumnsCount); + supportingListView.invalidateItemDecorations(); + supportingLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { + @Override + public int getSpanSize(int position) { + if (adapter.getItemViewType(position) == 2) { + return columnsCount; + } + return 1; + } + }); + AndroidUtilities.updateVisibleRows(listView); + + columnsAnimation = true; +// if (changeColumnsTab == TAB_PHOTOVIDEO) { +// sharedMediaData[0].setListFrozen(true); +// } + columnsAnimationProgress = 0; + if (pinchCenterPosition >= 0) { + supportingLayoutManager.scrollToPositionWithOffset(pinchCenterPosition, pinchCenterOffset - supportingListView.getPaddingTop()); + } else { + saveScrollPosition(); + } + } + + private void finishPinchToMediaColumnsCount() { + if (columnsAnimation) { + if (columnsAnimationProgress == 1f) { + columnsAnimation = false; + setColumnsCount = columnsCount = animateToColumnsCount; + SharedConfig.setStoriesColumnsCount(animateToColumnsCount); + + int oldItemCount = adapter.getItemCount(); +// if (i == TAB_PHOTOVIDEO) { +// sharedMediaData[0].setListFrozen(false); +// } + supportingListView.setVisibility(View.GONE); + layoutManager.setSpanCount(columnsCount); + listView.invalidateItemDecorations(); + listView.invalidate(); + if (adapter.getItemCount() == oldItemCount) { + AndroidUtilities.updateVisibleRows(listView); + } else { + adapter.notifyDataSetChanged(); + } + if (pinchCenterPosition >= 0) { + View view = supportingLayoutManager.findViewByPosition(pinchCenterPosition); + if (view != null) { + pinchCenterOffset = view.getTop(); + } + layoutManager.scrollToPositionWithOffset(pinchCenterPosition, -listView.getPaddingTop() + pinchCenterOffset); + } else { + saveScrollPosition(); + } + return; + } + if (columnsAnimationProgress == 0) { + columnsAnimation = false; +// if (changeColumnsTab == TAB_PHOTOVIDEO) { +// sharedMediaData[0].setListFrozen(false); +// } + supportingListView.setVisibility(View.GONE); + listView.invalidate(); + return; + } + boolean forward = columnsAnimationProgress > 0.2f; + ValueAnimator animator = ValueAnimator.ofFloat(columnsAnimationProgress, forward ? 1f : 0); + animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + columnsAnimationProgress = (float) valueAnimator.getAnimatedValue(); + listView.invalidate(); + } + }); + animator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + columnsAnimation = false; + if (forward) { + columnsCount = animateToColumnsCount; + setColumnsCount = columnsCount; + SharedConfig.setStoriesColumnsCount(animateToColumnsCount); + } + int oldItemCount = adapter.getItemCount(); +// if (i == TAB_PHOTOVIDEO) { +// sharedMediaData[0].setListFrozen(false); +// } + if (forward) { + layoutManager.setSpanCount(columnsCount); + listView.invalidateItemDecorations(); + if (adapter.getItemCount() == oldItemCount) { + AndroidUtilities.updateVisibleRows(listView); + } else { + adapter.notifyDataSetChanged(); + } + } + supportingListView.setVisibility(View.GONE); + if (pinchCenterPosition >= 0) { + if (forward) { + View view = supportingLayoutManager.findViewByPosition(pinchCenterPosition); + if (view != null) { + pinchCenterOffset = view.getTop(); + } + } + layoutManager.scrollToPositionWithOffset(pinchCenterPosition, -listView.getPaddingTop() + pinchCenterOffset); + } else { + saveScrollPosition(); + } + super.onAnimationEnd(animation); + } + }); + animator.setInterpolator(CubicBezierInterpolator.DEFAULT); + animator.setDuration(200); + animator.start(); + } + } + + private void saveScrollPosition() { +// for (int k = 0; k < mediaPages.length; k++) { +// RecyclerListView listView = mediaPages[k].listView; +// if (listView != null) { +// int messageId = 0; +// int offset = 0; +// for (int i = 0; i < listView.getChildCount(); i++) { +// View child = listView.getChildAt(i); +// if (child instanceof SharedPhotoVideoCell2) { +// SharedPhotoVideoCell2 cell = (SharedPhotoVideoCell2) child; +// messageId = cell.getMessageId(); +// offset = cell.getTop(); +// } +// if (child instanceof SharedDocumentCell) { +// SharedDocumentCell cell = (SharedDocumentCell) child; +// messageId = cell.getMessage().getId(); +// offset = cell.getTop(); +// } +// if (child instanceof SharedAudioCell) { +// SharedAudioCell cell = (SharedAudioCell) child; +// messageId = cell.getMessage().getId(); +// offset = cell.getTop(); +// } +// if (messageId != 0) { +// break; +// } +// } +// if (messageId != 0) { +// int index = -1, position = -1; +// final int type = mediaPages[k].selectedType; +// if (type == TAB_STORIES || type == TAB_ARCHIVED_STORIES) { +// SharedMediaLayout.StoriesAdapter adapter = type == TAB_STORIES ? storiesAdapter : archivedStoriesAdapter; +// if (adapter.storiesList != null) { +// for (int i = 0; i < adapter.storiesList.messageObjects.size(); ++i) { +// if (messageId == adapter.storiesList.messageObjects.get(i).getId()) { +// index = i; +// break; +// } +// } +// } +// position = index; +// } else if (type >= 0 && type < sharedMediaData.length) { +// for (int i = 0; i < sharedMediaData[type].messages.size(); i++) { +// if (messageId == sharedMediaData[type].messages.get(i).getId()) { +// index = i; +// break; +// } +// } +// position = sharedMediaData[type].startOffset + index; +// } else { +// continue; +// } +// if (index >= 0) { +// ((LinearLayoutManager) listView.getLayoutManager()).scrollToPositionWithOffset(position, -mediaPages[k].listView.getPaddingTop() + offset); +// if (photoVideoChangeColumnsAnimation) { +// mediaPages[k].animationSupportingLayoutManager.scrollToPositionWithOffset(position, -mediaPages[k].listView.getPaddingTop() + offset); +// } +// } +// } +// } +// } + } + + public class FooterView extends LinearLayout { + + private final TextView textView; + private final ButtonWithCounterView buttonView; + private final TextView orTextView; + private final ButtonWithCounterView button2View; + + public FooterView(Context context, Theme.ResourcesProvider resourcesProvider) { + super(context); + + setPadding(dp(24), dp(21), dp(24), dp(21)); + setOrientation(VERTICAL); + + textView = new TextView(context); + textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText, resourcesProvider)); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + textView.setGravity(Gravity.CENTER); + textView.setTextAlignment(TEXT_ALIGNMENT_CENTER); + addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 0, 0, 19)); + + buttonView = new ButtonWithCounterView(context, resourcesProvider) { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + }; + buttonView.setMinWidth(dp(200)); + buttonView.setText(LocaleController.getString(R.string.ProfileBotAddPreview), false); + addView(buttonView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, 44, Gravity.CENTER)); + + orTextView = new TextView(context) { + private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + @Override + protected void dispatchDraw(Canvas canvas) { + final int cy = getHeight() / 2 + dp(1); + final int h = Math.max(1, dp(.66f)); + Layout layout = getLayout(); + if (layout != null) { + paint.setColor(Theme.multAlpha(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText, resourcesProvider), .45f)); + canvas.drawRect(0, cy - h / 2f, (getWidth() - (layout.getLineWidth(0) + dp(16))) / 2f, cy + h / 2f, paint); + canvas.drawRect((getWidth() + layout.getLineWidth(0) + dp(16)) / 2f, cy - h / 2f, getWidth(), cy + h / 2f, paint); + } + super.dispatchDraw(canvas); + } + }; + orTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText, resourcesProvider)); + orTextView.setText(LocaleController.getString(R.string.ProfileBotOr)); + orTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + orTextView.setTextAlignment(TEXT_ALIGNMENT_CENTER); + orTextView.setGravity(Gravity.CENTER); + orTextView.setTypeface(AndroidUtilities.bold()); + addView(orTextView, LayoutHelper.createLinear(165, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 0, 17, 0, 12)); + + button2View = new ButtonWithCounterView(context, false, resourcesProvider); + button2View.setMinWidth(dp(200)); + addView(button2View, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, 44, Gravity.CENTER)); + } + + public void set( + CharSequence text, + CharSequence buttonText, Runnable buttonListener + ) { + set(text, buttonText, buttonListener, null, null); + } + + public void set( + CharSequence text, + CharSequence buttonText, Runnable buttonListener, + CharSequence button2Text, Runnable button2Listener + ) { + textView.setText(text); + buttonView.setText(buttonText, false); + buttonView.setOnClickListener(v -> buttonListener.run()); + if (button2Text == null) { + orTextView.setVisibility(View.GONE); + button2View.setVisibility(View.GONE); + } else { + orTextView.setVisibility(View.VISIBLE); + button2View.setVisibility(View.VISIBLE); + button2View.setText(button2Text, false); + button2View.setOnClickListener(v -> button2Listener.run()); + } + } + } + + } + + private static class ChooseLanguageSheet extends BottomSheetWithRecyclerListView { + + private final int currentAccount; + private final CharSequence title; + private UniversalAdapter adapter; + + private FrameLayout searchContainer; + private ImageView searchImageView; + private EditTextBoldCursor searchEditText; + + public ChooseLanguageSheet(BaseFragment fragment, CharSequence title, Utilities.Callback<String> whenSelected) { + super(fragment, true, false, false, fragment.getResourceProvider()); + + searchContainer = new FrameLayout(getContext()); + searchImageView = new ImageView(getContext()); + + this.currentAccount = fragment.getCurrentAccount(); + this.title = title; + updateTitle(); + topPadding = .6f; + setShowHandle(true); + handleOffset = true; + fixNavigationBar(); + setSlidingActionBar(); + + recyclerListView.setPadding(backgroundPaddingLeft, 0, backgroundPaddingLeft, 0); + recyclerListView.setOnItemClickListener((view, position) -> { + if (adapter == null) return; + position -= 1; + UItem item = adapter.getItem(position); + if (item != null && item.object instanceof TranslateController.Language) { + whenSelected.run(((TranslateController.Language) item.object).code); + dismiss(); + } + }); + } + + @Override + protected CharSequence getTitle() { + return title; + } + + @Override + protected RecyclerListView.SelectionAdapter createAdapter(RecyclerListView listView) { + adapter = new UniversalAdapter(listView, getContext(), currentAccount, 0, this::fillItems, resourcesProvider); + adapter.setApplyBackground(false); + return adapter; + } + + private void fillItems(ArrayList<UItem> items, UniversalAdapter adapter) { + ArrayList<TranslateController.Language> languages = TranslateController.getLanguages(); + for (TranslateController.Language lng : languages) { + items.add(LanguageView.Factory.of(lng)); + } + } + + public static class LanguageView extends LinearLayout { + + private final TextView title; + private final TextView subtitle; + + public LanguageView(Context context) { + super(context); + + setPadding(dp(22), 0, dp(22), 0); + setOrientation(VERTICAL); + + title = new TextView(context); + title.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + title.setTextColor(Theme.getColor(Theme.key_dialogTextBlack)); + title.setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT); + addView(title, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 0, 7, 0, 0)); + + subtitle = new TextView(context); + subtitle.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + subtitle.setTextColor(Theme.getColor(Theme.key_dialogTextGray2)); + subtitle.setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT); + addView(subtitle, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 0, 4, 0, 0)); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure( + MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(dp(56), MeasureSpec.EXACTLY) + ); + } + + private boolean needDivider; + public void set(TranslateController.Language lng, boolean divider) { + title.setText(lng.displayName); + subtitle.setText(lng.ownDisplayName); + + if (needDivider != divider) invalidate(); + setWillNotDraw(!(needDivider = divider)); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + if (needDivider) { + canvas.drawRect(getPaddingLeft(), getHeight() - 1, getWidth(), getHeight(), Theme.dividerPaint); + } + } + + public static class Factory extends UItem.UItemFactory<LanguageView> { + @Override + public LanguageView createView(Context context, int currentAccount, int classGuid, Theme.ResourcesProvider resourcesProvider) { + return new LanguageView(context); + } + @Override + public void bindView(View view, UItem item, boolean divider) { + ((LanguageView) view).set((TranslateController.Language) item.object, divider); + } + public static UItem of(TranslateController.Language l) { + UItem item = UItem.ofFactory(LanguageView.Factory.class); + item.object = l; + return item; + } + } + } + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/ButtonWithCounterView.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/ButtonWithCounterView.java index 5b1e9636780..b4e84349f7d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/ButtonWithCounterView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/ButtonWithCounterView.java @@ -44,7 +44,7 @@ public class ButtonWithCounterView extends FrameLayout implements Loadable { private final AnimatedTextView.AnimatedTextDrawable countText; private float countAlpha; private final AnimatedFloat countAlphaAnimated = new AnimatedFloat(350, CubicBezierInterpolator.EASE_OUT_QUINT); - private final View rippleView; + public final View rippleView; private final boolean filled; public ButtonWithCounterView(Context context, Theme.ResourcesProvider resourcesProvider) { @@ -111,12 +111,12 @@ public void setColor(int color) { } public void updateColors() { + text.setTextColor(Theme.getColor(filled ? Theme.key_featuredStickers_buttonText : Theme.key_featuredStickers_addButton, resourcesProvider)); if (filled) { rippleView.setBackground(Theme.createRadSelectorDrawable(Theme.getColor(Theme.key_listSelector, resourcesProvider), 8, 8)); } else { - rippleView.setBackground(Theme.createRadSelectorDrawable(Theme.multAlpha(Theme.getColor(Theme.key_featuredStickers_addButton, resourcesProvider), .10f), 8, 8)); + rippleView.setBackground(Theme.createRadSelectorDrawable(Theme.multAlpha(text.getTextColor(), .10f), 8, 8)); } - text.setTextColor(Theme.getColor(filled ? Theme.key_featuredStickers_buttonText : Theme.key_featuredStickers_addButton, resourcesProvider)); subText.setTextColor(Theme.getColor(filled ? Theme.key_featuredStickers_buttonText : Theme.key_featuredStickers_addButton, resourcesProvider)); countText.setTextColor(Theme.getColor(Theme.key_featuredStickers_addButton, resourcesProvider)); } @@ -128,6 +128,9 @@ public void setCounterColor(int color) { public void setTextColor(int color) { text.setTextColor(color); + if (!filled) { + rippleView.setBackground(Theme.createRadSelectorDrawable(Theme.multAlpha(text.getTextColor(), .10f), 8, 8)); + } } private boolean countFilled = true; @@ -537,4 +540,21 @@ public void setGlobalAlpha(float v) { public void wrapContentDynamic() { wrapContentDynamic = true; } + + private int minWidth; + private boolean wrapWidth; + + public void setMinWidth(int px) { + this.wrapWidth = true; + this.minWidth = px; + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + if (wrapWidth) { + super.onMeasure(MeasureSpec.makeMeasureSpec((int) Math.min(Math.max(getPaddingLeft() + text.getCurrentWidth() + getPaddingRight(), minWidth), MeasureSpec.getSize(widthMeasureSpec)), MeasureSpec.EXACTLY), heightMeasureSpec); + } else { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/DraftsController.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/DraftsController.java index dffeafb73d2..ef56eac0743 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/DraftsController.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/DraftsController.java @@ -516,6 +516,10 @@ public static class StoryDraft { public TLRPC.InputPeer peer; + public long botId; + public String botLang; + public TLRPC.InputMedia botEdit; + public StoryDraft(@NonNull StoryEntry entry) { this.id = entry.draftId; this.date = entry.draftDate; @@ -572,6 +576,9 @@ public StoryDraft(@NonNull StoryEntry entry) { this.videoVolume = entry.videoVolume; this.peer = entry.peer; + this.botId = entry.botId; + this.botLang = entry.botLang; + this.botEdit = entry.editingBotPreview; } public StoryEntry toEntry() { @@ -666,6 +673,10 @@ public StoryEntry toEntry() { entry.videoVolume = videoVolume; entry.peer = peer; + entry.botId = botId; + entry.botLang = botLang; + entry.editingBotPreview = botEdit; + return entry; } @@ -791,6 +802,15 @@ public void toStream(AbstractSerializedData stream) { } stream.writeFloat(videoVolume); + + stream.writeInt64(botId); + stream.writeString(botLang == null ? "" : botLang); + if (botEdit == null) { + stream.writeInt32(TLRPC.TL_null.constructor); + } else { + botEdit.serializeToStream(stream); + } + } public int getObjectSize() { @@ -976,6 +996,14 @@ public StoryDraft(@NonNull AbstractSerializedData stream, boolean exception) { if (stream.remaining() > 0) { videoVolume = stream.readFloat(exception); } + if (stream.remaining() > 0) { + botId = stream.readInt64(exception); + botLang = stream.readString(exception); + magic = stream.readInt32(exception); + if (magic != TLRPC.TL_null.constructor) { + botEdit = TLRPC.InputMedia.TLdeserialize(stream, magic, exception); + } + } } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/EmojiBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/EmojiBottomSheet.java index 9bb84625a58..2d6c7a36499 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/EmojiBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/EmojiBottomSheet.java @@ -26,6 +26,8 @@ import android.os.Build; import android.text.Editable; import android.text.Layout; +import android.text.SpannableStringBuilder; +import android.text.Spanned; import android.text.StaticLayout; import android.text.TextPaint; import android.text.TextUtils; @@ -53,6 +55,7 @@ import androidx.recyclerview.widget.LinearSmoothScrollerCustom; import androidx.recyclerview.widget.RecyclerView; +import org.checkerframework.checker.units.qual.A; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.Emoji; import org.telegram.messenger.FileLoader; @@ -97,6 +100,7 @@ import org.telegram.ui.Components.EmojiView; import org.telegram.ui.Components.ExtendedGridLayoutManager; import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.LoadingSpan; import org.telegram.ui.Components.Premium.PremiumFeatureBottomSheet; import org.telegram.ui.Components.RLottieDrawable; import org.telegram.ui.Components.Reactions.ReactionImageHolder; @@ -2783,6 +2787,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { public static final int WIDGET_PHOTO = 2; public static final int WIDGET_REACTION = 3; public static final int WIDGET_LINK = 4; + public static final int WIDGET_WEATHER = 5; private class StoryWidgetsCell extends View { @@ -2800,14 +2805,30 @@ private class StoryWidgetsCell extends View { public StoryWidgetsCell(Context context) { super(context); setPadding(0, 0, 0, 0); + if (canShowWidget(WIDGET_LINK)) + widgets.add(new Button(WIDGET_LINK, R.drawable.msg_limit_links, LocaleController.getString(R.string.StoryWidgetLink)).needsPremium()); if (canShowWidget(WIDGET_LOCATION)) widgets.add(new Button(WIDGET_LOCATION, R.drawable.map_pin3, LocaleController.getString(R.string.StoryWidgetLocation))); + if (canShowWidget(WIDGET_WEATHER)) { + Weather.State weather = Weather.getCached(); + Button[] btn = new Button[] { null }; + CharSequence text = Emoji.replaceEmoji((weather == null ? "🌤" : weather.getEmoji()) + " " + (weather == null ? (Weather.isDefaultCelsius() ? "24°C" : "72°F") : weather.getTemperature()), textPaint.getFontMetricsInt(), false); + if (MessagesController.getInstance(currentAccount).storyWeatherPreload && Weather.hasLocationPermission() && weather == null) { + text = new SpannableStringBuilder("___"); + ((SpannableStringBuilder) text).setSpan(new LoadingSpan(this, dp(68)), 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + btn[0] = new Button(this, WIDGET_WEATHER, text); + Weather.fetch(false, state -> { + btn[0].setText(Emoji.replaceEmoji((state == null ? "🌤" : state.getEmoji()) + " " + (state == null ? (Weather.isDefaultCelsius() ? "24°C" : "72°F") : state.getTemperature()), textPaint.getFontMetricsInt(), false)); + invalidate(); + requestLayout(); + }); + } + widgets.add(btn[0] == null ? new Button(this, WIDGET_WEATHER, text) : btn[0]); + } if (canShowWidget(WIDGET_AUDIO)) widgets.add(new Button(WIDGET_AUDIO, R.drawable.filled_widget_music, LocaleController.getString(R.string.StoryWidgetAudio))); if (canShowWidget(WIDGET_PHOTO)) widgets.add(new Button(WIDGET_PHOTO, R.drawable.filled_premium_camera, LocaleController.getString(R.string.StoryWidgetPhoto))); - if (canShowWidget(WIDGET_LINK)) - widgets.add(new Button(WIDGET_LINK, R.drawable.msg_limit_links, LocaleController.getString(R.string.StoryWidgetLink)).needsPremium()); if (canShowWidget(WIDGET_REACTION)) widgets.add(new ReactionWidget()); } @@ -2819,6 +2840,7 @@ private abstract class BaseWidget { int layoutLine = 0; RectF bounds = new RectF(); ButtonBounce bounce = new ButtonBounce(StoryWidgetsCell.this); + public AnimatedFloat animatedWidth = new AnimatedFloat(StoryWidgetsCell.this, 350, CubicBezierInterpolator.EASE_OUT_QUINT); abstract void draw(Canvas canvas, float left, float top); @@ -2829,6 +2851,8 @@ public void onAttachToWindow(boolean attached) { } private class Button extends BaseWidget { + + String emojiDrawable; Drawable drawable; Drawable lockDrawable; StaticLayout layout; @@ -2836,6 +2860,7 @@ private class Button extends BaseWidget { float textLeft; Paint lockPaint; + public Button(int id, int iconId, String string) { this.id = id; this.drawable = getContext().getResources().getDrawable(iconId).mutate(); @@ -2849,6 +2874,25 @@ public Button(int id, int iconId, String string) { this.height = dpf2(36); } + public Button(View view, int id, CharSequence text) { + this.id = id; + text = TextUtils.ellipsize(text, textPaint, AndroidUtilities.displaySize.x * .8f, TextUtils.TruncateAt.END); + this.layout = new StaticLayout(text, textPaint, 99999, Layout.Alignment.ALIGN_NORMAL, 1f, 0f, false); + this.textWidth = this.layout.getLineCount() > 0 ? this.layout.getLineWidth(0) : 0; + this.textLeft = this.layout.getLineCount() > 0 ? this.layout.getLineLeft(0) : 0; + this.width = dpf2(6 + 6) + this.textWidth; + this.height = dpf2(36); + } + + public void setText(CharSequence text) { + text = TextUtils.ellipsize(text, textPaint, AndroidUtilities.displaySize.x * .8f, TextUtils.TruncateAt.END); + this.layout = new StaticLayout(text, textPaint, 99999, Layout.Alignment.ALIGN_NORMAL, 1f, 0f, false); + this.textWidth = this.layout.getLineCount() > 0 ? this.layout.getLineWidth(0) : 0; + this.textLeft = this.layout.getLineCount() > 0 ? this.layout.getLineLeft(0) : 0; + this.width = dpf2(6 + 11.6f) + this.textWidth; + this.height = dpf2(36); + } + public Button needsPremium() { if (!UserConfig.getInstance(currentAccount).isPremium()) { lockDrawable = getContext().getResources().getDrawable(R.drawable.msg_mini_lock3).mutate(); @@ -2868,13 +2912,22 @@ public void draw(Canvas canvas, float left, float top) { if (lockDrawable != null) { canvas.saveLayerAlpha(bounds, 0xFF, Canvas.ALL_SAVE_FLAG); } - drawable.setBounds( - (int) (bounds.left + dp(6)), - (int) (bounds.top + height / 2 - dp(24) / 2), - (int) (bounds.left + dp(6 + 24)), - (int) (bounds.top + height / 2 + dp(24) / 2) - ); - drawable.draw(canvas); + if (drawable == null) { + drawable = Emoji.getEmojiBigDrawable(emojiDrawable); + if (this.drawable instanceof Emoji.EmojiDrawable) { + ((Emoji.EmojiDrawable) this.drawable).fullSize = false; + } + } + if (drawable != null) { + int sz = dp(emojiDrawable == null ? 24 : 22); + drawable.setBounds( + (int) (bounds.left + dp(6 + 12) - sz / 2), + (int) (bounds.top + height / 2 - sz / 2), + (int) (bounds.left + dp(6 + 12) + sz / 2), + (int) (bounds.top + height / 2 + sz / 2) + ); + drawable.draw(canvas); + } if (lockDrawable != null) { AndroidUtilities.rectTmp.set( bounds.left + dp(6 + 24 - 12 + .55f), @@ -2896,7 +2949,7 @@ public void draw(Canvas canvas, float left, float top) { lockDrawable.draw(canvas); canvas.restore(); } - canvas.translate(bounds.left + dp(6 + 24 + 4) - textLeft, bounds.top + height / 2 - layout.getHeight() / 2f); + canvas.translate(bounds.left + dp(6 + (drawable == null && emojiDrawable == null ? 0 : 24 + 4)) - textLeft, bounds.top + height / 2 - layout.getHeight() / 2f); layout.draw(canvas); canvas.restore(); } @@ -3013,7 +3066,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { float x = 0; final int width = MeasureSpec.getSize(widthMeasureSpec); - final int availableWidth = (int) ((width - getPaddingLeft() - getPaddingRight()) * 0.8f); + final int availableWidth = (int) (width - getPaddingLeft() - getPaddingRight()); for (final BaseWidget widget : widgets) { widget.layoutX = x; @@ -3045,6 +3098,19 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { @Override protected void dispatchDraw(Canvas canvas) { + try { + for (int i = 0; i < lineWidths.length; ++i) { + lineWidths[i] = 0; + } + for (final BaseWidget widget : widgets) { + final int i = widget.layoutLine - 1; + if (lineWidths[i] > 0) + lineWidths[i] += dp(10); + lineWidths[i] += widget.animatedWidth.set(widget.width); + } + } catch (Exception e) { + FileLog.e(e); + } for (final BaseWidget widget : widgets) { final float left = getPaddingLeft() + ((getMeasuredWidth() - getPaddingLeft() - getPaddingRight() - lineWidths[widget.layoutLine - 1]) / 2f) + widget.layoutX; final float top = dp(12) + (widget.layoutLine - 1) * dp(36 + 12); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/FlashViews.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/FlashViews.java index 0f10e11c40c..77c2626f7e2 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/FlashViews.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/FlashViews.java @@ -5,6 +5,7 @@ import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; +import android.app.Activity; import android.content.ContentResolver; import android.content.Context; import android.graphics.Canvas; @@ -27,6 +28,7 @@ import android.widget.ImageView; import android.widget.ViewAnimator; +import androidx.annotation.Nullable; import androidx.core.graphics.ColorUtils; import com.google.android.gms.vision.Frame; @@ -38,6 +40,7 @@ import org.telegram.messenger.R; import org.telegram.messenger.Utilities; import org.telegram.ui.Components.CubicBezierInterpolator; +import org.telegram.ui.LaunchActivity; import java.util.ArrayList; @@ -57,11 +60,13 @@ public static int getColor(float warmth) { private final ArrayList<Invertable> invertableViews = new ArrayList<>(); + @Nullable private final WindowManager windowManager; private final View windowView; + @Nullable private final WindowManager.LayoutParams windowViewParams; - public FlashViews(Context context, WindowManager windowManager, View windowView, WindowManager.LayoutParams windowViewParams) { + public FlashViews(Context context, @Nullable WindowManager windowManager, View windowView, @Nullable WindowManager.LayoutParams windowViewParams) { this.context = context; this.windowManager = windowManager; this.windowView = windowView; @@ -84,7 +89,7 @@ protected void dispatchDraw(Canvas canvas) { @Override protected void dispatchDraw(Canvas canvas) { gradientMatrix.reset(); - gradientMatrix.postTranslate(-getX(), -getY()); + gradientMatrix.postTranslate(-getX(), -getY() + AndroidUtilities.statusBarHeight); gradientMatrix.postScale(1f / getScaleX(), 1f / getScaleY(), getPivotX(), getPivotY()); drawGradient(canvas, false); } @@ -94,13 +99,11 @@ protected void dispatchDraw(Canvas canvas) { } public void flash(Utilities.Callback<Utilities.Callback<Runnable>> takePicture) { - windowViewParams.screenBrightness = intensityValue(); - windowManager.updateViewLayout(windowView, windowViewParams); + setScreenBrightness(intensityValue()); flashTo(1f, 320, () -> { AndroidUtilities.runOnUIThread(() -> { takePicture.run(done -> { - windowViewParams.screenBrightness = -1f; - windowManager.updateViewLayout(windowView, windowViewParams); + setScreenBrightness(-1f); AndroidUtilities.runOnUIThread(() -> { flashTo(0f, 240, done); }, 80); @@ -109,6 +112,24 @@ public void flash(Utilities.Callback<Utilities.Callback<Runnable>> takePicture) }); } + private void setScreenBrightness(float value) { + if (windowViewParams != null) { + windowViewParams.screenBrightness = value; + if (windowManager != null) { + windowManager.updateViewLayout(windowView, windowViewParams); + } + } else { + Activity activity = AndroidUtilities.findActivity(context); + if (activity == null) activity = LaunchActivity.instance; + if (activity == null || activity.isFinishing()) return; + final Window window = activity.getWindow(); + if (window == null) return; + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.screenBrightness = value; + window.setAttributes(layoutParams); + } + } + public void previewStart() { flashTo(.85f, 240, null); } @@ -118,14 +139,12 @@ public void previewEnd() { } public void flashIn(Runnable done) { - windowViewParams.screenBrightness = intensityValue(); - windowManager.updateViewLayout(windowView, windowViewParams); + setScreenBrightness(intensityValue()); flashTo(1f, 320, done); } public void flashOut() { - windowViewParams.screenBrightness = -1f; - windowManager.updateViewLayout(windowView, windowViewParams); + setScreenBrightness(-1f); flashTo(0f, 240, null); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/HintView2.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/HintView2.java index 3e13cdbaca0..631e48627a0 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/HintView2.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/HintView2.java @@ -58,6 +58,7 @@ import org.telegram.ui.Components.AnimatedFloat; import org.telegram.ui.Components.AnimatedTextView; import org.telegram.ui.Components.ButtonBounce; +import org.telegram.ui.Components.ColoredImageSpan; import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.LinkPath; import org.telegram.ui.Components.LinkSpanDrawable; @@ -274,7 +275,7 @@ public HintView2 setIcon(Drawable icon) { return this; } - private static float measureCorrectly(CharSequence text, TextPaint paint) { + public static float measureCorrectly(CharSequence text, TextPaint paint) { if (text == null) { return 0; } @@ -285,10 +286,14 @@ private static float measureCorrectly(CharSequence text, TextPaint paint) { TypefaceSpan[] spans = spanned.getSpans(0, text.length(), TypefaceSpan.class); AnimatedEmojiSpan[] animatedSpans = spanned.getSpans(0, text.length(), AnimatedEmojiSpan.class); Emoji.EmojiSpan[] emojiSpans = spanned.getSpans(0, text.length(), Emoji.EmojiSpan.class); + ColoredImageSpan[] imageSpans = spanned.getSpans(0, text.length(), ColoredImageSpan.class); int add = 0; for (int i = 0; i < emojiSpans.length; ++i) { add += emojiSpans[i].size; } + for (int i = 0; i < imageSpans.length; ++i) { + add += imageSpans[i].getSize(paint, text, spanned.getSpanStart(imageSpans[i]), spanned.getSpanEnd(imageSpans[i]), paint.getFontMetricsInt()); + } for (int i = 0; i < animatedSpans.length; ++i) { add += animatedSpans[i].size; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/KeyboardNotifier.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/KeyboardNotifier.java index 178964bbae9..faec1f8d7a4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/KeyboardNotifier.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/KeyboardNotifier.java @@ -16,6 +16,7 @@ public class KeyboardNotifier { private final View rootView; + private View realRootView; private final Utilities.Callback<Integer> listener; public boolean ignoring; private boolean awaitingKeyboard; @@ -23,8 +24,13 @@ public class KeyboardNotifier { private final Rect rect = new Rect(); public KeyboardNotifier(@NonNull View rootView, Utilities.Callback<Integer> listener) { + this(rootView, false, listener); + } + + public KeyboardNotifier(@NonNull View rootView, boolean getRootView, Utilities.Callback<Integer> listener) { this.rootView = rootView; this.listener = listener; + realRootView = rootView; if (this.rootView.isAttachedToWindow()) { rootView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener); @@ -33,6 +39,9 @@ public KeyboardNotifier(@NonNull View rootView, Utilities.Callback<Integer> list this.rootView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { @Override public void onViewAttachedToWindow(@NonNull View v) { + if (getRootView) { + realRootView = v.getRootView(); + } rootView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener); rootView.addOnLayoutChangeListener(onLayoutChangeListener); } @@ -57,7 +66,7 @@ private void update() { } rootView.getWindowVisibleDisplayFrame(rect); - final int screenHeight = rootView.getHeight(); + final int screenHeight = (realRootView == null ? rootView : realRootView).getHeight(); keyboardHeight = screenHeight - rect.bottom; final boolean unique = lastKeyboardHeight != keyboardHeight; lastKeyboardHeight = keyboardHeight; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PaintView.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PaintView.java index 7ca22d37e83..9d65ba9e48e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PaintView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PaintView.java @@ -95,6 +95,7 @@ import org.telegram.ui.ChatActivity; import org.telegram.ui.Components.AnimatedEmojiDrawable; import org.telegram.ui.Components.AnimatedEmojiSpan; +import org.telegram.ui.Components.AnimatedFileDrawable; import org.telegram.ui.Components.BlurringShader; import org.telegram.ui.Components.BulletinFactory; import org.telegram.ui.Components.ButtonBounce; @@ -132,6 +133,7 @@ import org.telegram.ui.Components.Paint.Views.RoundView; import org.telegram.ui.Components.Paint.Views.StickerView; import org.telegram.ui.Components.Paint.Views.TextPaintView; +import org.telegram.ui.Components.Paint.Views.WeatherView; import org.telegram.ui.Components.Point; import org.telegram.ui.Components.Premium.PremiumFeatureBottomSheet; import org.telegram.ui.Components.RLottieDrawable; @@ -277,6 +279,8 @@ public void set(float val) { private boolean fileFromGallery; private File file; private boolean isVideo; + private boolean isBot; + private boolean hasAudio; public ReactionsContainerLayout reactionLayout; ReactionWidgetEntityView reactionForEntity; private float reactionShowProgress; @@ -286,8 +290,15 @@ public void set(float val) { private PreviewView.TextureViewHolder videoTextureHolder; private PreviewView previewView; + public void setHasAudio(boolean audio) { + if (audio != hasAudio) { + hasAudio = audio; + checkEntitiesIsVideo(); + } + } + @SuppressLint("NotifyDataSetChanged") - public PaintView(Context context, boolean fileFromGallery, File file, boolean isVideo, StoryRecorder.WindowView parent, Activity activity, int currentAccount, Bitmap bitmap, Bitmap blurBitmap, Bitmap originalBitmap, int originalRotation, ArrayList<VideoEditedInfo.MediaEntity> entities, StoryEntry entry, int viewWidth, int viewHeight, MediaController.CropState cropState, Runnable onInit, BlurringShader.BlurManager blurManager, Theme.ResourcesProvider resourcesProvider, PreviewView.TextureViewHolder videoTextureHolder, PreviewView previewView) { + public PaintView(Context context, boolean fileFromGallery, File file, boolean isVideo, boolean isBot, StoryRecorder.WindowView parent, Activity activity, int currentAccount, Bitmap bitmap, Bitmap blurBitmap, Bitmap originalBitmap, int originalRotation, ArrayList<VideoEditedInfo.MediaEntity> entities, StoryEntry entry, int viewWidth, int viewHeight, MediaController.CropState cropState, Runnable onInit, BlurringShader.BlurManager blurManager, Theme.ResourcesProvider resourcesProvider, PreviewView.TextureViewHolder videoTextureHolder, PreviewView previewView) { super(context, activity, true); setDelegate(this); this.blurManager = blurManager; @@ -295,6 +306,7 @@ public PaintView(Context context, boolean fileFromGallery, File file, boolean is this.fileFromGallery = fileFromGallery; this.file = file; this.isVideo = isVideo; + this.isBot = isBot; this.parent = parent; this.w = viewWidth; this.h = viewHeight; @@ -586,6 +598,14 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } setupEntities(); } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if (isCoverPreview) { + return false; + } + return super.dispatchTouchEvent(ev); + } }; // addView(entitiesView); @@ -603,6 +623,11 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { public boolean onTouchEvent(MotionEvent event) { return false; } + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if (isCoverPreview) return false; + return super.dispatchTouchEvent(ev); + } }; // addView(selectionContainerView); @@ -1082,6 +1107,11 @@ public void onColorSelected(int color) { if (!keyboardVisible) { showTypefaceMenu(false); } + + if (wasKeyboardVisible != keyboardVisible) { + checkEntitiesIsVideo(); + } + wasKeyboardVisible = keyboardVisible; }) { @Override public void ignore(boolean ignore) { @@ -1095,6 +1125,8 @@ public void ignore(boolean ignore) { EmojiBottomSheet.savedPosition = 1; } + private boolean wasKeyboardVisible; + private ObjectAnimator previewViewTranslationAnimator; private void updatePreviewViewTranslationY() { if (previewViewTranslationAnimator != null) { @@ -1133,7 +1165,7 @@ public View getBottomLayout() { private void setNewColor(int color) { int wasColor = colorSwatch.color; colorSwatch.color = color; - setCurrentSwatch(colorSwatch, true); + setCurrentSwatch(colorSwatch, true, null, true); ValueAnimator animator = ValueAnimator.ofFloat(0, 1).setDuration(150); animator.addUpdateListener(animation -> { @@ -1154,7 +1186,7 @@ private LocationView createLocationSticker(TLRPC.MessageMedia location, TL_stori Point position = startPositionRelativeToEntity(null); float w = entitiesView.getMeasuredWidth() <= 0 ? this.w : entitiesView.getMeasuredWidth(); int maxWidth = (int) w - dp(14 + 26 + 18); - LocationView view = new LocationView(getContext(), position, currentAccount, location, mediaArea, w / 240f, maxWidth, 3, colorSwatch == null ? 0xFFFFFFFF : colorSwatch.color); + LocationView view = new LocationView(getContext(), position, currentAccount, location, mediaArea, w / 240f, maxWidth); if (position.x == entitiesView.getMeasuredWidth() / 2f) { view.setStickyX(EntityView.STICKY_CENTER); } @@ -1164,6 +1196,39 @@ private LocationView createLocationSticker(TLRPC.MessageMedia location, TL_stori view.setDelegate(this); view.setMaxWidth(maxWidth); entitiesView.addView(view, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT)); + checkEntitiesIsVideo(); + if (currentCropState != null) { + view.scale(1.0f / currentCropState.cropScale); + view.rotate(-(currentCropState.transformRotation + currentCropState.cropRotate)); + } + + if (select) { + registerRemovalUndo(view); + selectEntity(view, false); + } + return view; + } + + private WeatherView createWeatherView(Weather.State weather, boolean select) { + onTextAdd(); + + forceChanges = true; + + Size paintingSize = getPaintingSize(); + Point position = startPositionRelativeToEntity(null); + float w = entitiesView.getMeasuredWidth() <= 0 ? this.w : entitiesView.getMeasuredWidth(); + int maxWidth = (int) w - dp(14 + 26 + 18); + WeatherView view = new WeatherView(getContext(), position, currentAccount, weather, w / 240f, maxWidth); + if (position.x == entitiesView.getMeasuredWidth() / 2f) { + view.setStickyX(EntityView.STICKY_CENTER); + } + if (position.y == entitiesView.getMeasuredHeight() / 2f) { + view.setStickyY(EntityView.STICKY_CENTER); + } + view.setDelegate(this); + view.setMaxWidth(maxWidth); + entitiesView.addView(view, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT)); + checkEntitiesIsVideo(); if (currentCropState != null) { view.scale(1.0f / currentCropState.cropScale); view.rotate(-(currentCropState.transformRotation + currentCropState.cropRotate)); @@ -1185,7 +1250,7 @@ private LinkView createLinkSticker(LinkPreview.WebPagePreview link, TL_stories.M Point position = startPositionRelativeToEntity(null); float w = entitiesView.getMeasuredWidth() <= 0 ? this.w : entitiesView.getMeasuredWidth(); int maxWidth = (int) w - dp(14 + 26 + 18); - LinkView view = new LinkView(getContext(), position, currentAccount, link, mediaArea, w / 360f, maxWidth, 3, colorSwatch == null ? 0xFFFFFFFF : colorSwatch.color); + LinkView view = new LinkView(getContext(), position, currentAccount, link, mediaArea, w / 360f, maxWidth, 3); if (position.x == entitiesView.getMeasuredWidth() / 2f) { view.setStickyX(EntityView.STICKY_CENTER); } @@ -1195,6 +1260,7 @@ private LinkView createLinkSticker(LinkPreview.WebPagePreview link, TL_stories.M view.setDelegate(this); view.setMaxWidth(maxWidth); entitiesView.addView(view, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT)); + checkEntitiesIsVideo(); if (currentCropState != null) { view.scale(1.0f / currentCropState.cropScale); view.rotate(-(currentCropState.transformRotation + currentCropState.cropRotate)); @@ -1229,6 +1295,7 @@ private TextPaintView createText(boolean select) { view.setTypeface(PersistColorPalette.getInstance(currentAccount).getCurrentTypeface()); view.setType(PersistColorPalette.getInstance(currentAccount).getCurrentTextType()); entitiesView.addView(view, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT)); + checkEntitiesIsVideo(); if (currentCropState != null) { view.scale(1.0f / currentCropState.cropScale); view.rotate(-(currentCropState.transformRotation + currentCropState.cropRotate)); @@ -1348,9 +1415,14 @@ private boolean selectEntity(EntityView entityView, boolean changeOptions) { if (currentEntityView == entityView) { if (!entityView.hadMultitouch()) { if (entityView instanceof LocationView) { - ((LocationView) entityView).setType((((LocationView) entityView).getType() + 1) % 4); + LocationView view = (LocationView) entityView; + view.setType((view.getType() + 1) % view.getTypesCount()); + } else if (entityView instanceof WeatherView) { + WeatherView view = (WeatherView) entityView; + view.setType((view.getType() + 1) % view.getTypesCount()); } else if (entityView instanceof LinkView) { - ((LinkView) entityView).setType((((LinkView) entityView).getType() + 1) % 4); + LinkView view = (LinkView) entityView; + view.setType(view.getNextType()); } else if (!editingText) { if (entityView instanceof TextPaintView) { enteredThroughText = true; @@ -1807,6 +1879,19 @@ public void onDismissAnimationStart() { @Override public boolean canShowWidget(Integer widgetId) { + if (isBot) { + return widgetId == WIDGET_PHOTO; + } + if (widgetId == WIDGET_WEATHER) { + boolean hasWeather = false; + for (int i = 0; i < entitiesView.getChildCount(); ++i) { + if (entitiesView.getChildAt(i) instanceof WeatherView) { + hasWeather = true; + break; + } + } + return !hasWeather; + } return true; } @@ -1864,6 +1949,15 @@ protected boolean checkAudioPermission(Runnable granted) { closing[0] = false; showLocationAlert(null, (location, area) -> appearAnimation(createLocationSticker(location, area, false))); return true; + } else if (widgetId == EmojiBottomSheet.WIDGET_WEATHER) { + closing[0] = false; + Weather.fetch(true, weather -> { + if (weather != null) { + alert.dismiss(); + appearAnimation(createWeatherView(weather, false)); + } + }); + return false; } else if (widgetId == EmojiBottomSheet.WIDGET_PHOTO) { alert.dismiss(); onGalleryClick(); @@ -2302,11 +2396,36 @@ private void setupEntities() { } } else if (entity.type == VideoEditedInfo.MediaEntity.TYPE_LOCATION) { LocationView locationView = createLocationSticker(entity.media, entity.mediaArea, false); - locationView.setType(entity.subType, entity.color); + if (entity.color != 0) { + locationView.setColor(entity.color); + } + locationView.setType(entity.subType); view = locationView; + } else if (entity.type == VideoEditedInfo.MediaEntity.TYPE_WEATHER) { + if (entity.weather == null) continue; + WeatherView weatherView = createWeatherView(entity.weather, false); + if (entity.color != 0) { + weatherView.setColor(entity.color); + } + weatherView.setType(entity.subType); + view = weatherView; } else if (entity.type == VideoEditedInfo.MediaEntity.TYPE_LINK) { LinkView linkView = createLinkSticker(entity.linkSettings, entity.mediaArea, false); - linkView.setType(entity.subType, entity.color); + if (entity.color != 0) { + linkView.setColor(entity.color); + } + if (entity.subType == -1) { + linkView.setType(3); + linkView.marker.setupLayout(); + entity.viewWidth = linkView.marker.padx + (int) Math.ceil(linkView.marker.w) + linkView.marker.padx; + entity.viewHeight = linkView.marker.pady + (int) Math.ceil(linkView.marker.h) + linkView.marker.pady; + Point p = linkView.getPosition(); + p.y += .3f * h; + linkView.setPosition(p); + continue; + } else { + linkView.setType(entity.subType); + } view = linkView; } else if (entity.type == VideoEditedInfo.MediaEntity.TYPE_REACTION) { ReactionWidgetEntityView entityView = createReactionWidget(false); @@ -2494,6 +2613,7 @@ public Bitmap getBitmap(ArrayList<VideoEditedInfo.MediaEntity> entities, int res } EntityView entity = (EntityView) v; Point position = entity.getPosition(); + boolean drawThisEntity = true; VideoEditedInfo.MediaEntity mediaEntity = new VideoEditedInfo.MediaEntity(); if (entities != null) { if (entity instanceof TextPaintView) { @@ -2608,12 +2728,40 @@ public Bitmap getBitmap(ArrayList<VideoEditedInfo.MediaEntity> entities, int res mediaEntity.width = locationView.marker.getWidth(); mediaEntity.height = locationView.marker.getHeight(); mediaEntity.text = locationView.marker.getText(); - mediaEntity.color = locationView.getColor(); + mediaEntity.color = locationView.hasColor() ? locationView.getColor() : 0; mediaEntity.density = locationView.marker.density; mediaEntity.media = locationView.location; mediaEntity.mediaArea = locationView.mediaArea; mediaEntity.mediaArea.coordinates = new TL_stories.TL_mediaAreaCoordinates(); - TLRPC.Document emojiDocument = locationView.marker.getCountryCodeEmojiDocument(); + TLRPC.Document emojiDocument = locationView.marker.getCodeEmojiDocument(); + if (emojiDocument != null) { + VideoEditedInfo.EmojiEntity tlentity = new VideoEditedInfo.EmojiEntity(); + tlentity.document_id = emojiDocument.id; + tlentity.document = emojiDocument; + tlentity.documentAbsolutePath = FileLoader.getInstance(currentAccount).getPathToAttach(emojiDocument, true).getAbsolutePath(); + boolean isAnimatedSticker = MessageObject.isAnimatedStickerDocument(tlentity.document, true); + if (isAnimatedSticker || isVideoStickerDocument(tlentity.document)) { + tlentity.subType |= isAnimatedSticker ? 1 : 4; + } + mediaEntity.entities.add(tlentity); + } + } else if (entity instanceof WeatherView) { + WeatherView weatherView = (WeatherView) entity; + mediaEntity.type = VideoEditedInfo.MediaEntity.TYPE_WEATHER; + mediaEntity.subType = (byte) weatherView.getType(); + mediaEntity.width = weatherView.marker.getWidth(); + mediaEntity.height = weatherView.marker.getHeight(); + mediaEntity.text = weatherView.marker.getText(); + mediaEntity.color = weatherView.hasColor() ? weatherView.getColor() : 0; + mediaEntity.density = weatherView.marker.density; + mediaEntity.weather = weatherView.weather; + TL_stories.TL_mediaAreaWeather area = new TL_stories.TL_mediaAreaWeather(); + area.emoji = weatherView.weather.emoji; + area.temperature_c = (int) Math.round(weatherView.weather.temperature); + area.color = weatherView.marker.outlinePaint.getColor(); + mediaEntity.mediaArea = area; + mediaEntity.mediaArea.coordinates = new TL_stories.TL_mediaAreaCoordinates(); + TLRPC.Document emojiDocument = weatherView.marker.getCodeEmojiDocument(); if (emojiDocument != null) { VideoEditedInfo.EmojiEntity tlentity = new VideoEditedInfo.EmojiEntity(); tlentity.document_id = emojiDocument.id; @@ -2625,13 +2773,14 @@ public Bitmap getBitmap(ArrayList<VideoEditedInfo.MediaEntity> entities, int res } mediaEntity.entities.add(tlentity); } + drawThisEntity = false; } else if (entity instanceof LinkView) { LinkView linkView = (LinkView) entity; mediaEntity.type = VideoEditedInfo.MediaEntity.TYPE_LINK; mediaEntity.subType = (byte) linkView.getType(); mediaEntity.width = linkView.marker.getWidth(); mediaEntity.height = linkView.marker.getHeight(); - mediaEntity.color = linkView.getColor(); + mediaEntity.color = linkView.hasColor() ? linkView.getColor() : 0; mediaEntity.density = linkView.marker.density; mediaEntity.linkSettings = linkView.link; if (linkView.marker.hasPhoto) { @@ -2758,12 +2907,15 @@ public Bitmap getBitmap(ArrayList<VideoEditedInfo.MediaEntity> entities, int res mediaEntity.viewWidth = (int) (mediaEntity.viewHeight * a); mediaEntity.x = cx - mediaEntity.width / 2f; } - } else if (entity instanceof LocationView || entity instanceof LinkView || entity instanceof ReactionWidgetEntityView) { + } else if (mediaEntity.mediaArea != null && (entity instanceof LocationView || entity instanceof WeatherView || entity instanceof LinkView || entity instanceof ReactionWidgetEntityView)) { mediaEntity.mediaArea.coordinates.x = (mediaEntity.x + mediaEntity.width / 2f) * 100; mediaEntity.mediaArea.coordinates.y = (mediaEntity.y + mediaEntity.height / 2f) * 100; if (entity instanceof LocationView) { mediaEntity.mediaArea.coordinates.w = (mediaEntity.width - 2 * ((LocationView) entity).marker.padx * scaleX / (float) entitiesView.getMeasuredWidth()) * 100; mediaEntity.mediaArea.coordinates.h = (mediaEntity.height - 2 * ((LocationView) entity).marker.pady * scaleY / (float) entitiesView.getMeasuredHeight()) * 100; + } else if (entity instanceof WeatherView) { + mediaEntity.mediaArea.coordinates.w = (mediaEntity.width - 2 * ((WeatherView) entity).marker.padx * scaleX / (float) entitiesView.getMeasuredWidth()) * 100; + mediaEntity.mediaArea.coordinates.h = (mediaEntity.height - 2 * ((WeatherView) entity).marker.pady * scaleY / (float) entitiesView.getMeasuredHeight()) * 100; } else if (entity instanceof LinkView) { mediaEntity.mediaArea.coordinates.w = (mediaEntity.width - 2 * ((LinkView) entity).marker.padx * scaleX / (float) entitiesView.getMeasuredWidth()) * 100; mediaEntity.mediaArea.coordinates.h = (mediaEntity.height - 2 * ((LinkView) entity).marker.pady * scaleY / (float) entitiesView.getMeasuredHeight()) * 100; @@ -2776,6 +2928,8 @@ public Bitmap getBitmap(ArrayList<VideoEditedInfo.MediaEntity> entities, int res mediaEntity.mediaArea.coordinates.rotation = -mediaEntity.rotation / Math.PI * 180; if (entity instanceof LocationView) { radius = ((LocationView) entity).marker.getRadius(); + } else if (entity instanceof WeatherView) { + radius = ((WeatherView) entity).marker.getRadius(); } else if (entity instanceof LinkView) { radius = ((LinkView) entity).marker.getRadius(); } @@ -2785,7 +2939,7 @@ public Bitmap getBitmap(ArrayList<VideoEditedInfo.MediaEntity> entities, int res mediaEntity.mediaArea.coordinates.radius = (scaleX * radius / (float) entitiesView.getMeasuredWidth()) * 100; } } - if ((drawEntities || drawMessage && mediaEntity.type == VideoEditedInfo.MediaEntity.TYPE_MESSAGE) && bitmap != null) { + if (drawThisEntity && (drawEntities || drawMessage && mediaEntity.type == VideoEditedInfo.MediaEntity.TYPE_MESSAGE) && bitmap != null) { canvas = new Canvas(bitmap); final float s = bitmap.getWidth() / (float) entitiesView.getMeasuredWidth(); for (int k = 0; k < 2; k++) { @@ -2922,8 +3076,76 @@ public void maybeDismiss(Activity parentActivity, Runnable okRunnable) { } } + public boolean isCoverPreview = false; + public void setCoverPreview(boolean isCoverPreview) { + if (this.isCoverPreview != isCoverPreview) { + this.isCoverPreview = isCoverPreview; + if (isCoverPreview) { + selectEntity(null); + } + setCoverPause(isCoverPreview); + } + } + + private void setCoverPause(boolean pause) { + for (int i = 0; i < entitiesView.getChildCount(); ++i) { + View child = entitiesView.getChildAt(i); + if (child instanceof StickerView) { + ImageReceiver imageReceiver = ((StickerView) child).centerImage; + + RLottieDrawable rLottieDrawable = imageReceiver.getLottieAnimation(); + AnimatedFileDrawable animatedFileDrawable = imageReceiver.getAnimation(); + imageReceiver.setAllowStartLottieAnimation(!pause); + imageReceiver.setAllowStartAnimation(!pause); + if (rLottieDrawable != null) { + if (pause) { + rLottieDrawable.stop(); + } else { + rLottieDrawable.start(); + } + } else if (animatedFileDrawable != null) { + animatedFileDrawable.setAllowDecodeSingleFrame(pause); + if (pause) { + animatedFileDrawable.stop(); + } else { + animatedFileDrawable.start(); + } + } + } + } + } + + public void setCoverTime(long time) { + for (int i = 0; i < entitiesView.getChildCount(); ++i) { + View child = entitiesView.getChildAt(i); + if (child instanceof StickerView) { + ImageReceiver imageReceiver = ((StickerView) child).centerImage; + + RLottieDrawable rLottieDrawable = imageReceiver.getLottieAnimation(); + AnimatedFileDrawable animatedFileDrawable = imageReceiver.getAnimation(); + if (rLottieDrawable != null) { + rLottieDrawable.setCurrentFrame(Math.round(((float) time % rLottieDrawable.getDuration()) / rLottieDrawable.getDuration() * rLottieDrawable.getFramesCount()), true, false); + } else if (animatedFileDrawable != null) { +// animatedFileDrawable.seekToSync(time); + } + } + } + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if (isCoverPreview) { + return false; + } + return super.dispatchTouchEvent(ev); + } + @Override public boolean onTouch(MotionEvent ev) { + if (isCoverPreview) { + return false; + } + if (currentEntityView != null) { selectEntity(null); } @@ -2940,6 +3162,7 @@ public boolean onTouch(MotionEvent ev) { event.setLocation(x, y); renderView.onTouch(event); event.recycle(); + return true; } @@ -3146,7 +3369,7 @@ public void onBrushSelected(Brush brush) { int wasColor = colorSwatch.color; colorSwatch.color = PersistColorPalette.getInstance(currentAccount).getCurrentColor(); colorSwatch.brushWeight = weightDefaultValueOverride.get(); - setCurrentSwatch(colorSwatch, true, wasColor); + setCurrentSwatch(colorSwatch, true, wasColor, false); renderInputView.invalidate(); } @@ -3267,10 +3490,10 @@ private void showColorList(boolean show) { } private void setCurrentSwatch(Swatch swatch, boolean updateInterface) { - setCurrentSwatch(swatch, updateInterface, null); + setCurrentSwatch(swatch, updateInterface, null, false); } - private void setCurrentSwatch(Swatch swatch, boolean updateInterface, Integer prevColor) { + private void setCurrentSwatch(Swatch swatch, boolean updateInterface, Integer prevColor, boolean updatedColor) { if (colorSwatch != swatch) { colorSwatch.color = swatch.color; colorSwatch.colorLocation = swatch.colorLocation; @@ -3302,10 +3525,15 @@ private void setCurrentSwatch(Swatch swatch, boolean updateInterface, Integer pr if (currentEntityView instanceof TextPaintView) { ((TextPaintView) currentEntityView).setSwatch(new Swatch(swatch.color, swatch.colorLocation, swatch.brushWeight)); - } else if (currentEntityView instanceof LocationView) { + } else if (updatedColor && currentEntityView instanceof LocationView) { ((LocationView) currentEntityView).setColor(swatch.color); - } else if (currentEntityView instanceof LinkView) { + ((LocationView) currentEntityView).setType(3); + } else if (updatedColor && currentEntityView instanceof WeatherView) { + ((WeatherView) currentEntityView).setColor(swatch.color); + ((WeatherView) currentEntityView).setType(3); + } else if (updatedColor && currentEntityView instanceof LinkView) { ((LinkView) currentEntityView).setColor(swatch.color); + ((LinkView) currentEntityView).setType(0); } } @@ -3800,7 +4028,7 @@ private void showMenuForEntity(final EntityView entityView) { } }); parent.addView(bringToFrontView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, 44)); - } else if (!(entityView instanceof PhotoView) && !(entityView instanceof MessageEntityView) && !(entityView instanceof RoundView) && !(entityView instanceof LocationView) && !(entityView instanceof LinkView) && !(entityView instanceof ReactionWidgetEntityView)) { + } else if (!(entityView instanceof PhotoView) && !(entityView instanceof MessageEntityView) && !(entityView instanceof RoundView) && !(entityView instanceof LocationView) && !(entityView instanceof WeatherView) && !(entityView instanceof LinkView) && !(entityView instanceof ReactionWidgetEntityView)) { TextView duplicateView = new TextView(getContext()); duplicateView.setTextColor(getThemedColor(Theme.key_actionBarDefaultSubmenuItem)); duplicateView.setLines(1); @@ -3868,12 +4096,14 @@ private void duplicateEntity(EntityView thisEntityView) { StickerView newStickerView = new StickerView(getContext(), (StickerView) thisEntityView, position); newStickerView.setDelegate(this); entitiesView.addView(newStickerView); + checkEntitiesIsVideo(); entityView = newStickerView; } else if (thisEntityView instanceof TextPaintView) { TextPaintView newTextPaintView = new TextPaintView(getContext(), (TextPaintView) thisEntityView, position); newTextPaintView.setDelegate(this); newTextPaintView.setMaxWidth(w - dp(7 + 7 + 18)); entitiesView.addView(newTextPaintView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT)); + checkEntitiesIsVideo(); entityView = newTextPaintView; } else { return; @@ -4225,6 +4455,7 @@ public PhotoView createPhoto(String path, boolean select) { // view.setHasStickyY(true); view.setDelegate(this); entitiesView.addView(view); + checkEntitiesIsVideo(); if (select) { registerRemovalUndo(view); selectEntity(view); @@ -4285,6 +4516,7 @@ public RoundView createRound(String thumbPath, boolean select) { RoundView view = new RoundView(getContext(), new Point(x, y), 0, 1f, size, thumbPath); view.setDelegate(this); entitiesView.addView(view); + checkEntitiesIsVideo(); if (select) { registerRemovalUndo(view); post(() -> selectEntity(view)); @@ -4303,6 +4535,7 @@ public boolean drawForBitmap() { }; view.setDelegate(this); entitiesView.addView(view); + checkEntitiesIsVideo(); if (select) { registerRemovalUndo(view); selectEntity(view); @@ -4329,6 +4562,7 @@ public PhotoView createPhoto(TLObject obj, boolean select) { // view.setHasStickyY(true); view.setDelegate(this); entitiesView.addView(view); + checkEntitiesIsVideo(); if (select) { registerRemovalUndo(view); selectEntity(view); @@ -4356,6 +4590,7 @@ protected void didSetAnimatedSticker(RLottieDrawable drawable) { // } view.setDelegate(this); entitiesView.addView(view); + checkEntitiesIsVideo(); if (select) { registerRemovalUndo(view); selectEntity(view); @@ -4389,6 +4624,7 @@ private ReactionWidgetEntityView createReactionWidget(boolean select) { ReactionWidgetEntityView view = new ReactionWidgetEntityView(getContext(), position, size); view.setDelegate(this); entitiesView.addView(view); + checkEntitiesIsVideo(); if (select) { registerRemovalUndo(view); selectEntity(view); @@ -4415,6 +4651,7 @@ private void removeEntity(EntityView entityView) { } } entitiesView.removeView(entityView); + checkEntitiesIsVideo(); if (entityView != null) { undoStore.unregisterUndo(entityView.getUUID()); } @@ -4432,6 +4669,54 @@ private void removeEntity(EntityView entityView) { } } + private void checkEntitiesIsVideo() { + final boolean isVideo = wouldBeVideo(); + for (int i = 0; i < entitiesView.getChildCount(); ++i) { + View child = entitiesView.getChildAt(i); + if (child instanceof EntityView) { + ((EntityView) child).setIsVideo(isVideo); + } + } + } + + public boolean wouldBeVideo() { + if (isVideo || hasAudio) { + return true; + } + for (int i = 0; i < entitiesView.getChildCount(); ++i) { + View child = entitiesView.getChildAt(i); + if (child instanceof TextPaintView) { + TextPaintView view = (TextPaintView) child; + CharSequence text = view.getText(); + if (text instanceof Spanned) { + Spanned spanned = (Spanned) text; + AnimatedEmojiSpan[] spans = spanned.getSpans(0, text.length(), AnimatedEmojiSpan.class); + for (int j = 0; j < spans.length; ++j) { + AnimatedEmojiSpan span = spans[j]; + TLRPC.Document document = span.document; + if (document == null) { + document = AnimatedEmojiDrawable.findDocument(currentAccount, span.getDocumentId()); + } + if (document != null) { + AnimatedEmojiDrawable.getDocumentFetcher(currentAccount).putDocument(document); + } + if (StoryEntry.isAnimated(document, FileLoader.getInstance(currentAccount).getPathToAttach(document, true).getAbsolutePath())) { + return true; + } + } + } + } else if (child instanceof StickerView) { + TLRPC.Document document = ((StickerView) child).getSticker(); + if (StoryEntry.isAnimated(document, FileLoader.getInstance(currentAccount).getPathToAttach(document, true).getAbsolutePath())) { + return true; + } + } else if (child instanceof RoundView) { + return true; + } + } + return false; + } + private void registerRemovalUndo(final EntityView entityView) { if (entityView == null) { return; @@ -4990,4 +5275,12 @@ public RoundView findRoundView() { return null; } + public static int argb2Rgba(int argb) { + int alpha = (argb >>> 24) & 0xFF; + int red = (argb >>> 16) & 0xFF; + int green = (argb >>> 8) & 0xFF; + int blue = argb & 0xFF; + + return (red << 24) | (green << 16) | (blue << 8) | alpha; + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PreviewButtons.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PreviewButtons.java index 8fb1a37f1ad..81395d49fbf 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PreviewButtons.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PreviewButtons.java @@ -53,6 +53,7 @@ public class PreviewButtons extends FrameLayout { public ShareButtonView shareButton; private String shareText; + private boolean shareArrow = true; public PreviewButtons(Context context) { super(context); @@ -66,7 +67,7 @@ public PreviewButtons(Context context) { addButton(BUTTON_TEXT, R.drawable.msg_photo_text2, LocaleController.getString(R.string.AccDescrPlaceText)); addButton(BUTTON_ADJUST, R.drawable.msg_photo_settings, LocaleController.getString(R.string.AccDescrPhotoAdjust)); - shareButton = new ShareButtonView(context, shareText = LocaleController.getString("Send", R.string.Send)); + shareButton = new ShareButtonView(context, shareText = LocaleController.getString(R.string.Send), shareArrow = true); shareButton.setContentDescription(LocaleController.getString(R.string.Send)); addView(shareButton, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT)); @@ -92,12 +93,12 @@ private boolean isFiltersVisible() { return false; } - public void setShareText(String text) { - if (TextUtils.equals(text, shareText)) { + public void setShareText(String text, boolean arrow) { + if (TextUtils.equals(text, shareText) && arrow == shareArrow) { return; } removeView(shareButton); - shareButton = new ShareButtonView(getContext(), text); + shareButton = new ShareButtonView(getContext(), shareText = text, shareArrow = arrow); shareButton.setContentDescription(text); addView(shareButton, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT)); updateAppearT(); @@ -217,13 +218,15 @@ private class ShareButtonView extends View { private final StaticLayout staticLayout; private float left, width; - private final int w, h; + private int w, h; + private boolean arrow; private AnimatedFloat enabledT = new AnimatedFloat(this, 0, 220, CubicBezierInterpolator.EASE_OUT_QUINT); public boolean enabled = true; - public ShareButtonView(Context context, String text) { + public ShareButtonView(Context context, String text, boolean withArrow) { super(context); + this.arrow = withArrow; // buttonPaint.setColor(0xffffffff); buttonPaint.setColor(0xff199cff); @@ -234,17 +237,21 @@ public ShareButtonView(Context context, String text) { textPaint.setTypeface(AndroidUtilities.bold()); // textPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); - SpannableString arrow = new SpannableString(">"); - Drawable arrowDrawable = getResources().getDrawable(R.drawable.attach_arrow_right).mutate(); - arrowDrawable.setColorFilter(new PorterDuffColorFilter(0xffffffff, PorterDuff.Mode.SRC_IN)); - arrowDrawable.setBounds(0, 0, dp(12), dp(12)); - arrow.setSpan(new ImageSpan(arrowDrawable, ImageSpan.ALIGN_CENTER), 0, arrow.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - CharSequence text2; - if (LocaleController.isRTL) { - text2 = new SpannableStringBuilder(arrow).append(" ").append(text.toUpperCase()); + if (withArrow) { + SpannableString arrow = new SpannableString(">"); + Drawable arrowDrawable = getResources().getDrawable(R.drawable.attach_arrow_right).mutate(); + arrowDrawable.setColorFilter(new PorterDuffColorFilter(0xffffffff, PorterDuff.Mode.SRC_IN)); + arrowDrawable.setBounds(0, 0, dp(12), dp(12)); + arrow.setSpan(new ImageSpan(arrowDrawable, ImageSpan.ALIGN_CENTER), 0, arrow.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + + if (LocaleController.isRTL) { + text2 = new SpannableStringBuilder(arrow).append(" ").append(text.toUpperCase()); + } else { + text2 = new SpannableStringBuilder(text.toUpperCase()).append(" ").append(arrow); + } } else { - text2 = new SpannableStringBuilder(text.toUpperCase()).append(" ").append(arrow); + text2 = text.toUpperCase(); } staticLayout = new StaticLayout(text2, textPaint, AndroidUtilities.dp(180), Layout.Alignment.ALIGN_NORMAL, 1, 0, false); @@ -252,6 +259,9 @@ public ShareButtonView(Context context, String text) { width = staticLayout.getLineCount() > 0 ? staticLayout.getLineWidth(0) : 0; w = (int) width + AndroidUtilities.dp(16 + 16 + 16); + if (!withArrow) { + w = Math.max(dp(80), w); + } h = AndroidUtilities.dp(32 + 8); setOnClickListener(e -> { @@ -291,7 +301,7 @@ protected void onDraw(Canvas canvas) { canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(20), dp(20), buttonPaint); canvas.save(); - canvas.translate(dp(10 + 16) - left, (getHeight() - staticLayout.getHeight()) / 2f); + canvas.translate((w - width) / 2f + dp(arrow ? 3 : 0) - left, (getHeight() - staticLayout.getHeight()) / 2f); staticLayout.draw(canvas); canvas.restore(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PreviewView.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PreviewView.java index 8ec3aa8afc9..b6bdc1b3537 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PreviewView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/PreviewView.java @@ -1,8 +1,8 @@ package org.telegram.ui.Stories.recorder; import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.AndroidUtilities.getBitmapFromSurface; -import android.animation.ValueAnimator; import android.app.Activity; import android.content.ContentUris; import android.content.Context; @@ -16,6 +16,7 @@ import android.graphics.Paint; import android.graphics.Path; import android.graphics.PointF; +import android.graphics.RectF; import android.graphics.Shader; import android.graphics.SurfaceTexture; import android.graphics.drawable.BitmapDrawable; @@ -25,12 +26,10 @@ import android.os.Build; import android.provider.MediaStore; import android.text.TextUtils; -import android.util.Log; import android.util.Pair; import android.util.Size; import android.util.SparseIntArray; import android.view.Gravity; -import android.view.HapticFeedbackConstants; import android.view.MotionEvent; import android.view.TextureView; import android.view.View; @@ -49,7 +48,6 @@ import org.telegram.messenger.ChatThemeController; import org.telegram.messenger.MessageObject; import org.telegram.messenger.MessagesController; -import org.telegram.messenger.SharedConfig; import org.telegram.messenger.Utilities; import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.EmojiThemes; @@ -57,21 +55,16 @@ import org.telegram.ui.ChatBackgroundDrawable; import org.telegram.ui.Components.AnimatedFloat; import org.telegram.ui.Components.BlurringShader; -import org.telegram.ui.Components.ButtonBounce; import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.MotionBackgroundDrawable; -import org.telegram.ui.Components.Paint.Texture; import org.telegram.ui.Components.Paint.Views.RoundView; import org.telegram.ui.Components.PhotoFilterView; import org.telegram.ui.Components.VideoEditTextureView; import org.telegram.ui.Components.VideoPlayer; import java.io.File; -import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; public class PreviewView extends FrameLayout { @@ -248,6 +241,7 @@ public boolean onSurfaceDestroyed(SurfaceTexture surfaceTexture) { } updateAudioPlayer(true); } + onAudioChanged(); } public void setupAudio(MessageObject messageObject, boolean animated) { @@ -291,16 +285,99 @@ public void setupAudio(MessageObject messageObject, boolean animated) { setupAudio(entry, animated); } + public void onAudioChanged() {} + + private long finalSeekPosition; + private boolean slowerSeekScheduled; + private Runnable slowerSeek = () -> { + seekTo(finalSeekPosition); + slowerSeekScheduled = false; + }; private void seekTo(long position) { + seekTo(position, false); + } + + public void seekTo(long position, boolean fast) { if (videoPlayer != null) { - videoPlayer.seekTo(position, false); + videoPlayer.seekTo(position, fast); } else if (roundPlayer != null) { - roundPlayer.seekTo(position, false); + roundPlayer.seekTo(position, fast); } else if (audioPlayer != null) { - audioPlayer.seekTo(position, false); + audioPlayer.seekTo(position, fast); } updateAudioPlayer(true); updateRoundPlayer(true); + if (fast) { + if (!slowerSeekScheduled || Math.abs(finalSeekPosition - position) > 450) { + slowerSeekScheduled = true; + AndroidUtilities.cancelRunOnUIThread(this.slowerSeek); + AndroidUtilities.runOnUIThread(this.slowerSeek, 60); + } + finalSeekPosition = position; + } + } + + public long getCurrentPosition() { + if (videoPlayer != null) { + return videoPlayer.getCurrentPosition(); + } else if (roundPlayer != null) { + return roundPlayer.getCurrentPosition(); + } else if (audioPlayer != null) { + return audioPlayer.getCurrentPosition(); + } + return 0; + } + + public void getCoverBitmap(Utilities.Callback<Bitmap> whenBitmapDone, View ...views) { + int w = (int) (dp(26) * AndroidUtilities.density); + int h = (int) (dp(30.33f) * AndroidUtilities.density); + int r = (int) (dp(4) * AndroidUtilities.density); + + Bitmap[] bitmaps = new Bitmap[ views.length ]; + for (int i = 0; i < views.length; ++i) { + if (views[i] == null || views[i].getWidth() < 0 || views[i].getHeight() <= 0) continue; + if (views[i] == this && textureView != null) { + bitmaps[i] = textureView.getBitmap(); + } else if (views[i] instanceof TextureView) { + bitmaps[i] = ((TextureView) views[i]).getBitmap(); + } else if (views[i] instanceof ViewGroup && ((ViewGroup) views[i]).getChildCount() > 0) { + bitmaps[i] = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmaps[i]); + canvas.save(); + final float s = Math.max((float) w / views[i].getWidth(), (float) h / views[i].getHeight()); + canvas.scale(s, s); + views[i].draw(canvas); + canvas.restore(); + } + } + + Utilities.globalQueue.postRunnable(() -> { + Bitmap cover = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(cover); + Path clipPath = new Path(); + RectF clipRect = new RectF(); + clipRect.set(0, 0, cover.getWidth(), cover.getHeight()); + clipPath.addRoundRect(clipRect, r, r, Path.Direction.CW); + canvas.clipPath(clipPath); + + for (int i = 0; i < bitmaps.length; ++i) { + if (bitmaps[i] == null) continue; + canvas.save(); + canvas.translate(cover.getWidth() / 2f, cover.getHeight() / 2f); + final float s = Math.max((float) cover.getWidth() / bitmaps[i].getWidth(), (float) cover.getHeight() / bitmaps[i].getHeight()); + canvas.scale(s, s); + canvas.translate(-bitmaps[i].getWidth() / 2f, -bitmaps[i].getHeight() / 2f); + canvas.drawBitmap(bitmaps[i], 0, 0, null); + canvas.restore(); + AndroidUtilities.recycleBitmap(bitmaps[i]); + } + + Utilities.stackBlurBitmap(cover, 1); + + AndroidUtilities.runOnUIThread(() -> { + whenBitmapDone.run(cover); + }); + }); } public void seek(long position) { @@ -527,7 +604,7 @@ private void setupImage(StoryEntry entry) { } else { return BitmapFactory.decodeFile(path, opts); } - }, rw, rh, false); + }, rw, rh, false, true); if (entry != null && blurManager != null && bitmap != null) { blurManager.resetBitmap(); blurManager.setFallbackBlur(entry.buildBitmap(0.2f, bitmap), 0); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryEntry.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryEntry.java index 18ee7b6cb5d..456fc313c7e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryEntry.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryEntry.java @@ -22,7 +22,6 @@ import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ApplicationLoader; -import org.telegram.messenger.BuildVars; import org.telegram.messenger.ChatObject; import org.telegram.messenger.DialogObject; import org.telegram.messenger.Emoji; @@ -38,7 +37,6 @@ import org.telegram.messenger.Utilities; import org.telegram.messenger.VideoEditedInfo; import org.telegram.messenger.video.MediaCodecVideoConvertor; -import org.telegram.tgnet.AbstractSerializedData; import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.RequestDelegate; import org.telegram.tgnet.TLObject; @@ -105,6 +103,13 @@ public class StoryEntry { public boolean muted; public float left, right = 1; + public boolean isEditingCover; + public TLRPC.Document editingCoverDocument; + public Utilities.Callback<Utilities.Callback<TLRPC.Document>> updateDocumentRef; + public long cover = -1; + public boolean coverSet; + public Bitmap coverBitmap; + // public int width, height; public long duration; @@ -140,6 +145,10 @@ public class StoryEntry { public int period = 86400; + public long botId; + public String botLang = ""; + public TLRPC.InputMedia editingBotPreview; + // share as message (postponed) public ArrayList<Long> shareUserIds; public boolean silent; @@ -202,7 +211,7 @@ public boolean wouldBeVideo(ArrayList<VideoEditedInfo.MediaEntity> mediaEntities return false; } - private boolean isAnimated(TLRPC.Document document, String path) { + public static boolean isAnimated(TLRPC.Document document, String path) { return document != null && ( "video/webm".equals(document.mime_type) || "video/mp4".equals(document.mime_type) || MessageObject.isAnimatedStickerDocument(document, true) && RLottieDrawable.getFramesCount(path, null) > 1 @@ -241,7 +250,7 @@ public Bitmap buildBitmap(float scale, Bitmap mainFileBitmap) { if (backgroundFile != null) { try { - Bitmap paintBitmap = getScaledBitmap(opts -> BitmapFactory.decodeFile(backgroundFile.getPath(), opts), w, h, false); + Bitmap paintBitmap = getScaledBitmap(opts -> BitmapFactory.decodeFile(backgroundFile.getPath(), opts), w, h, false, true); canvas.save(); float s = resultWidth / (float) paintBitmap.getWidth(); canvas.scale(s, s); @@ -280,7 +289,7 @@ public Bitmap buildBitmap(float scale, Bitmap mainFileBitmap) { File file = filterFile != null ? filterFile : this.file; if (file != null) { try { - Bitmap fileBitmap = getScaledBitmap(opts -> BitmapFactory.decodeFile(file.getPath(), opts), w, h, true); + Bitmap fileBitmap = getScaledBitmap(opts -> BitmapFactory.decodeFile(file.getPath(), opts), w, h, true, true); final float s = (float) width / fileBitmap.getWidth(); tempMatrix.preScale(s, s); tempMatrix.postScale(scale, scale); @@ -293,7 +302,7 @@ public Bitmap buildBitmap(float scale, Bitmap mainFileBitmap) { if (paintFile != null) { try { - Bitmap paintBitmap = getScaledBitmap(opts -> BitmapFactory.decodeFile(paintFile.getPath(), opts), w, h, false); + Bitmap paintBitmap = getScaledBitmap(opts -> BitmapFactory.decodeFile(paintFile.getPath(), opts), w, h, false, true); canvas.save(); float s = resultWidth / (float) paintBitmap.getWidth(); canvas.scale(s, s); @@ -308,7 +317,7 @@ public Bitmap buildBitmap(float scale, Bitmap mainFileBitmap) { if (messageFile != null) { try { - Bitmap paintBitmap = getScaledBitmap(opts -> BitmapFactory.decodeFile(messageFile.getPath(), opts), w, h, false); + Bitmap paintBitmap = getScaledBitmap(opts -> BitmapFactory.decodeFile(messageFile.getPath(), opts), w, h, false, true); canvas.save(); float s = resultWidth / (float) paintBitmap.getWidth(); canvas.scale(s, s); @@ -323,7 +332,7 @@ public Bitmap buildBitmap(float scale, Bitmap mainFileBitmap) { if (paintEntitiesFile != null) { try { - Bitmap paintBitmap = getScaledBitmap(opts -> BitmapFactory.decodeFile(paintEntitiesFile.getPath(), opts), w, h, false); + Bitmap paintBitmap = getScaledBitmap(opts -> BitmapFactory.decodeFile(paintEntitiesFile.getPath(), opts), w, h, false, true); canvas.save(); float s = resultWidth / (float) paintBitmap.getWidth(); canvas.scale(s, s); @@ -361,7 +370,7 @@ public static interface DecodeBitmap { public Bitmap decode(BitmapFactory.Options options); } - public static Bitmap getScaledBitmap(DecodeBitmap decode, int maxWidth, int maxHeight, boolean allowBlur) { + public static Bitmap getScaledBitmap(DecodeBitmap decode, int maxWidth, int maxHeight, boolean allowBlur, boolean scale) { BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inJustDecodeBounds = true; decode.decode(opts); @@ -377,15 +386,15 @@ public static Bitmap getScaledBitmap(DecodeBitmap decode, int maxWidth, int maxH return decode.decode(opts); } - if (enoughMemory && SharedConfig.getDevicePerformanceClass() >= SharedConfig.PERFORMANCE_CLASS_AVERAGE) { + if (scale && enoughMemory && SharedConfig.getDevicePerformanceClass() >= SharedConfig.PERFORMANCE_CLASS_AVERAGE) { Bitmap bitmap = decode.decode(opts); final float scaleX = maxWidth / (float) bitmap.getWidth(), scaleY = maxHeight / (float) bitmap.getHeight(); - float scale = Math.max(scaleX, scaleY); + float s = Math.max(scaleX, scaleY); // if (SharedConfig.getDevicePerformanceClass() >= SharedConfig.PERFORMANCE_CLASS_HIGH) { // scale = Math.min(scale * 2, 1); // } - final int w = (int) (bitmap.getWidth() * scale), h = (int) (bitmap.getHeight() * scale); + final int w = (int) (bitmap.getWidth() * s), h = (int) (bitmap.getHeight() * s); Bitmap scaledBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(scaledBitmap); @@ -395,10 +404,10 @@ public static Bitmap getScaledBitmap(DecodeBitmap decode, int maxWidth, int maxH final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); paint.setShader(shader); - int blurRadius = Utilities.clamp(Math.round(1f / scale), 8, 0); + int blurRadius = Utilities.clamp(Math.round(1f / s), 8, 0); matrix.reset(); - matrix.postScale(scale, scale); + matrix.postScale(s, s); shader.setLocalMatrix(matrix); canvas.drawRect(0, 0, w, h, paint); @@ -892,7 +901,9 @@ public void setupMatrix(Matrix matrix, int rotate) { matrix.postTranslate(width / 2f, height / 2f); } float scale = (float) resultWidth / width; - if ((float) height / (float) width > 1.29f) { + if (botId != 0) { + scale = Math.min(scale, (float) resultHeight / height); + } else if ((float) height / (float) width > 1.29f) { scale = Math.max(scale, (float) resultHeight / height); } matrix.postScale(scale, scale); @@ -1384,6 +1395,26 @@ public StoryEntry copy() { newEntry.roundThumb = roundThumb; newEntry.roundOffset = roundOffset; newEntry.roundVolume = roundVolume; + newEntry.isEditingCover = isEditingCover; + newEntry.botId = botId; + newEntry.botLang = botLang; + newEntry.editingBotPreview = editingBotPreview; + newEntry.cover = cover; return newEntry; } + + public static long getCoverTime(TL_stories.StoryItem storyItem) { + if (storyItem == null) return 0; + if (storyItem.media == null || storyItem.media.document == null) return 0; + TLRPC.Document doc = storyItem.media.document; + TLRPC.TL_documentAttributeVideo attr = null; + for (int i = 0; i < doc.attributes.size(); ++i) { + if (doc.attributes.get(i) instanceof TLRPC.TL_documentAttributeVideo) { + attr = (TLRPC.TL_documentAttributeVideo) doc.attributes.get(i); + break; + } + } + if (attr == null) return 0; + return (long) (attr.video_start_ts * 1000L); + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryLinkSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryLinkSheet.java index 66db8814c03..921aa5e0e92 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryLinkSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryLinkSheet.java @@ -14,7 +14,6 @@ import android.text.Spanned; import android.text.TextUtils; import android.text.TextWatcher; -import android.util.Log; import android.util.TypedValue; import android.view.Gravity; import android.view.View; @@ -61,6 +60,7 @@ public class StoryLinkSheet extends BottomSheetWithRecyclerListView implements N private ButtonWithCounterView button; private boolean ignoreUrlEdit; + private boolean needRemoveDefPrefix; private Utilities.Callback<LinkPreview.WebPagePreview> whenDone; @@ -122,14 +122,37 @@ public StoryLinkSheet(Context context, Theme.ResourcesProvider resourcesProvider urlEditText.editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + @Override - public void onTextChanged(CharSequence s, int start, int before, int count) {} + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (ignoreUrlEdit) { + return; + } + needRemoveDefPrefix = s != null + && start == def.length() + && s.subSequence(0, start).toString().equals(def) + && s.length() >= start + count + && s.subSequence(start, start + count).toString().startsWith(def); + } + @Override public void afterTextChanged(Editable s) { checkPaste.run(); - if (!ignoreUrlEdit) { - checkEditURL(s == null ? null : s.toString()); + if (ignoreUrlEdit) { + return; + } + if (needRemoveDefPrefix && s != null) { + String text = s.toString(); + String fixedLink = text.substring(def.length()); + ignoreUrlEdit = true; + urlEditText.editText.setText(fixedLink); + urlEditText.editText.setSelection(0, urlEditText.editText.getText().length()); + ignoreUrlEdit = false; + needRemoveDefPrefix = false; + checkEditURL(fixedLink); + return; } + checkEditURL(s == null ? null : s.toString()); } }); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryPrivacyBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryPrivacyBottomSheet.java index 7e6ff055135..f577fa5f20a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryPrivacyBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryPrivacyBottomSheet.java @@ -3,6 +3,7 @@ import static org.telegram.messenger.AndroidUtilities.dp; import static org.telegram.messenger.AndroidUtilities.dpf2; import static org.telegram.messenger.AndroidUtilities.translitSafe; +import static org.telegram.messenger.LocaleController.getString; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; @@ -10,6 +11,7 @@ import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.content.Context; +import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.LinearGradient; import android.graphics.Matrix; @@ -19,6 +21,7 @@ import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.Shader; +import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Build; import android.text.Editable; @@ -264,6 +267,10 @@ public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newStat if (newState == RecyclerView.SCROLL_STATE_DRAGGING && keyboardVisible && searchField != null) { closeKeyboard(); } + if (newState == RecyclerView.SCROLL_STATE_IDLE) { + wasAtTop = atTop(); + wasAtBottom = atBottom(); + } scrolling = newState != RecyclerView.SCROLL_STATE_IDLE; } }); @@ -331,9 +338,9 @@ public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newStat performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); } catch (Throwable ignore) {} new AlertDialog.Builder(getContext(), resourcesProvider) - .setTitle(LocaleController.getString("GroupTooLarge", R.string.GroupTooLarge)) - .setMessage(LocaleController.getString("GroupTooLargeMessage", R.string.GroupTooLargeMessage)) - .setPositiveButton(LocaleController.getString("OK", R.string.OK), null) + .setTitle(getString("GroupTooLarge", R.string.GroupTooLarge)) + .setMessage(getString("GroupTooLargeMessage", R.string.GroupTooLargeMessage)) + .setPositiveButton(getString("OK", R.string.OK), null) .show(); } else if (selectedUsersByGroup.containsKey(id)) { ArrayList<Long> userIds = selectedUsersByGroup.get(id); @@ -459,12 +466,12 @@ public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newStat boolean allowShare = selectedType == TYPE_EVERYONE; if (allowScreenshots) { BulletinFactory.of(container, resourcesProvider) - .createSimpleBulletin(R.raw.ic_save_to_gallery, LocaleController.getString(allowShare ? R.string.StoryEnabledScreenshotsShare : R.string.StoryEnabledScreenshots), 4) + .createSimpleBulletin(R.raw.ic_save_to_gallery, getString(allowShare ? R.string.StoryEnabledScreenshotsShare : R.string.StoryEnabledScreenshots), 4) .setDuration(5000) .show(true); } else { BulletinFactory.of(container, resourcesProvider) - .createSimpleBulletin(R.raw.passcode_lock_close, LocaleController.getString(allowShare ? R.string.StoryDisabledScreenshotsShare : R.string.StoryDisabledScreenshots), 4) + .createSimpleBulletin(R.raw.passcode_lock_close, getString(allowShare ? R.string.StoryDisabledScreenshotsShare : R.string.StoryDisabledScreenshots), 4) .setDuration(5000) .show(true); } @@ -473,15 +480,22 @@ public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newStat final boolean isChannel = selectedPeer instanceof TLRPC.TL_inputPeerChannel; if (keepOnMyPage) { BulletinFactory.of(container, resourcesProvider) - .createSimpleBulletin(R.raw.msg_story_keep, LocaleController.getString(isChannel ? R.string.StoryChannelEnableKeep : R.string.StoryEnableKeep), 4) + .createSimpleBulletin(R.raw.msg_story_keep, getString(isChannel ? R.string.StoryChannelEnableKeep : R.string.StoryEnableKeep), 4) .setDuration(5000) .show(true); } else { BulletinFactory.of(container, resourcesProvider) - .createSimpleBulletin(R.raw.fire_on, LocaleController.getString(isChannel ? R.string.StoryChannelDisableKeep : R.string.StoryDisableKeep), 4) + .createSimpleBulletin(R.raw.fire_on, getString(isChannel ? R.string.StoryChannelDisableKeep : R.string.StoryDisableKeep), 4) .setDuration(5000) .show(true); } + if (whenCoverClicked != null) { + updateItems(true); + } + } + } else if (item.viewType == VIEW_TYPE_BUTTON) { + if (whenCoverClicked != null) { + whenCoverClicked.run(); } } }); @@ -877,7 +891,7 @@ private void onButton2Click(View v) { } public float top() { - float top = layoutManager.getReverseLayout() ? AndroidUtilities.displaySize.y : 0; + float top = layoutManager.getReverseLayout() || pageType == PAGE_TYPE_SHARE ? AndroidUtilities.displaySize.y : 0; for (int i = 0; i < listView.getChildCount(); ++i) { View child = listView.getChildAt(i); if (layoutManager.getReverseLayout()) { @@ -886,6 +900,10 @@ public float top() { if (childTop < top) { top = AndroidUtilities.lerp(top, childTop, a); } + } else if (pageType == PAGE_TYPE_SHARE) { + if (!(child instanceof PadView)) { + top = Math.min(contentView.getPaddingTop() + child.getY(), top); + } } else if (child.getTag() instanceof Integer && (int) child.getTag() == 33) { return contentView.getPaddingTop() + child.getBottom() + child.getTranslationY(); } else if (child.getTag() instanceof Integer && (int) child.getTag() == 35) { @@ -918,7 +936,7 @@ public void bind(int pageType) { } else if (pageType == PAGE_TYPE_BLOCKLIST) { applyBlocklist(false); } - layoutManager.setReverseLayout(adapter.reversedLayout = pageType == PAGE_TYPE_SHARE); + layoutManager.setReverseLayout(adapter.reversedLayout = false); updateSpans(false); searchField.setText(""); searchField.setVisibility(pageType == PAGE_TYPE_SHARE ? View.GONE : View.VISIBLE); @@ -979,46 +997,55 @@ public void updateItems(boolean animated, boolean notify) { ItemInner item; containsHeader = false; sectionCell.setVisibility(View.GONE); -// items.add(ItemInner.asPad(dp(84) + 4 * dp(56) + (sendAsMessageEnabled ? dp(120) : dp(64)))); List<TLRPC.InputPeer> sendAs = MessagesController.getInstance(currentAccount).getStoriesController().sendAs; - boolean containsPrivacy = true; - boolean isChannel = false; + boolean containsPrivacy = true, isChannel = false; + ItemInner pad = ItemInner.asPad(24); + items.add(pad); if (canChangePeer && (isEdit || sendAs == null || sendAs.size() <= 1)) { items.add(ItemInner.asHeader2( isEdit ? - LocaleController.getString("StoryPrivacyAlertEditTitle", R.string.StoryPrivacyAlertEditTitle) : - LocaleController.getString("StoryPrivacyAlertTitle", R.string.StoryPrivacyAlertTitle), + getString("StoryPrivacyAlertEditTitle", R.string.StoryPrivacyAlertEditTitle) : + getString("StoryPrivacyAlertTitle", R.string.StoryPrivacyAlertTitle), storyPeriod != Integer.MAX_VALUE ? LocaleController.formatPluralString("StoryPrivacyAlertSubtitle", storyPeriod / 3600) : - LocaleController.getString("StoryPrivacyAlertSubtitleProfile", R.string.StoryPrivacyAlertSubtitleProfile) + getString("StoryPrivacyAlertSubtitleProfile", R.string.StoryPrivacyAlertSubtitleProfile) )); + pad.subtractHeight += dp(72); } else { - items.add(ItemInner.asHeaderCell(LocaleController.getString(R.string.StoryPrivacyPublishAs))); + items.add(ItemInner.asHeaderCell(getString(R.string.StoryPrivacyPublishAs))); + pad.subtractHeight += dp(50); if (selectedPeer == null || selectedPeer instanceof TLRPC.TL_inputPeerSelf) { TLRPC.User me = UserConfig.getInstance(currentAccount).getCurrentUser(); items.add(ItemInner.asUser(me, false, false).asSendAs()); + pad.subtractHeight += dp(62); } else if (selectedPeer instanceof TLRPC.TL_inputPeerUser) { TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(selectedPeer.user_id); items.add(ItemInner.asUser(user, false, false).asSendAs()); + pad.subtractHeight += dp(62); } else if (selectedPeer instanceof TLRPC.TL_inputPeerChannel) { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(selectedPeer.channel_id); items.add(ItemInner.asChat(chat, false).asSendAs()); containsPrivacy = false; isChannel = ChatObject.isChannelAndNotMegaGroup(chat); + pad.subtractHeight += dp(62 + 42); } else if (selectedPeer instanceof TLRPC.TL_inputPeerChat) { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(selectedPeer.chat_id); items.add(ItemInner.asChat(chat, false).asSendAs()); containsPrivacy = false; + pad.subtractHeight += dp(62 + 42); } ItemInner section = ItemInner.asShadow(null); section.resId = containsPrivacy ? 1 : 2; items.add(section); + pad.subtractHeight += dp(12); if (containsPrivacy) { - items.add(ItemInner.asHeaderCell(LocaleController.getString(R.string.StoryPrivacyWhoCanView))); + items.add(ItemInner.asHeaderCell(getString(R.string.StoryPrivacyWhoCanView))); + pad.subtractHeight += dp(40); } } if (containsPrivacy) { items.add(item = ItemInner.asType(TYPE_EVERYONE, selectedType == TYPE_EVERYONE, excludedEveryoneCount)); + pad.subtractHeight += dp(56); if (excludedEveryoneCount == 1) { if (excludedEveryone.size() == 1) { item.user = MessagesController.getInstance(currentAccount).getUser(excludedEveryone.get(0)); @@ -1032,15 +1059,18 @@ public void updateItems(boolean animated, boolean notify) { } } items.add(item = ItemInner.asType(TYPE_CONTACTS, selectedType == TYPE_CONTACTS, excludedContacts.size())); + pad.subtractHeight += dp(56); if (excludedContacts.size() == 1) { item.user = MessagesController.getInstance(currentAccount).getUser(excludedContacts.get(0)); } ArrayList<TLObject> closeFriends = getCloseFriends(); items.add(item = ItemInner.asType(TYPE_CLOSE_FRIENDS, selectedType == TYPE_CLOSE_FRIENDS, closeFriends.size())); + pad.subtractHeight += dp(56); if (closeFriends.size() == 1 && closeFriends.get(0) instanceof TLRPC.User) { item.user = (TLRPC.User) closeFriends.get(0); } items.add(item = ItemInner.asType(TYPE_SELECTED_CONTACTS, selectedType == TYPE_SELECTED_CONTACTS, selectedContactsCount)); + pad.subtractHeight += dp(56); if (selectedContactsCount == 1) { if (selectedContacts.size() == 1) { item.user = MessagesController.getInstance(currentAccount).getUser(selectedContacts.get(0)); @@ -1056,7 +1086,7 @@ public void updateItems(boolean animated, boolean notify) { int blocklistCount = MessagesController.getInstance(currentAccount).getStoriesController().getBlocklistCount(); items.add(ItemInner.asShadow(AndroidUtilities.replaceSingleTag( blocklistCount <= 0 ? - LocaleController.getString("StoryBlockListEmpty") : + getString("StoryBlockListEmpty") : LocaleController.formatPluralString("StoryBlockList", blocklistCount), Theme.key_chat_messageLinkIn, 0, () -> { @@ -1065,14 +1095,24 @@ public void updateItems(boolean animated, boolean notify) { }, resourcesProvider ))); + pad.subtractHeight += dp(80); } if (!isEdit) { - items.add(ItemInner.asCheck(LocaleController.getString(R.string.StoryAllowScreenshots), 0, allowScreenshots)); - items.add(ItemInner.asCheck(LocaleController.getString(containsPrivacy ? R.string.StoryKeep : (isChannel ? R.string.StoryKeepChannel : R.string.StoryKeepGroup)), 1, keepOnMyPage)); + items.add(ItemInner.asCheck(getString(R.string.StoryAllowScreenshots), 0, allowScreenshots)); + pad.subtractHeight += dp(50); + items.add(ItemInner.asCheck(getString(containsPrivacy ? R.string.StoryKeep : (isChannel ? R.string.StoryKeepChannel : R.string.StoryKeepGroup)), 1, keepOnMyPage)); + pad.subtractHeight += dp(50); items.add(ItemInner.asShadow(LocaleController.formatPluralString(containsPrivacy ? "StoryKeepInfo" : (isChannel ? "StoryKeepChannelInfo" : "StoryKeepGroupInfo"), (storyPeriod == Integer.MAX_VALUE ? 86400 : storyPeriod) / 3600))); + pad.subtractHeight += dp(80); + } + if (keepOnMyPage && whenCoverClicked != null) { + items.add(ItemInner.asButton(getString(R.string.StoryEditCover), coverDrawable)); + pad.subtractHeight += dp(50); + items.add(ItemInner.asShadow(getString(R.string.StoryEditCoverInfo))); + pad.subtractHeight += dp(72); } } else if (pageType == PAGE_TYPE_CLOSE_FRIENDS) { - headerView.setText(LocaleController.getString("StoryPrivacyAlertCloseFriendsTitle", R.string.StoryPrivacyAlertCloseFriendsTitle)); + headerView.setText(getString("StoryPrivacyAlertCloseFriendsTitle", R.string.StoryPrivacyAlertCloseFriendsTitle)); headerView.setCloseImageVisible(true); headerView.backDrawable.setRotation(0f, false); items.add(ItemInner.asPad()); @@ -1083,11 +1123,11 @@ public void updateItems(boolean animated, boolean notify) { h += dp(150); items.add(ItemInner.asSection()); h += dp(32); - sectionCell.setText(LocaleController.getString("StoryPrivacyAlertCloseFriendsSubtitle", R.string.StoryPrivacyAlertCloseFriendsSubtitle)); + sectionCell.setText(getString("StoryPrivacyAlertCloseFriendsSubtitle", R.string.StoryPrivacyAlertCloseFriendsSubtitle)); updateSectionCell(animated); containsHeader = true; } else if (pageType == PAGE_TYPE_EXCLUDE_CONTACTS) { - headerView.setText(LocaleController.getString("StoryPrivacyAlertExcludedContactsTitle", R.string.StoryPrivacyAlertExcludedContactsTitle)); + headerView.setText(getString("StoryPrivacyAlertExcludedContactsTitle", R.string.StoryPrivacyAlertExcludedContactsTitle)); headerView.setCloseImageVisible(true); headerView.backDrawable.setRotation(0f, false); items.add(ItemInner.asPad()); @@ -1098,11 +1138,11 @@ public void updateItems(boolean animated, boolean notify) { h += dp(150); items.add(ItemInner.asSection()); h += dp(32); - sectionCell.setText(LocaleController.getString("StoryPrivacyAlertExcludedContactsSubtitle", R.string.StoryPrivacyAlertExcludedContactsSubtitle)); + sectionCell.setText(getString("StoryPrivacyAlertExcludedContactsSubtitle", R.string.StoryPrivacyAlertExcludedContactsSubtitle)); updateSectionCell(animated); containsHeader = true; } else if (pageType == PAGE_TYPE_SELECT_CONTACTS) { - headerView.setText(LocaleController.getString("StoryPrivacyAlertSelectContactsTitle", R.string.StoryPrivacyAlertSelectContactsTitle)); + headerView.setText(getString("StoryPrivacyAlertSelectContactsTitle", R.string.StoryPrivacyAlertSelectContactsTitle)); headerView.setCloseImageVisible(true); headerView.backDrawable.setRotation(0f, false); items.add(ItemInner.asPad()); @@ -1113,11 +1153,11 @@ public void updateItems(boolean animated, boolean notify) { h += dp(150); items.add(ItemInner.asSection()); h += dp(32); - sectionCell.setText(LocaleController.getString("StoryPrivacyAlertSelectContactsSubtitle", R.string.StoryPrivacyAlertSelectContactsSubtitle)); + sectionCell.setText(getString("StoryPrivacyAlertSelectContactsSubtitle", R.string.StoryPrivacyAlertSelectContactsSubtitle)); updateSectionCell(animated); containsHeader = true; } else if (pageType == PAGE_TYPE_SEND_AS_MESSAGE) { - headerView.setText(LocaleController.getString("StoryPrivacyAlertAsMessageTitle", R.string.StoryPrivacyAlertAsMessageTitle)); + headerView.setText(getString("StoryPrivacyAlertAsMessageTitle", R.string.StoryPrivacyAlertAsMessageTitle)); headerView.setCloseImageVisible(startedFromSendAsMessage); headerView.backDrawable.setRotation(0f, false); items.add(ItemInner.asPad()); @@ -1128,11 +1168,11 @@ public void updateItems(boolean animated, boolean notify) { h += dp(150); items.add(ItemInner.asSection()); h += dp(32); - sectionCell.setText(LocaleController.getString("StoryPrivacyAlertAsMessageSubtitle", R.string.StoryPrivacyAlertAsMessageSubtitle)); + sectionCell.setText(getString("StoryPrivacyAlertAsMessageSubtitle", R.string.StoryPrivacyAlertAsMessageSubtitle)); updateSectionCell(animated); containsHeader = true; } else if (pageType == PAGE_TYPE_BLOCKLIST) { - headerView.setText(LocaleController.getString("StoryPrivacyAlertBlocklistTitle", R.string.StoryPrivacyAlertBlocklistTitle)); + headerView.setText(getString("StoryPrivacyAlertBlocklistTitle", R.string.StoryPrivacyAlertBlocklistTitle)); headerView.setCloseImageVisible(true); headerView.backDrawable.setRotation(0f, false); items.add(ItemInner.asPad()); @@ -1143,11 +1183,11 @@ public void updateItems(boolean animated, boolean notify) { h += dp(150); items.add(ItemInner.asSection()); h += dp(32); - sectionCell.setText(LocaleController.getString("StoryPrivacyAlertBlocklistSubtitle", R.string.StoryPrivacyAlertBlocklistSubtitle)); + sectionCell.setText(getString("StoryPrivacyAlertBlocklistSubtitle", R.string.StoryPrivacyAlertBlocklistSubtitle)); updateSectionCell(animated); containsHeader = true; } else if (pageType == PAGE_TYPE_EXCLUDE_EVERYONE) { - headerView.setText(LocaleController.getString("StoryPrivacyAlertExcludeFromEveryoneTitle", R.string.StoryPrivacyAlertExcludeFromEveryoneTitle)); + headerView.setText(getString("StoryPrivacyAlertExcludeFromEveryoneTitle", R.string.StoryPrivacyAlertExcludeFromEveryoneTitle)); headerView.setCloseImageVisible(true); headerView.backDrawable.setRotation(0f, false); items.add(ItemInner.asPad()); @@ -1158,7 +1198,7 @@ public void updateItems(boolean animated, boolean notify) { h += dp(150); items.add(ItemInner.asSection()); h += dp(32); - sectionCell.setText(LocaleController.getString("StoryPrivacyAlertExcludeFromEveryoneSubtitle", R.string.StoryPrivacyAlertExcludeFromEveryoneSubtitle)); + sectionCell.setText(getString("StoryPrivacyAlertExcludeFromEveryoneSubtitle", R.string.StoryPrivacyAlertExcludeFromEveryoneSubtitle)); updateSectionCell(animated); containsHeader = true; } @@ -1405,9 +1445,9 @@ public void updateButton(boolean animated) { button.setEnabled(true); button.setCount(0, animated); if (isEdit) { - button.setText(LocaleController.getString("StoryPrivacyButtonSave"), animated); + button.setText(getString("StoryPrivacyButtonSave"), animated); } else { - button.setText(LocaleController.getString("StoryPrivacyButtonPost", R.string.StoryPrivacyButtonPost), animated); + button.setText(getString("StoryPrivacyButtonPost", R.string.StoryPrivacyButtonPost), animated); // if (selectedType == TYPE_CLOSE_FRIENDS) { // button.setText(LocaleController.getString("StoryPrivacyButtonCloseFriends", R.string.StoryPrivacyButtonCloseFriends), animated); // button.setCount(getCloseFriends().size(), animated); @@ -1435,13 +1475,13 @@ public void updateButton(boolean animated) { } else if (pageType == PAGE_TYPE_CLOSE_FRIENDS) { button.setShowZero(false); button.setEnabled(true); // button.setEnabled(!selectedUsers.isEmpty()); - button.setText(LocaleController.getString("StoryPrivacyButtonSaveCloseFriends", R.string.StoryPrivacyButtonSaveCloseFriends), animated); + button.setText(getString("StoryPrivacyButtonSaveCloseFriends", R.string.StoryPrivacyButtonSaveCloseFriends), animated); button.setCount(selectedUsers.size(), animated); button2.setVisibility(View.GONE); } else if (pageType == PAGE_TYPE_SELECT_CONTACTS) { int count = selectedContactsCount = mergeUsers(selectedUsers, selectedUsersByGroup).size(); // button.setText(LocaleController.formatPluralString("StoryPrivacyButtonContacts", count), animated); - button.setText(LocaleController.getString("StoryPrivacyButtonSave"), animated); + button.setText(getString("StoryPrivacyButtonSave"), animated); button.setShowZero(false); buttonContainer.hide(count <= 0, animated); button.setCount(count, animated); @@ -1451,10 +1491,10 @@ public void updateButton(boolean animated) { button.setShowZero(false); button.setEnabled(true); if (selectedUsers.isEmpty()) { - button.setText(LocaleController.getString("StoryPrivacyButtonSave"), animated); + button.setText(getString("StoryPrivacyButtonSave"), animated); button.setCount(0, animated); } else { - button.setText(LocaleController.getString("StoryPrivacyButtonExcludeContacts", R.string.StoryPrivacyButtonExcludeContacts), animated); + button.setText(getString("StoryPrivacyButtonExcludeContacts", R.string.StoryPrivacyButtonExcludeContacts), animated); button.setCount(selectedUsers.size(), animated); } button2.setVisibility(View.GONE); @@ -1467,7 +1507,7 @@ public void updateButton(boolean animated) { } else if (pageType == PAGE_TYPE_BLOCKLIST) { button.setShowZero(false); button.setEnabled(true); // button.setEnabled(!selectedUsers.isEmpty()); - button.setText(LocaleController.getString("StoryPrivacyButtonSaveCloseFriends", R.string.StoryPrivacyButtonSaveCloseFriends), animated); + button.setText(getString("StoryPrivacyButtonSaveCloseFriends", R.string.StoryPrivacyButtonSaveCloseFriends), animated); StoriesController storiesController = MessagesController.getInstance(currentAccount).getStoriesController(); if (storiesController.blocklistFull) { button.setCount(selectedUsers.size(), animated); @@ -1493,7 +1533,7 @@ public void updateButton(boolean animated) { } else if (pageType == PAGE_TYPE_EXCLUDE_EVERYONE) { int count = excludedEveryoneCount = mergeUsers(excludedEveryone, excludedEveryoneByGroup).size(); // button.setText(LocaleController.formatPluralString("StoryPrivacyButtonContacts", count), animated); - button.setText(LocaleController.getString("StoryPrivacyButtonSave"), animated); + button.setText(getString("StoryPrivacyButtonSave"), animated); button.setShowZero(false); buttonContainer.hide(false, animated); button.setCount(count, animated); @@ -1507,7 +1547,7 @@ private void updateSectionCell(boolean animated) { return; } if (mergeUsers(selectedUsers, selectedUsersByGroup).size() > 0) { - sectionCell.setRightText(LocaleController.getString(R.string.UsersDeselectAll), true, v -> { + sectionCell.setRightText(getString(R.string.UsersDeselectAll), true, v -> { for (long userId : selectedUsers) { changelog.put(userId, false); } @@ -1600,7 +1640,7 @@ public void updateCheckboxes(boolean animated) { updateSectionCell(animated); } - + public void updateLastSeen() { for (int i = 0; i < listView.getChildCount(); ++i) { View child = listView.getChildAt(i); @@ -1655,9 +1695,14 @@ public int getTypeOn(MotionEvent e) { return -1; } + public boolean wasAtTop; public boolean atTop() { return !listView.canScrollVertically(-1); } + public boolean wasAtBottom; + public boolean atBottom() { + return !listView.canScrollVertically(1); + } private int keyboardHeight; private boolean keyboardMoving; @@ -1741,6 +1786,12 @@ protected void onDetachedFromWindow() { NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.chatInfoDidLoad); } + private class PadView extends View { + public PadView(Context context) { + super(context); + } + } + private class Adapter extends AdapterWithDiffUtils { private Context context; @@ -1760,7 +1811,7 @@ public Adapter(Context context, Theme.ResourcesProvider resourcesProvider, Searc @Override public boolean isEnabled(RecyclerView.ViewHolder holder) { - return (holder.getItemViewType() == VIEW_TYPE_USER && canChangePeer) || holder.getItemViewType() == VIEW_TYPE_CHECK; + return (holder.getItemViewType() == VIEW_TYPE_USER && canChangePeer) || holder.getItemViewType() == VIEW_TYPE_CHECK || holder.getItemViewType() == VIEW_TYPE_BUTTON; } @NonNull @@ -1768,7 +1819,7 @@ public boolean isEnabled(RecyclerView.ViewHolder holder) { public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view; if (viewType == VIEW_TYPE_PAD) { - view = new View(context); + view = new PadView(context); } else if (viewType == VIEW_TYPE_HEADER) { view = new View(context); view.setTag(35); @@ -1784,8 +1835,8 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int view.setBackgroundColor(Theme.getColor(Theme.key_dialogBackground, resourcesProvider)); } else if (viewType == VIEW_TYPE_NO_USERS) { StickerEmptyView searchEmptyView = new StickerEmptyView(context, null, StickerEmptyView.STICKER_TYPE_SEARCH, resourcesProvider); - searchEmptyView.title.setText(LocaleController.getString("NoResult", R.string.NoResult)); - searchEmptyView.subtitle.setText(LocaleController.getString("SearchEmptyViewFilteredSubtitle2", R.string.SearchEmptyViewFilteredSubtitle2)); + searchEmptyView.title.setText(getString("NoResult", R.string.NoResult)); + searchEmptyView.subtitle.setText(getString("SearchEmptyViewFilteredSubtitle2", R.string.SearchEmptyViewFilteredSubtitle2)); searchEmptyView.linearLayout.setTranslationY(AndroidUtilities.dp(24)); view = searchEmptyView; } else if (viewType == VIEW_TYPE_SHADOW) { @@ -1793,6 +1844,8 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int view.setBackgroundColor(0xFF0D0D0D); } else if (viewType == VIEW_TYPE_CHECK) { view = new TextCell(context, 23, true, true, resourcesProvider); + } else if (viewType == VIEW_TYPE_BUTTON) { + view = new TextCell(context, 23, true, false, resourcesProvider); } else { view = new View(context) { @Override @@ -1866,6 +1919,12 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi } } else if (viewType == VIEW_TYPE_CHECK) { ((TextCell) holder.itemView).setTextAndCheck(item.text, item.resId == 0 ? allowScreenshots : keepOnMyPage, divider); + } else if (viewType == VIEW_TYPE_BUTTON) { + if (item.drawable != null) { + ((TextCell) holder.itemView).setTextAndValueDrawable(item.text, item.drawable, divider); + } else { + ((TextCell) holder.itemView).setTextAndValue(item.text, item.text2, divider); + } } else if (viewType == VIEW_TYPE_HEADER_CELL) { ((org.telegram.ui.Cells.HeaderCell) holder.itemView).setText(item.text); } @@ -2082,12 +2141,12 @@ private void done(StoryPrivacy privacy, Runnable loaded, boolean ignoreRestricti usersString.append(username); } new AlertDialog.Builder(getContext(), resourcesProvider) - .setTitle(LocaleController.getString(R.string.StoryRestrictions)) - .setMessage(AndroidUtilities.replaceCharSequence("%s", LocaleController.getString(R.string.StoryRestrictionsInfo), usersString)) - .setPositiveButton(LocaleController.getString(R.string.Proceed), (di, i) -> { + .setTitle(getString(R.string.StoryRestrictions)) + .setMessage(AndroidUtilities.replaceCharSequence("%s", getString(R.string.StoryRestrictionsInfo), usersString)) + .setPositiveButton(getString(R.string.Proceed), (di, i) -> { done(privacy, loaded, true); }) - .setNegativeButton(LocaleController.getString(R.string.Cancel), null) + .setNegativeButton(getString(R.string.Cancel), null) .show(); return; } @@ -2214,11 +2273,16 @@ public void onBackPressed() { protected boolean canDismissWithSwipe() { View currentView = viewPager.getCurrentView(); if (currentView instanceof Page) { - return ((Page) currentView).atTop(); + return ((Page) currentView).wasAtTop; } return true; } + @Override + protected boolean canSwipeToBack(MotionEvent event) { + return false; + } + public interface DoneCallback { public void done(StoryPrivacy privacy, boolean allowScreenshots, boolean keepInProfile, TLRPC.InputPeer peer, Runnable loaded); } @@ -2345,10 +2409,12 @@ public StoryPrivacyBottomSheet setValue(StoryPrivacy privacy) { public static final int VIEW_TYPE_SHADOW = 6; public static final int VIEW_TYPE_CHECK = 7; public static final int VIEW_TYPE_HEADER_CELL = 8; + public static final int VIEW_TYPE_BUTTON = 9; private static class ItemInner extends AdapterWithDiffUtils.Item { public int resId; + public Drawable drawable; public CharSequence text, text2; public TLRPC.User user; public TLRPC.Chat chat; @@ -2432,6 +2498,18 @@ public static ItemInner asCheck(CharSequence text, int id, boolean checked) { item.checked = checked; return item; } + public static ItemInner asButton(CharSequence text, CharSequence text2) { + ItemInner item = new ItemInner(VIEW_TYPE_BUTTON, false); + item.text = text; + item.text2 = text2; + return item; + } + public static ItemInner asButton(CharSequence text, Drawable drawable) { + ItemInner item = new ItemInner(VIEW_TYPE_BUTTON, false); + item.text = text; + item.drawable = drawable; + return item; + } public static ItemInner asNoUsers() { return new ItemInner(VIEW_TYPE_NO_USERS, false); @@ -2466,6 +2544,8 @@ public boolean equals(Object o) { return false; } else if (viewType == VIEW_TYPE_CHECK && (resId != i.resId || !TextUtils.equals(text, i.text) || checked != i.checked)) { return false; + } else if (viewType == VIEW_TYPE_BUTTON && (drawable != i.drawable || !TextUtils.equals(text, i.text) || !TextUtils.equals(text2, i.text2))) { + return false; } return true; } @@ -2753,7 +2833,7 @@ public void setUser(TLRPC.User user) { titleTextView.setText(text); isOnline[0] = false; if (sendAs) { - setSubtitle(LocaleController.getString(R.string.VoipGroupPersonalAccount)); + setSubtitle(getString(R.string.VoipGroupPersonalAccount)); subtitleTextView.setTextColor(Theme.getColor(Theme.key_dialogTextGray3, resourcesProvider)); } else { setSubtitle(LocaleController.formatUserStatus(UserConfig.selectedAccount, user, isOnline)); @@ -2786,16 +2866,16 @@ public void setChat(TLRPC.Chat chat, int participants_count) { if (participants_count >= 1) { subtitle = LocaleController.formatPluralString(isChannel ? "Subscribers" : "Members", participants_count); } else { - subtitle = LocaleController.getString(isChannel ? R.string.DiscussChannel : R.string.AccDescrGroup); + subtitle = getString(isChannel ? R.string.DiscussChannel : R.string.AccDescrGroup); } } else if (ChatObject.isChannel(chat) && !chat.megagroup) { if (participants_count >= 1) { subtitle = LocaleController.formatPluralStringComma("Subscribers", participants_count - 1); } else { if (!ChatObject.isPublic(chat)) { - subtitle = LocaleController.getString("ChannelPrivate", R.string.ChannelPrivate).toLowerCase(); + subtitle = getString("ChannelPrivate", R.string.ChannelPrivate).toLowerCase(); } else { - subtitle = LocaleController.getString("ChannelPublic", R.string.ChannelPublic).toLowerCase(); + subtitle = getString("ChannelPublic", R.string.ChannelPublic).toLowerCase(); } } } else { @@ -2803,11 +2883,11 @@ public void setChat(TLRPC.Chat chat, int participants_count) { subtitle = LocaleController.formatPluralStringComma("Members", participants_count - 1); } else { if (chat.has_geo) { - subtitle = LocaleController.getString("MegaLocation", R.string.MegaLocation); + subtitle = getString("MegaLocation", R.string.MegaLocation); } else if (!ChatObject.isPublic(chat)) { - subtitle = LocaleController.getString("MegaPrivate", R.string.MegaPrivate).toLowerCase(); + subtitle = getString("MegaPrivate", R.string.MegaPrivate).toLowerCase(); } else { - subtitle = LocaleController.getString("MegaPublic", R.string.MegaPublic).toLowerCase(); + subtitle = getString("MegaPublic", R.string.MegaPublic).toLowerCase(); } } } @@ -2832,7 +2912,7 @@ private CharSequence withArrow(CharSequence text) { public void setType(int type, int count, TLRPC.User singleUser) { if (type == TYPE_EVERYONE) { - titleTextView.setText(LocaleController.getString("StoryPrivacyOptionEveryone", R.string.StoryPrivacyOptionEveryone)); + titleTextView.setText(getString("StoryPrivacyOptionEveryone", R.string.StoryPrivacyOptionEveryone)); if (count == 1 && singleUser != null) { CharSequence text = LocaleController.formatString(R.string.StoryPrivacyOptionExcludePerson, UserObject.getUserName(singleUser)); text = Emoji.replaceEmoji(text, subtitleTextView.getPaint().getFontMetricsInt(), false); @@ -2840,13 +2920,13 @@ public void setType(int type, int count, TLRPC.User singleUser) { } else if (count > 0) { setSubtitle(withArrow(LocaleController.formatPluralString("StoryPrivacyOptionExcludePeople", count))); } else { - setSubtitle(withArrow(LocaleController.getString("StoryPrivacyOptionContactsDetail", R.string.StoryPrivacyOptionContactsDetail))); + setSubtitle(withArrow(getString("StoryPrivacyOptionContactsDetail", R.string.StoryPrivacyOptionContactsDetail))); } subtitleTextView.setTextColor(Theme.getColor(Theme.key_dialogTextBlue2, resourcesProvider)); avatarDrawable.setAvatarType(AvatarDrawable.AVATAR_TYPE_FILTER_CHANNELS); avatarDrawable.setColor(0xFF16A5F2, 0xFF1180F7); } else if (type == TYPE_CONTACTS) { - titleTextView.setText(LocaleController.getString("StoryPrivacyOptionContacts", R.string.StoryPrivacyOptionContacts)); + titleTextView.setText(getString("StoryPrivacyOptionContacts", R.string.StoryPrivacyOptionContacts)); if (count == 1 && singleUser != null) { CharSequence text = LocaleController.formatString(R.string.StoryPrivacyOptionExcludePerson, UserObject.getUserName(singleUser)); text = Emoji.replaceEmoji(text, subtitleTextView.getPaint().getFontMetricsInt(), false); @@ -2854,13 +2934,13 @@ public void setType(int type, int count, TLRPC.User singleUser) { } else if (count > 0) { setSubtitle(withArrow(LocaleController.formatPluralString("StoryPrivacyOptionExcludePeople", count))); } else { - setSubtitle(withArrow(LocaleController.getString("StoryPrivacyOptionContactsDetail", R.string.StoryPrivacyOptionContactsDetail))); + setSubtitle(withArrow(getString("StoryPrivacyOptionContactsDetail", R.string.StoryPrivacyOptionContactsDetail))); } subtitleTextView.setTextColor(Theme.getColor(Theme.key_dialogTextBlue2, resourcesProvider)); avatarDrawable.setAvatarType(AvatarDrawable.AVATAR_TYPE_FILTER_CONTACTS); avatarDrawable.setColor(0xFFC468F2, 0xFF965CFA); } else if (type == TYPE_CLOSE_FRIENDS) { - titleTextView.setText(LocaleController.getString("StoryPrivacyOptionCloseFriends", R.string.StoryPrivacyOptionCloseFriends)); + titleTextView.setText(getString("StoryPrivacyOptionCloseFriends", R.string.StoryPrivacyOptionCloseFriends)); if (count == 1 && singleUser != null) { CharSequence text = UserObject.getUserName(singleUser); text = Emoji.replaceEmoji(text, subtitleTextView.getPaint().getFontMetricsInt(), false); @@ -2868,13 +2948,13 @@ public void setType(int type, int count, TLRPC.User singleUser) { } else if (count > 0) { setSubtitle(withArrow(LocaleController.formatPluralString("StoryPrivacyOptionPeople", count))); } else { - setSubtitle(withArrow(LocaleController.getString("StoryPrivacyOptionCloseFriendsDetail", R.string.StoryPrivacyOptionCloseFriendsDetail))); + setSubtitle(withArrow(getString("StoryPrivacyOptionCloseFriendsDetail", R.string.StoryPrivacyOptionCloseFriendsDetail))); } subtitleTextView.setTextColor(Theme.getColor(Theme.key_dialogTextBlue2, resourcesProvider)); avatarDrawable.setAvatarType(AvatarDrawable.AVATAR_TYPE_CLOSE_FRIENDS); avatarDrawable.setColor(0xFF88D93A, 0xFF2DB63B); } else if (type == TYPE_SELECTED_CONTACTS) { - titleTextView.setText(LocaleController.getString("StoryPrivacyOptionSelectedContacts", R.string.StoryPrivacyOptionSelectedContacts)); + titleTextView.setText(getString("StoryPrivacyOptionSelectedContacts", R.string.StoryPrivacyOptionSelectedContacts)); if (count == 1 && singleUser != null) { CharSequence text = UserObject.getUserName(singleUser); text = Emoji.replaceEmoji(text, subtitleTextView.getPaint().getFontMetricsInt(), false); @@ -2882,7 +2962,7 @@ public void setType(int type, int count, TLRPC.User singleUser) { } else if (count > 0) { setSubtitle(withArrow(LocaleController.formatPluralString("StoryPrivacyOptionPeople", count))); } else { - setSubtitle(withArrow(LocaleController.getString("StoryPrivacyOptionSelectedContactsDetail", R.string.StoryPrivacyOptionSelectedContactsDetail))); + setSubtitle(withArrow(getString("StoryPrivacyOptionSelectedContactsDetail", R.string.StoryPrivacyOptionSelectedContactsDetail))); } subtitleTextView.setTextColor(Theme.getColor(Theme.key_dialogTextBlue2, resourcesProvider)); avatarDrawable.setAvatarType(AvatarDrawable.AVATAR_TYPE_FILTER_GROUPS); @@ -3127,8 +3207,8 @@ public boolean onTouchEvent(MotionEvent event) { editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI); editText.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL); spansContainer.addView(editText); - editText.setHintText(LocaleController.getString("Search", R.string.Search)); - hintTextWidth = (int) editText.getPaint().measureText(LocaleController.getString("Search", R.string.Search)); + editText.setHintText(getString("Search", R.string.Search)); + hintTextWidth = (int) editText.getPaint().measureText(getString("Search", R.string.Search)); editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { @@ -3885,7 +3965,7 @@ public String toString() { return LocaleController.formatPluralString("StoryPrivacyRecipients", sendToUsers.size()); } if (rules.isEmpty()) { - return LocaleController.getString("StoryPrivacyNone", R.string.StoryPrivacyNone); + return getString("StoryPrivacyNone", R.string.StoryPrivacyNone); } TLRPC.InputPrivacyRule rule1 = rules.get(0); if (type == TYPE_EVERYONE) { @@ -3896,9 +3976,9 @@ public String toString() { return LocaleController.formatPluralString("StoryPrivacyEveryoneExclude", usersCount); } } - return LocaleController.getString("StoryPrivacyEveryone", R.string.StoryPrivacyEveryone); + return getString("StoryPrivacyEveryone", R.string.StoryPrivacyEveryone); } else if (type == TYPE_CLOSE_FRIENDS) { - return LocaleController.getString("StoryPrivacyCloseFriends", R.string.StoryPrivacyCloseFriends); + return getString("StoryPrivacyCloseFriends", R.string.StoryPrivacyCloseFriends); } else if (type == TYPE_SELECTED_CONTACTS && rule1 instanceof TLRPC.TL_inputPrivacyValueAllowUsers) { final int usersCount = ((TLRPC.TL_inputPrivacyValueAllowUsers) rule1).users.size(); return LocaleController.formatPluralString("StoryPrivacyContacts", usersCount); @@ -3909,24 +3989,24 @@ public String toString() { if (usersCount > 0) { return LocaleController.formatPluralString("StoryPrivacyContactsExclude", usersCount); } else { - return LocaleController.getString("StoryPrivacyAllContacts", R.string.StoryPrivacyAllContacts); + return getString("StoryPrivacyAllContacts", R.string.StoryPrivacyAllContacts); } } else { - return LocaleController.getString("StoryPrivacyAllContacts", R.string.StoryPrivacyAllContacts); + return getString("StoryPrivacyAllContacts", R.string.StoryPrivacyAllContacts); } } else if (type == 0) { if (rule1 instanceof TLRPC.TL_inputPrivacyValueAllowUsers) { final int usersCount = ((TLRPC.TL_inputPrivacyValueAllowUsers) rule1).users.size(); if (usersCount <= 0) { - return LocaleController.getString("StoryPrivacyNone", R.string.StoryPrivacyNone); + return getString("StoryPrivacyNone", R.string.StoryPrivacyNone); } else { return LocaleController.formatPluralString("StoryPrivacyContacts", usersCount); } } else { - return LocaleController.getString("StoryPrivacyNone", R.string.StoryPrivacyNone); + return getString("StoryPrivacyNone", R.string.StoryPrivacyNone); } } - return LocaleController.getString("StoryPrivacyNone", R.string.StoryPrivacyNone); + return getString("StoryPrivacyNone", R.string.StoryPrivacyNone); } public ArrayList<TLRPC.PrivacyRule> toValue() { @@ -4216,6 +4296,40 @@ public StoryPrivacyBottomSheet setCanChangePeer(boolean canChangePeer) { return this; } + private Drawable coverDrawable; + private Runnable whenCoverClicked; + + public StoryPrivacyBottomSheet setCover(Bitmap cover, Runnable whenClicked) { + coverDrawable = cover == null ? null : new BitmapDrawable(cover); + whenCoverClicked = whenClicked; + if (viewPager != null) { + View[] viewPages = viewPager.getViewPages(); + for (int i = 0; i < viewPages.length; ++i) { + View view = viewPages[i]; + if (view instanceof Page) { + ((Page) view).updateItems(false); + ((Page) view).updateButton(false); + } + } + } + return this; + } + + public StoryPrivacyBottomSheet setCover(Bitmap cover) { + coverDrawable = cover == null ? null : new BitmapDrawable(cover); + if (viewPager != null) { + View[] viewPages = viewPager.getViewPages(); + for (int i = 0; i < viewPages.length; ++i) { + View view = viewPages[i]; + if (view instanceof Page) { + ((Page) view).updateItems(false); + ((Page) view).updateButton(false); + } + } + } + return this; + } + public static class ChoosePeerSheet extends BottomSheet { private final int currentAccount; @@ -4304,7 +4418,7 @@ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { headerView.setPadding(backgroundPaddingLeft + dp(22), dp(2), backgroundPaddingLeft + dp(22), dp(14)); headerView.setBackgroundColor(Theme.getColor(Theme.key_dialogBackground, resourcesProvider)); headerView.setTypeface(AndroidUtilities.bold()); - headerView.setText(LocaleController.getString(R.string.StoryPrivacyPublishAs)); + headerView.setText(getString(R.string.StoryPrivacyPublishAs)); containerView.addView(headerView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); } @@ -4316,7 +4430,7 @@ private float top() { int position = listView.getChildAdapterPosition(child); if (position == RecyclerView.NO_POSITION) continue; if (position > 0) { - top = Math.min(child.getY(), top); + top = Math.min(AndroidUtilities.lerp(top, child.getY(), child.getAlpha()), top); } } return top; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryRecorder.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryRecorder.java index 112bbe2f509..4e4ee4a63a9 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryRecorder.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryRecorder.java @@ -3,6 +3,7 @@ import static org.telegram.messenger.AndroidUtilities.dp; import static org.telegram.messenger.AndroidUtilities.dpf2; import static org.telegram.messenger.AndroidUtilities.touchSlop; +import static org.telegram.messenger.LocaleController.getString; import android.Manifest; import android.animation.Animator; @@ -106,6 +107,7 @@ import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.ActionBar; +import org.telegram.ui.ActionBar.ActionBarLayout; import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.SimpleTextView; @@ -258,7 +260,7 @@ public static class SourceView { int iconSize; View view; - protected void show() {} + protected void show(boolean sent) {} protected void hide() {} protected void drawAbove(Canvas canvas, float alpha) {} @@ -271,7 +273,7 @@ public static SourceView fromAvatarImage(ProfileActivity.AvatarImageView avatarI final float rounding = isForum ? size * 0.32f : size; SourceView src = new SourceView() { @Override - protected void show() { + protected void show(boolean sent) { avatarImage.drawAvatar = true; avatarImage.invalidate(); } @@ -301,7 +303,7 @@ public static SourceView fromStoryViewer(StoryViewer storyViewer) { } SourceView src = new SourceView() { @Override - protected void show() { + protected void show(boolean sent) { final PeerStoriesView peerView = storyViewer.getCurrentPeerView(); if (peerView != null) { peerView.animateOut(false); @@ -338,7 +340,7 @@ public static SourceView fromFloatingButton(FrameLayout floatingButton) { } SourceView src = new SourceView() { @Override - protected void show() { + protected void show(boolean sent) { floatingButton.setVisibility(View.VISIBLE); } @Override @@ -368,7 +370,7 @@ public static SourceView fromShareCell(ShareDialogCell shareDialogCell) { BackupImageView imageView = shareDialogCell.getImageView(); SourceView src = new SourceView() { @Override - protected void show() { + protected void show(boolean sent) { imageView.setVisibility(View.VISIBLE); } @Override @@ -399,9 +401,14 @@ public static SourceView fromStoryCell(DialogStoriesCell.StoryCell storyCell) { final float radius = size / 2f; SourceView src = new SourceView() { @Override - protected void show() { + protected void show(boolean sent) { storyCell.drawAvatar = true; storyCell.invalidate(); + if (sent) { + final int[] loc = new int[2]; + storyCell.getLocationInWindow(loc); + LaunchActivity.makeRipple(loc[0] + storyCell.getWidth() / 2f, loc[1] + storyCell.getHeight() / 2f, 1f); + } } @Override @@ -456,6 +463,73 @@ public void replaceSourceView(SourceView sourceView) { previewContainer.setBackgroundColor(openType == 1 || openType == 0 ? 0 : 0xff1f1f1f); } + public void openBot(long botId, String lang_code, SourceView sourceView) { + this.botId = botId; + this.botLang = lang_code; + this.botEdit = null; + open(sourceView, true); + this.botId = botId; + this.botLang = lang_code; + } + + public void openBotEntry(long botId, String lang_code, StoryEntry entry, SourceView sourceView) { + if (isShown || entry == null) { + return; + } + + this.botId = botId; + this.botLang = lang_code; + + isReposting = false; + prepareClosing = false; + forceBackgroundVisible = false; + + if (windowManager != null && windowView != null && windowView.getParent() == null) { + windowManager.addView(windowView, windowLayoutParams); + } + + outputEntry = entry; + outputEntry.botId = botId; + outputEntry.botLang = lang_code; + isVideo = outputEntry != null && outputEntry.isVideo; + videoTextureHolder.active = false; + + if (sourceView != null) { + fromSourceView = sourceView; + openType = sourceView.type; + fromRect.set(sourceView.screenRect); + fromRounding = sourceView.rounding; + fromSourceView.hide(); + } else { + openType = 0; + fromRect.set(0, dp(100), AndroidUtilities.displaySize.x, dp(100) + AndroidUtilities.displaySize.y); + fromRounding = dp(8); + } + containerView.updateBackground(); + previewContainer.setBackgroundColor(openType == 1 || openType == 0 ? 0 : 0xff1f1f1f); + + containerView.setTranslationX(0); + containerView.setTranslationY(0); + containerView.setTranslationY2(0); + containerView.setScaleX(1f); + containerView.setScaleY(1f); + dismissProgress = 0; + + AndroidUtilities.lockOrientation(activity, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + + if (outputEntry != null) { + captionEdit.setText(outputEntry.caption); + } + + navigateTo(PAGE_PREVIEW, false); + switchToEditMode(EDIT_MODE_NONE, false); + previewButtons.appear(false, false); + + previewButtons.appear(true, true); + animateOpenTo(1, true, this::onOpenDone); + addNotificationObservers(); + } + public void open(SourceView sourceView) { open(sourceView, true); } @@ -465,6 +539,7 @@ public void open(SourceView sourceView, boolean animated) { return; } + isReposting = false; prepareClosing = false; // privacySelectorHintOpened = false; forceBackgroundVisible = false; @@ -476,9 +551,11 @@ public void open(SourceView sourceView, boolean animated) { cameraViewThumb.setImageDrawable(getCameraThumb()); - StoriesController.StoryLimit storyLimit = MessagesController.getInstance(currentAccount).getStoriesController().checkStoryLimit(); - if (storyLimit != null && storyLimit.active(currentAccount)) { - showLimitReachedSheet(storyLimit, true); + if (botId == 0) { + StoriesController.StoryLimit storyLimit = MessagesController.getInstance(currentAccount).getStoriesController().checkStoryLimit(); + if (storyLimit != null && storyLimit.active(currentAccount)) { + showLimitReachedSheet(storyLimit, true); + } } navigateTo(PAGE_CAMERA, false); @@ -510,6 +587,10 @@ public void open(SourceView sourceView, boolean animated) { animateOpenTo(1, animated, this::onOpenDone); addNotificationObservers(); + + botId = 0; + botLang = ""; + botEdit = null; } public void openEdit(SourceView sourceView, StoryEntry entry, long time, boolean animated) { @@ -517,6 +598,7 @@ public void openEdit(SourceView sourceView, StoryEntry entry, long time, boolean return; } + isReposting = false; prepareClosing = false; forceBackgroundVisible = false; @@ -559,11 +641,15 @@ public void openEdit(SourceView sourceView, StoryEntry entry, long time, boolean animateOpenTo(1, animated, this::onOpenDone); previewButtons.appear(true, true); }, time); - navigateTo(PAGE_PREVIEW, false); + navigateTo(outputEntry.isEditingCover ? PAGE_COVER : PAGE_PREVIEW, false); switchToEditMode(EDIT_MODE_NONE, false); previewButtons.appear(false, false); addNotificationObservers(); + + botId = 0; + botLang = ""; + botEdit = null; } public void openForward(SourceView sourceView, StoryEntry entry, long time, boolean animated) { @@ -571,6 +657,7 @@ public void openForward(SourceView sourceView, StoryEntry entry, long time, bool return; } + isReposting = false; prepareClosing = false; forceBackgroundVisible = false; @@ -618,6 +705,10 @@ public void openForward(SourceView sourceView, StoryEntry entry, long time, bool switchToEditMode(EDIT_MODE_NONE, false); addNotificationObservers(); + + botId = 0; + botLang = ""; + botEdit = null; } private static boolean firstOpen = true; @@ -626,6 +717,7 @@ public void openRepost(SourceView sourceView, StoryEntry entry) { return; } + isReposting = true; prepareClosing = false; forceBackgroundVisible = false; @@ -636,7 +728,14 @@ public void openRepost(SourceView sourceView, StoryEntry entry) { outputEntry = entry; StoryPrivacySelector.applySaved(currentAccount, outputEntry); isVideo = outputEntry != null && outputEntry.isVideo; - videoTextureHolder.active = isVideo; + videoTextureHolder.active = outputEntry != null && outputEntry.isRepostMessage && isVideo; + + if (botId == 0) { + StoriesController.StoryLimit storyLimit = MessagesController.getInstance(currentAccount).getStoriesController().checkStoryLimit(); + if (storyLimit != null && storyLimit.active(currentAccount)) { + showLimitReachedSheet(storyLimit, true); + } + } if (sourceView != null) { fromSourceView = sourceView; @@ -672,6 +771,10 @@ public void openRepost(SourceView sourceView, StoryEntry entry) { animateOpenTo(1, true, this::onOpenDone); addNotificationObservers(); + + botId = 0; + botLang = ""; + botEdit = null; } public void close(boolean animated) { @@ -810,6 +913,9 @@ private void onOpenDone() { actionBarContainer.setAlpha(1f); controlContainer.setAlpha(1f); windowView.setBackgroundColor(0xff000000); + if (currentPage == PAGE_COVER) { + coverButton.setAlpha(1f); + } } if (whenOpenDone != null) { @@ -857,7 +963,7 @@ private void onCloseDone() { } }, 16); if (fromSourceView != null) { - fromSourceView.show(); + fromSourceView.show(false); } if (whenOpenDone != null) { whenOpenDone = null; @@ -922,6 +1028,9 @@ private void applyOpenProgress() { actionBarContainer.setAlpha(openProgress); controlContainer.setAlpha(openProgress); captionContainer.setAlpha(openProgress); + if (currentPage == PAGE_COVER) { + coverButton.setAlpha(openProgress); + } } public class WindowView extends SizeNotifierFrameLayout { @@ -1659,6 +1768,7 @@ protected boolean drawChild(Canvas canvas, View child, long drawingTime) { public static final int PAGE_CAMERA = 0; public static final int PAGE_PREVIEW = 1; + public static final int PAGE_COVER = 2; private int currentPage = PAGE_CAMERA; public static final int EDIT_MODE_NONE = -1; @@ -1680,6 +1790,11 @@ protected boolean drawChild(Canvas canvas, View child, long drawingTime) { private PreviewView.TextureViewHolder videoTextureHolder; private View captionEditOverlay; + private boolean isReposting; + private long botId; + private String botLang; + private TLRPC.InputMedia botEdit; + /* PAGE_CAMERA */ private ImageView cameraViewThumb; private DualCameraView cameraView; @@ -1722,6 +1837,10 @@ protected boolean drawChild(Canvas canvas, View child, long drawingTime) { private TrashView trash; private RoundVideoRecorder currentRoundRecorder; + /* PAGE_COVER */ + private TimelineView coverTimelineView; + private ButtonWithCounterView coverButton; + /* EDIT_MODE_PAINT */ private PaintView paintView; private RenderView paintViewRenderView; @@ -1740,6 +1859,7 @@ protected boolean drawChild(Canvas canvas, View child, long drawingTime) { private File outputFile; private StoryEntry outputEntry; private boolean fromGallery; + private long coverValue; private boolean videoError; @@ -2014,6 +2134,13 @@ protected void invalidateTextureViewHolder() { } } } + + @Override + public void onAudioChanged() { + if (paintView != null) { + paintView.setHasAudio(outputEntry != null && outputEntry.audioPath != null); + } + } }; previewView.invalidateBlur = this::invalidateBlur; previewView.setOnTapListener(() -> { @@ -2063,6 +2190,11 @@ protected boolean ignoreTouches(float x, float y) { return false; } + @Override + public void setVisibility(int visibility) { + super.setVisibility(visibility); + } + @Override protected void drawBlurBitmap(Bitmap bitmap, float amount) { windowView.drawBlurBitmap(bitmap, amount); @@ -2101,7 +2233,7 @@ public void onClick(@NonNull View widget) { }, startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } } - Bulletin bulletin = BulletinFactory.of(captionContainer, resourcesProvider).createSimpleBulletin(R.raw.caption_limit, LocaleController.getString("CaptionPremiumTitle"), text); + Bulletin bulletin = BulletinFactory.of(captionContainer, resourcesProvider).createSimpleBulletin(R.raw.caption_limit, getString("CaptionPremiumTitle"), text); bulletin.tag = 2; bulletin.setDuration(5000); bulletin.show(false); @@ -2270,8 +2402,14 @@ protected void dispatchDraw(Canvas canvas) { captionContainer.addView(videoTimelineContainerView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, TimelineView.heightDp() + 25, Gravity.FILL_HORIZONTAL | Gravity.BOTTOM, 0, 0, 0, 68)); captionContainer.addView(captionEdit, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL_HORIZONTAL | Gravity.BOTTOM, 0, 200, 0, 0)); + coverTimelineView = new TimelineView(context, containerView, previewContainer, resourcesProvider, blurManager); + coverTimelineView.setCover(); + coverTimelineView.setVisibility(View.GONE); + coverTimelineView.setAlpha(0f); + captionContainer.addView(coverTimelineView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, TimelineView.heightDp(), Gravity.FILL_HORIZONTAL | Gravity.BOTTOM, 0, 0, 0, 6)); + backButton = new FlashViews.ImageViewInvertable(context); - backButton.setContentDescription(LocaleController.getString("AccDescrGoBack", R.string.AccDescrGoBack)); + backButton.setContentDescription(getString("AccDescrGoBack", R.string.AccDescrGoBack)); backButton.setScaleType(ImageView.ScaleType.CENTER); backButton.setImageResource(R.drawable.msg_photo_back); backButton.setColorFilter(new PorterDuffColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY)); @@ -2290,7 +2428,7 @@ protected void dispatchDraw(Canvas canvas) { titleTextView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); titleTextView.setTextColor(0xffffffff); titleTextView.setTypeface(AndroidUtilities.bold()); - titleTextView.setText(LocaleController.getString("RecorderNewStory", R.string.RecorderNewStory)); + titleTextView.setText(getString(R.string.RecorderNewStory)); titleTextView.getPaint().setShadowLayer(dpf2(1), 0, 1, 0x40000000); titleTextView.setAlpha(0f); titleTextView.setVisibility(View.GONE); @@ -2331,8 +2469,8 @@ protected void dispatchDraw(Canvas canvas) { final boolean hasRound = outputEntry.round != null; muteHint.setText( outputEntry.muted ? - LocaleController.getString(hasMusic || hasRound ? R.string.StoryOriginalSoundMuted : R.string.StorySoundMuted) : - LocaleController.getString(hasMusic || hasRound ? R.string.StoryOriginalSoundNotMuted : R.string.StorySoundNotMuted), + getString(hasMusic || hasRound ? R.string.StoryOriginalSoundMuted : R.string.StorySoundMuted) : + getString(hasMusic || hasRound ? R.string.StoryOriginalSoundNotMuted : R.string.StorySoundNotMuted), muteHint.shown() ); muteHint.show(); @@ -2435,7 +2573,7 @@ protected void dispatchDraw(Canvas canvas) { .setJoint(1, -20) .setDuration(5000) .setCloseButton(true) - .setText(LocaleController.getString(R.string.StoryCameraDualHint)) + .setText(getString(R.string.StoryCameraDualHint)) .setOnHiddenListener(() -> MessagesController.getGlobalMainSettings().edit().putInt("storydualhint", MessagesController.getGlobalMainSettings().getInt("storydualhint", 0) + 1).apply()); dualHint.setPadding(dp(8), 0, dp(8), 0); actionBarContainer.addView(dualHint, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.TOP, 0, 52, 0, 0)); @@ -2463,7 +2601,7 @@ protected void dispatchDraw(Canvas canvas) { cameraHint = new HintView2(activity, HintView2.DIRECTION_BOTTOM) .setMultilineText(true) - .setText(LocaleController.getString(R.string.StoryCameraHint2)) + .setText(getString(R.string.StoryCameraHint2)) .setMaxWidth(320) .setDuration(5000L) .setTextAlign(Layout.Alignment.ALIGN_CENTER); @@ -2502,6 +2640,33 @@ protected void dispatchDraw(Canvas canvas) { navbarContainer.addView(hintTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 32, Gravity.CENTER, 8, 0, 8, 8)); flashViews.add(hintTextView); + coverButton = new ButtonWithCounterView(context, resourcesProvider); + coverButton.setVisibility(View.GONE); + coverButton.setAlpha(0f); + coverButton.setText(LocaleController.getString(R.string.StoryCoverSave), false); + coverButton.setOnClickListener(v -> { + if (outputEntry == null) { + return; + } + outputEntry.coverSet = true; + outputEntry.cover = coverValue; + processDone(); + if (outputEntry != null && !outputEntry.isEditingCover) { + AndroidUtilities.runOnUIThread(() -> { + if (!outputEntry.isEditingCover && privacySheet != null && previewView != null) { + previewView.getCoverBitmap(bitmap -> { + AndroidUtilities.recycleBitmap(outputEntry.coverBitmap); + outputEntry.coverBitmap = bitmap; + if (privacySheet == null) return; + privacySheet.setCover(outputEntry.coverBitmap); + }, previewView, paintViewRenderView, paintViewEntitiesView); + } + navigateTo(PAGE_PREVIEW, true); + }, 400); + } + }); + navbarContainer.addView(coverButton, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.FILL, 10, 10, 10, 10)); + previewButtons = new PreviewButtons(context); previewButtons.setVisibility(View.GONE); previewButtons.setOnClickListener((Integer btn) -> { @@ -2510,91 +2675,7 @@ protected void dispatchDraw(Canvas canvas) { } captionEdit.clearFocus(); if (btn == PreviewButtons.BUTTON_SHARE) { - if (privacySheet != null) { - privacySheet.dismiss(); - privacySheet = null; - } - if (videoError) { - downloadButton.showFailedVideo(); - BotWebViewVibrationEffect.APP_ERROR.vibrate(); - AndroidUtilities.shakeViewSpring(previewButtons.shareButton, shiftDp = -shiftDp); - return; - } - if (captionEdit != null && captionEdit.isCaptionOverLimit()) { - BotWebViewVibrationEffect.APP_ERROR.vibrate(); - AndroidUtilities.shakeViewSpring(captionEdit.limitTextView, shiftDp = -shiftDp); - captionEdit.captionLimitToast(); - return; - } - if (!outputEntry.isEdit) { - StoriesController.StoryLimit storyLimit = MessagesController.getInstance(currentAccount).storiesController.checkStoryLimit(); - if (storyLimit != null && storyLimit.active(currentAccount)) { - showLimitReachedSheet(storyLimit, false); - return; - } - } - outputEntry.captionEntitiesAllowed = MessagesController.getInstance(currentAccount).storyEntitiesAllowed(); - if (captionEdit != null && !outputEntry.captionEntitiesAllowed) { - CharSequence text = captionEdit.getText(); - if (text instanceof Spannable && ( - ((Spannable) text).getSpans(0, text.length(), TextStyleSpan.class).length > 0 || - ((Spannable) text).getSpans(0, text.length(), URLSpan.class).length > 0 - )) { - BulletinFactory.of(windowView, resourcesProvider).createSimpleBulletin(R.raw.voip_invite, premiumText(LocaleController.getString("StoryPremiumFormatting", R.string.StoryPremiumFormatting))).show(true); - AndroidUtilities.shakeViewSpring(captionEdit, shiftDp = -shiftDp); - return; - } - } - if (outputEntry.isEdit) { - outputEntry.editedPrivacy = false; - applyFilter(null); - upload(true); - } else { - if (selectedDialogId != 0) { - outputEntry.peer = MessagesController.getInstance(currentAccount).getInputPeer(selectedDialogId); - } - previewView.updatePauseReason(3, true); - privacySheet = new StoryPrivacyBottomSheet(activity, outputEntry.period, resourcesProvider) - .setValue(outputEntry.privacy) - .setPeer(outputEntry.peer) - .setCanChangePeer(canChangePeer) - .whenDismiss(privacy -> { - if (outputEntry != null) { - outputEntry.privacy = privacy; - } - }) - .isEdit(false) - .setWarnUsers(getUsersFrom(captionEdit.getText())) - .whenSelectedPeer(peer -> { - if (outputEntry == null) { - return; - } - outputEntry.peer = peer == null ? new TLRPC.TL_inputPeerSelf() : peer; - }) - .whenSelectedRules((privacy, allowScreenshots, keepInProfile, sendAs, whenDone) -> { - if (outputEntry == null) { - return; - } - previewView.updatePauseReason(5, true); - outputEntry.privacy = privacy; - StoryPrivacySelector.save(currentAccount, outputEntry.privacy); - outputEntry.pinned = keepInProfile; - outputEntry.allowScreenshots = allowScreenshots; - outputEntry.privacyRules.clear(); - outputEntry.privacyRules.addAll(privacy.rules); - outputEntry.editedPrivacy = true; - outputEntry.peer = sendAs; - applyFilter(() -> { - whenDone.run(); - upload(true); - }); - }, false); - privacySheet.setOnDismissListener(di -> { - previewView.updatePauseReason(3, false); - privacySheet = null; - }); - privacySheet.show(); - } + processDone(); } else if (btn == PreviewButtons.BUTTON_PAINT) { switchToEditMode(EDIT_MODE_PAINT, true); if (paintView != null) { @@ -2628,6 +2709,113 @@ protected void dispatchDraw(Canvas canvas) { previewContainer.addView(previewHighlight, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL)); } + private void processDone() { + if (privacySheet != null) { + privacySheet.dismiss(); + privacySheet = null; + } + if (videoError) { + downloadButton.showFailedVideo(); + BotWebViewVibrationEffect.APP_ERROR.vibrate(); + AndroidUtilities.shakeViewSpring(previewButtons.shareButton, shiftDp = -shiftDp); + return; + } + if (captionEdit != null && captionEdit.isCaptionOverLimit()) { + BotWebViewVibrationEffect.APP_ERROR.vibrate(); + AndroidUtilities.shakeViewSpring(captionEdit.limitTextView, shiftDp = -shiftDp); + captionEdit.captionLimitToast(); + return; + } + if (outputEntry == null || !outputEntry.isEdit && outputEntry.botId == 0) { + StoriesController.StoryLimit storyLimit = MessagesController.getInstance(currentAccount).storiesController.checkStoryLimit(); + if (storyLimit != null && storyLimit.active(currentAccount)) { + showLimitReachedSheet(storyLimit, false); + return; + } + } + outputEntry.captionEntitiesAllowed = MessagesController.getInstance(currentAccount).storyEntitiesAllowed(); + if (captionEdit != null && !outputEntry.captionEntitiesAllowed) { + CharSequence text = captionEdit.getText(); + if (text instanceof Spannable && ( + ((Spannable) text).getSpans(0, text.length(), TextStyleSpan.class).length > 0 || + ((Spannable) text).getSpans(0, text.length(), URLSpan.class).length > 0 + )) { + BulletinFactory.of(windowView, resourcesProvider).createSimpleBulletin(R.raw.voip_invite, premiumText(getString("StoryPremiumFormatting", R.string.StoryPremiumFormatting))).show(true); + AndroidUtilities.shakeViewSpring(captionEdit, shiftDp = -shiftDp); + return; + } + } + if (outputEntry.isEdit || outputEntry.botId != 0) { + outputEntry.editedPrivacy = false; + applyFilter(null); + upload(true); + } else { + if (selectedDialogId != 0) { + outputEntry.peer = MessagesController.getInstance(currentAccount).getInputPeer(selectedDialogId); + } + previewView.updatePauseReason(3, true); + privacySheet = new StoryPrivacyBottomSheet(activity, outputEntry.period, resourcesProvider) + .setValue(outputEntry.privacy) + .setPeer(outputEntry.peer) + .setCanChangePeer(canChangePeer) + .whenDismiss(privacy -> { + if (outputEntry != null) { + outputEntry.privacy = privacy; + } + }) + .isEdit(false) + .setWarnUsers(getUsersFrom(captionEdit.getText())) + .whenSelectedPeer(peer -> { + if (outputEntry == null) { + return; + } + outputEntry.peer = peer == null ? new TLRPC.TL_inputPeerSelf() : peer; + }) + .whenSelectedRules((privacy, allowScreenshots, keepInProfile, sendAs, whenDone) -> { + if (outputEntry == null) { + return; + } + previewView.updatePauseReason(5, true); + outputEntry.privacy = privacy; + StoryPrivacySelector.save(currentAccount, outputEntry.privacy); + outputEntry.pinned = keepInProfile; + outputEntry.allowScreenshots = allowScreenshots; + outputEntry.privacyRules.clear(); + outputEntry.privacyRules.addAll(privacy.rules); + outputEntry.editedPrivacy = true; + outputEntry.peer = sendAs; + applyFilter(() -> { + whenDone.run(); + upload(true); + }); + }, false); + if (outputEntry.isVideo) { + if (previewView != null && !outputEntry.coverSet && currentPage != PAGE_COVER) { + outputEntry.cover = previewView.getCurrentPosition(); + previewView.getCoverBitmap(bitmap -> { + if (outputEntry.coverBitmap != null) { + outputEntry.coverBitmap.recycle(); + } + outputEntry.coverBitmap = bitmap; + if (privacySheet == null) return; + privacySheet.setCover(outputEntry.coverBitmap); + }, previewView, paintViewRenderView, paintViewEntitiesView); + } + privacySheet.setCover(outputEntry.coverBitmap, () -> { + if (privacySheet != null) { + privacySheet.dismiss(); + } + navigateTo(PAGE_COVER, true); + }); + } + privacySheet.setOnDismissListener(di -> { + previewView.updatePauseReason(3, false); + privacySheet = null; + }); + privacySheet.show(); + } + } + private Bitmap getUiBlurBitmap() { Bitmap blur = null; if (photoFilterView != null) { @@ -2739,7 +2927,7 @@ private void uploadInternal(boolean asStory) { Runnable runnable = () -> { if (asStory) { if (fromSourceView != null) { - fromSourceView.show(); + fromSourceView.show(true); fromSourceView = null; } if (closeListener != null) { @@ -2900,16 +3088,16 @@ private void setCameraFlashModeIcon(String mode, boolean animated) { switch (mode) { case Camera.Parameters.FLASH_MODE_ON: resId = R.drawable.media_photo_flash_on2; - flashButton.setContentDescription(LocaleController.getString("AccDescrCameraFlashOn", R.string.AccDescrCameraFlashOn)); + flashButton.setContentDescription(getString("AccDescrCameraFlashOn", R.string.AccDescrCameraFlashOn)); break; case Camera.Parameters.FLASH_MODE_AUTO: resId = R.drawable.media_photo_flash_auto2; - flashButton.setContentDescription(LocaleController.getString("AccDescrCameraFlashAuto", R.string.AccDescrCameraFlashAuto)); + flashButton.setContentDescription(getString("AccDescrCameraFlashAuto", R.string.AccDescrCameraFlashAuto)); break; default: case Camera.Parameters.FLASH_MODE_OFF: resId = R.drawable.media_photo_flash_off2; - flashButton.setContentDescription(LocaleController.getString("AccDescrCameraFlashOff", R.string.AccDescrCameraFlashOff)); + flashButton.setContentDescription(getString("AccDescrCameraFlashOff", R.string.AccDescrCameraFlashOff)); break; } flashButton.setIcon(flashButtonResId = resId, animated && flashButtonResId != resId); @@ -2998,6 +3186,10 @@ private void takePicture(Utilities.Callback<Runnable> done) { rotate = 0; } outputEntry = StoryEntry.fromPhotoShoot(outputFile, rotate); + if (outputEntry != null) { + outputEntry.botId = botId; + outputEntry.botLang = botLang; + } StoryPrivacySelector.applySaved(currentAccount, outputEntry); fromGallery = false; @@ -3010,6 +3202,10 @@ private void takePicture(Utilities.Callback<Runnable> done) { } else { takingPhoto = false; outputEntry = StoryEntry.fromPhotoShoot(outputFile, 0); + if (outputEntry != null) { + outputEntry.botId = botId; + outputEntry.botLang = botLang; + } StoryPrivacySelector.applySaved(currentAccount, outputEntry); fromGallery = false; @@ -3097,6 +3293,10 @@ private void startRecording(boolean byLongPress, Runnable whenStarted) { showVideoTimer(false, true); outputEntry = StoryEntry.fromVideoShoot(outputFile, thumbPath, duration); + if (outputEntry != null) { + outputEntry.botId = botId; + outputEntry.botLang = botLang; + } StoryPrivacySelector.applySaved(currentAccount, outputEntry); fromGallery = false; int width = cameraView.getVideoWidth(), height = cameraView.getVideoHeight(); @@ -3111,7 +3311,7 @@ private void startRecording(boolean byLongPress, Runnable whenStarted) { }, () /* onVideoStart */ -> { whenStarted.run(); - hintTextView.setText(byLongPress ? LocaleController.getString("StoryHintSwipeToZoom", R.string.StoryHintSwipeToZoom) : LocaleController.getString("StoryHintPinchToZoom", R.string.StoryHintPinchToZoom), false); + hintTextView.setText(byLongPress ? getString("StoryHintSwipeToZoom", R.string.StoryHintSwipeToZoom) : getString("StoryHintPinchToZoom", R.string.StoryHintPinchToZoom), false); animateRecording(true, true); setAwakeLock(true); @@ -3129,7 +3329,7 @@ private void startRecording(boolean byLongPress, Runnable whenStarted) { @Override public void onVideoRecordLocked() { - hintTextView.setText(LocaleController.getString("StoryHintPinchToZoom", R.string.StoryHintPinchToZoom), true); + hintTextView.setText(getString("StoryHintPinchToZoom", R.string.StoryHintPinchToZoom), true); } @Override @@ -3411,15 +3611,23 @@ public boolean onBackPressed() { } else if (currentEditMode > EDIT_MODE_NONE) { switchToEditMode(EDIT_MODE_NONE, true); return false; - } else if (currentPage == PAGE_PREVIEW && (outputEntry == null || !outputEntry.isRepost && !outputEntry.isRepostMessage) && (outputEntry == null || !outputEntry.isEdit || (paintView != null && paintView.hasChanges()) || outputEntry.editedMedia || outputEntry.editedCaption)) { + } else if (currentPage == PAGE_PREVIEW && (outputEntry == null || !outputEntry.isRepost && !outputEntry.isRepostMessage) && !isReposting && (outputEntry == null || !outputEntry.isEdit || (paintView != null && paintView.hasChanges()) || outputEntry.editedMedia || outputEntry.editedCaption)) { if (paintView != null && paintView.onBackPressed()) { return false; - } else if ((fromGallery && (paintView == null || !paintView.hasChanges()) && (outputEntry == null || outputEntry.filterFile == null) || !previewButtons.isShareEnabled()) && (outputEntry == null || !outputEntry.isEdit || !outputEntry.isRepost && !outputEntry.isRepostMessage)) { + } else if (botId == 0 && (fromGallery && (paintView == null || !paintView.hasChanges()) && (outputEntry == null || outputEntry.filterFile == null) || !previewButtons.isShareEnabled()) && (outputEntry == null || !outputEntry.isEdit || !outputEntry.isRepost && !outputEntry.isRepostMessage) && !isReposting) { navigateTo(PAGE_CAMERA, true); } else { - showDismissEntry(); + if (botId != 0) { + close(true); + } else { + showDismissEntry(); + } } return false; + } else if (currentPage == PAGE_COVER && !(outputEntry == null || outputEntry.isEditingCover)) { + processDone(); + navigateTo(PAGE_PREVIEW, true); + return false; } else { close(true); return true; @@ -3444,7 +3652,7 @@ private void setReply() { } CharSequence repostCaption = outputEntry.repostCaption; if (TextUtils.isEmpty(repostCaption)) { - SpannableString s = new SpannableString(LocaleController.getString(R.string.Story)); + SpannableString s = new SpannableString(getString(R.string.Story)); s.setSpan(new CharacterStyle() { @Override public void updateDrawState(TextPaint tp) { @@ -3516,7 +3724,7 @@ public void navigateTo(int page, boolean animated) { } cameraViewThumb.setVisibility(View.VISIBLE); animators.add(ObjectAnimator.ofFloat(cameraViewThumb, View.ALPHA, page == PAGE_CAMERA ? 1 : 0)); - animators.add(ObjectAnimator.ofFloat(previewView, View.ALPHA, page == PAGE_PREVIEW ? 1 : 0)); + animators.add(ObjectAnimator.ofFloat(previewView, View.ALPHA, page == PAGE_PREVIEW || page == PAGE_COVER ? 1 : 0)); animators.add(ObjectAnimator.ofFloat(recordControl, View.ALPHA, page == PAGE_CAMERA ? 1 : 0)); animators.add(ObjectAnimator.ofFloat(flashButton, View.ALPHA, page == PAGE_CAMERA ? 1 : 0)); @@ -3527,11 +3735,14 @@ public void navigateTo(int page, boolean animated) { backButton.setVisibility(View.VISIBLE); animators.add(ObjectAnimator.ofFloat(backButton, View.ALPHA, 1)); animators.add(ObjectAnimator.ofFloat(hintTextView, View.ALPHA, page == PAGE_CAMERA && animatedRecording ? 1 : 0)); - animators.add(ObjectAnimator.ofFloat(captionContainer, View.ALPHA, page == PAGE_PREVIEW ? 1f : 0)); - animators.add(ObjectAnimator.ofFloat(captionContainer, View.TRANSLATION_Y, page == PAGE_PREVIEW ? 0 : dp(12))); - animators.add(ObjectAnimator.ofFloat(titleTextView, View.ALPHA, page == PAGE_PREVIEW ? 1f : 0)); + animators.add(ObjectAnimator.ofFloat(captionContainer, View.ALPHA, page == PAGE_PREVIEW && (outputEntry == null || outputEntry.botId == 0) || page == PAGE_COVER ? 1f : 0)); + animators.add(ObjectAnimator.ofFloat(captionContainer, View.TRANSLATION_Y, page == PAGE_PREVIEW && (outputEntry == null || outputEntry.botId == 0) || page == PAGE_COVER ? 0 : dp(12))); + animators.add(ObjectAnimator.ofFloat(captionEdit, View.ALPHA, page == PAGE_COVER ? 0f : 1f)); + animators.add(ObjectAnimator.ofFloat(titleTextView, View.ALPHA, page == PAGE_PREVIEW || page == PAGE_COVER ? 1f : 0)); + animators.add(ObjectAnimator.ofFloat(coverButton, View.ALPHA, page == PAGE_COVER ? 1f : 0f)); animators.add(ObjectAnimator.ofFloat(timelineView, View.ALPHA, page == PAGE_PREVIEW ? 1f : 0)); + animators.add(ObjectAnimator.ofFloat(coverTimelineView, View.ALPHA, page == PAGE_COVER ? 1f : 0)); animators.add(ObjectAnimator.ofFloat(muteButton, View.ALPHA, page == PAGE_PREVIEW && isVideo ? 1f : 0)); animators.add(ObjectAnimator.ofFloat(playButton, View.ALPHA, page == PAGE_PREVIEW && (isVideo || outputEntry != null && !TextUtils.isEmpty(outputEntry.audioPath)) ? 1f : 0)); @@ -3559,7 +3770,7 @@ public void onAnimationEnd(Animator animation) { } cameraViewThumb.setAlpha(page == PAGE_CAMERA ? 1f : 0); cameraViewThumb.setVisibility(page == PAGE_CAMERA ? View.VISIBLE : View.GONE); - previewView.setAlpha(page == PAGE_PREVIEW ? 1f : 0); + previewView.setAlpha(page == PAGE_PREVIEW || page == PAGE_COVER ? 1f : 0); flashButton.setAlpha(page == PAGE_CAMERA ? 1f : 0); dualButton.setAlpha(page == PAGE_CAMERA && cameraView != null && cameraView.dualAvailable() ? 1f : 0); recordControl.setAlpha(page == PAGE_CAMERA ? 1f : 0); @@ -3569,8 +3780,9 @@ public void onAnimationEnd(Animator animation) { backButton.setVisibility(View.VISIBLE); backButton.setAlpha(1f); hintTextView.setAlpha(page == PAGE_CAMERA && animatedRecording ? 1f : 0); - captionContainer.setAlpha(page == PAGE_PREVIEW ? 1f : 0); - captionContainer.setTranslationY(page == PAGE_PREVIEW ? 0 : dp(12)); + captionContainer.setAlpha(page == PAGE_PREVIEW || page == PAGE_COVER ? 1f : 0); + captionContainer.setTranslationY(page == PAGE_PREVIEW || page == PAGE_COVER ? 0 : dp(12)); + captionEdit.setAlpha(page == PAGE_COVER ? 0f : 1f); muteButton.setAlpha(page == PAGE_PREVIEW && isVideo ? 1f : 0); playButton.setAlpha(page == PAGE_PREVIEW && (isVideo || outputEntry != null && !TextUtils.isEmpty(outputEntry.audioPath)) ? 1f : 0); downloadButton.setAlpha(page == PAGE_PREVIEW ? 1f : 0); @@ -3579,7 +3791,9 @@ public void onAnimationEnd(Animator animation) { } // privacySelector.setAlpha(page == PAGE_PREVIEW ? 1f : 0); timelineView.setAlpha(page == PAGE_PREVIEW ? 1f : 0); - titleTextView.setAlpha(page == PAGE_PREVIEW ? 1f : 0f); + coverTimelineView.setAlpha(page == PAGE_COVER ? 1f : 0f); + titleTextView.setAlpha(page == PAGE_PREVIEW || page == PAGE_COVER ? 1f : 0f); + coverButton.setAlpha(page == PAGE_COVER ? 1f : 0f); onNavigateEnd(oldPage, page); } } @@ -3728,6 +3942,7 @@ public boolean dispatchTouchEvent(MotionEvent ev) { MediaController.PhotoEntry photoEntry = (MediaController.PhotoEntry) entry; isVideo = photoEntry.isVideo; outputEntry = StoryEntry.fromPhotoEntry(photoEntry); + StoryPrivacySelector.applySaved(currentAccount, outputEntry); outputEntry.blurredVideoThumb = blurredBitmap; fromGallery = true; @@ -3745,6 +3960,12 @@ public boolean dispatchTouchEvent(MotionEvent ev) { fromGallery = false; } + if (outputEntry != null) { + outputEntry.botId = botId; + outputEntry.botLang = botLang; + outputEntry.setupMatrix(); + } + showVideoTimer(false, true); modeSwitcherView.switchMode(isVideo); recordControl.startAsVideo(isVideo); @@ -3925,6 +4146,10 @@ private void onNavigateStart(int fromPage, int toPage) { // privacySelector.setVisibility(View.VISIBLE); previewButtons.setVisibility(View.VISIBLE); previewView.setVisibility(View.VISIBLE); + captionEdit.setVisibility(isBot() ? View.GONE : View.VISIBLE); + FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) videoTimelineContainerView.getLayoutParams(); + lp.bottomMargin = isBot() ? dp(12) : dp(68); + videoTimelineContainerView.setLayoutParams(lp); captionContainer.setVisibility(View.VISIBLE); captionContainer.clearFocus(); @@ -3934,9 +4159,25 @@ private void onNavigateStart(int fromPage, int toPage) { captionEdit.setHasRoundVideo(outputEntry != null && outputEntry.round != null); setReply(); } + if (toPage == PAGE_COVER || fromPage == PAGE_COVER) { + titleTextView.setVisibility(View.VISIBLE); + coverTimelineView.setVisibility(View.VISIBLE); + if (outputEntry != null && outputEntry.isEditingCover) { + titleTextView.setText(getString(R.string.RecorderEditCover)); + } + captionContainer.setVisibility(View.VISIBLE); + coverButton.setVisibility(View.VISIBLE); + } + if (toPage == PAGE_COVER) { + titleTextView.setText(getString(R.string.RecorderEditCover)); + } if (toPage == PAGE_PREVIEW) { videoError = false; - previewButtons.setShareText(outputEntry != null && outputEntry.isEdit ? LocaleController.getString("Done", R.string.Done) : LocaleController.getString("Next", R.string.Next)); + final boolean isBot = outputEntry != null && outputEntry.botId != 0; + final boolean isEdit = outputEntry != null && outputEntry.isEdit; + previewButtons.setShareText(getString(isEdit ? R.string.Done : isBot ? R.string.UploadBotPreview : R.string.Next), !isBot); + coverTimelineView.setVisibility(View.GONE); + coverButton.setVisibility(View.GONE); // privacySelector.set(outputEntry, false); if (!previewAlreadySet) { if (outputEntry != null && outputEntry.isRepostMessage) { @@ -3947,9 +4188,9 @@ private void onNavigateStart(int fromPage, int toPage) { } previewAlreadySet = false; captionEdit.editText.getEditText().setOnPremiumMenuLockClickListener(MessagesController.getInstance(currentAccount).storyEntitiesAllowed() ? null : () -> { - BulletinFactory.of(windowView, resourcesProvider).createSimpleBulletin(R.raw.voip_invite, premiumText(LocaleController.getString("StoryPremiumFormatting", R.string.StoryPremiumFormatting))).show(true); + BulletinFactory.of(windowView, resourcesProvider).createSimpleBulletin(R.raw.voip_invite, premiumText(getString("StoryPremiumFormatting", R.string.StoryPremiumFormatting))).show(true); }); - if (outputEntry != null && (outputEntry.isDraft || outputEntry.isEdit)) { + if (outputEntry != null && (outputEntry.isDraft || outputEntry.isEdit || isReposting)) { if (outputEntry.paintFile != null) { destroyPhotoPaintView(); createPhotoPaintView(); @@ -3974,16 +4215,18 @@ private void onNavigateStart(int fromPage, int toPage) { captionEdit.clear(); } previewButtons.setFiltersVisible(outputEntry == null || !outputEntry.isRepostMessage || outputEntry.isVideo); - previewButtons.setShareEnabled(!videoError && !captionEdit.isCaptionOverLimit() && (!MessagesController.getInstance(currentAccount).getStoriesController().hasStoryLimit() || (outputEntry != null && outputEntry.isEdit))); + previewButtons.setShareEnabled(!videoError && !captionEdit.isCaptionOverLimit() && (!MessagesController.getInstance(currentAccount).getStoriesController().hasStoryLimit() || (outputEntry != null && (outputEntry.isEdit || outputEntry.botId != 0)))); muteButton.setImageResource(outputEntry != null && outputEntry.muted ? R.drawable.media_unmute : R.drawable.media_mute); previewView.setVisibility(View.VISIBLE); timelineView.setVisibility(View.VISIBLE); titleTextView.setVisibility(View.VISIBLE); titleTextView.setTranslationX(0); - if (outputEntry != null && outputEntry.isEdit) { - titleTextView.setText(LocaleController.getString(R.string.RecorderEditStory)); + if (outputEntry != null && outputEntry.botId != 0) { + titleTextView.setText(""); + } else if (outputEntry != null && outputEntry.isEdit) { + titleTextView.setText(getString(R.string.RecorderEditStory)); } else if (outputEntry != null && outputEntry.isRepostMessage) { - titleTextView.setText(LocaleController.getString(R.string.RecorderRepost)); + titleTextView.setText(getString(R.string.RecorderRepost)); } else if (outputEntry != null && outputEntry.isRepost) { SpannableStringBuilder title = new SpannableStringBuilder(); AvatarSpan span = new AvatarSpan(titleTextView, currentAccount, 32); @@ -4003,7 +4246,7 @@ private void onNavigateStart(int fromPage, int toPage) { } titleTextView.setText(title); } else { - titleTextView.setText(LocaleController.getString(R.string.RecorderNewStory)); + titleTextView.setText(getString(R.string.RecorderNewStory)); } // MediaDataController.getInstance(currentAccount).checkStickers(MediaDataController.TYPE_EMOJIPACKS); @@ -4014,6 +4257,41 @@ private void onNavigateStart(int fromPage, int toPage) { captionEdit.hidePeriodPopup(); muteHint.hide(); } + if (toPage == PAGE_COVER) { + if (outputEntry != null) { + if (outputEntry.cover < 0) { + outputEntry.cover = 0; + } + coverValue = outputEntry.cover; + long duration = previewView.getDuration() < 100 ? outputEntry.duration : previewView.getDuration(); + if (outputEntry.duration <= 0) { + outputEntry.duration = duration; + } + coverTimelineView.setVideo(false, outputEntry.getOriginalFile().getAbsolutePath(), outputEntry.duration, outputEntry.videoVolume); + coverTimelineView.setCoverVideo((long) (outputEntry.left * duration), (long) (outputEntry.right * duration)); + final Utilities.Callback2<Boolean, Float> videoLeftSet = (start, left) -> { + final long _duration = previewView.getDuration() < 100 ? outputEntry.duration : previewView.getDuration(); + coverValue = (long) ((left + 0.04f * (left / (1f - 0.04f))) * (outputEntry.right - outputEntry.left) * _duration); + previewView.seekTo(coverValue = (long) (outputEntry.left * _duration + coverValue), false); + if (paintView != null) { + paintView.setCoverTime(coverValue); + } + if (outputEntry != null && outputEntry.isEdit) { + outputEntry.editedMedia = true; + } + }; + coverTimelineView.setDelegate(new TimelineView.TimelineDelegate() { + @Override + public void onVideoLeftChange(float left) { + videoLeftSet.run(false, left); + } + }); + float left = (float) coverValue / Math.max(1, duration) * (1f - 0.04f); + coverTimelineView.setVideoLeft(left); + coverTimelineView.setVideoRight(left + 0.04f); + videoLeftSet.run(true, left); + } + } if (photoFilterEnhanceView != null) { photoFilterEnhanceView.setAllowTouch(false); } @@ -4030,6 +4308,9 @@ private void onNavigateStart(int fromPage, int toPage) { if (previewView != null) { previewView.updatePauseReason(8, toPage != PAGE_PREVIEW); } + if (paintView != null) { + paintView.setCoverPreview(toPage != PAGE_PREVIEW); + } } private void onNavigateEnd(int fromPage, int toPage) { @@ -4043,10 +4324,15 @@ private void onNavigateEnd(int fromPage, int toPage) { setAwakeLock(false); } cameraViewThumb.setClickable(toPage == PAGE_CAMERA); + if (fromPage == PAGE_COVER) { + coverTimelineView.setVisibility(View.GONE); + captionContainer.setVisibility(toPage == PAGE_PREVIEW ? View.VISIBLE : View.GONE); + captionEdit.setVisibility(View.GONE); + coverButton.setVisibility(View.GONE); + } if (fromPage == PAGE_PREVIEW) { previewButtons.setVisibility(View.GONE); - previewView.setVisibility(View.GONE); - captionContainer.setVisibility(View.GONE); + captionContainer.setVisibility(toPage == PAGE_COVER ? View.VISIBLE : View.GONE); muteButton.setVisibility(View.GONE); playButton.setVisibility(View.GONE); downloadButton.setVisibility(View.GONE); @@ -4054,11 +4340,13 @@ private void onNavigateEnd(int fromPage, int toPage) { themeButton.setVisibility(View.GONE); } // privacySelector.setVisibility(View.GONE); - previewView.setVisibility(View.GONE); + previewView.setVisibility(toPage == PAGE_COVER ? View.VISIBLE : View.GONE); timelineView.setVisibility(View.GONE); - destroyPhotoPaintView(); - destroyPhotoFilterView(); - titleTextView.setVisibility(View.GONE); + if (toPage != PAGE_COVER) { + destroyPhotoPaintView(); + destroyPhotoFilterView(); + } + titleTextView.setVisibility(toPage == PAGE_COVER ? View.VISIBLE : View.GONE); destroyGalleryListView(); trash.setAlpha(0f); trash.setVisibility(View.GONE); @@ -4083,6 +4371,7 @@ private void onNavigateEnd(int fromPage, int toPage) { videoTimeView.setVisibility(outputEntry != null && outputEntry.duration >= 30_000 ? View.VISIBLE : View.GONE); captionContainer.setAlpha(1f); captionContainer.setTranslationY(0); + captionEdit.setVisibility(outputEntry != null && outputEntry.botId != 0 ? View.GONE : View.VISIBLE); } if (toPage == PAGE_CAMERA && showSavedDraftHint) { getDraftSavedHint().setVisibility(View.VISIBLE); @@ -4179,7 +4468,7 @@ public void switchToEditMode(int editMode, boolean animated) { // animators.add(ObjectAnimator.ofFloat(privacySelector, View.ALPHA, editMode == EDIT_MODE_NONE ? 1 : 0)); // animators.add(ObjectAnimator.ofFloat(videoTimelineView, View.ALPHA, currentPage == PAGE_PREVIEW && isVideo && editMode == EDIT_MODE_NONE ? 1f : 0f)); - animators.add(ObjectAnimator.ofFloat(titleTextView, View.ALPHA, currentPage == PAGE_PREVIEW && editMode == EDIT_MODE_NONE ? 1f : 0f)); + animators.add(ObjectAnimator.ofFloat(titleTextView, View.ALPHA, (currentPage == PAGE_PREVIEW || currentPage == PAGE_COVER) && editMode == EDIT_MODE_NONE ? 1f : 0f)); int bottomMargin = 0; if (editMode == EDIT_MODE_FILTER) { @@ -4283,6 +4572,7 @@ private void createPhotoPaintView() { outputEntry != null && !outputEntry.fileDeletable, outputEntry == null ? null : outputEntry.file, outputEntry != null && outputEntry.isVideo, + outputEntry != null && outputEntry.botId != 0, windowView, activity, currentAccount, @@ -4548,6 +4838,7 @@ public void onDeselectRound(RoundView roundView) { } } }; + paintView.setHasAudio(outputEntry != null && outputEntry.audioPath != null); paintView.setBlurManager(blurManager); containerView.addView(paintView); paintViewRenderView = paintView.getRenderView(); @@ -4648,6 +4939,10 @@ private void destroyPhotoPaintView() { } } + private boolean isBot() { + return outputEntry != null && outputEntry.botId != 0 || botId != 0; + } + private void onSwitchEditModeStart(int fromMode, int toMode) { if (toMode == EDIT_MODE_NONE) { backButton.setVisibility(View.VISIBLE); @@ -4726,6 +5021,7 @@ private void applyPaintInBackground(Runnable whenDone) { final PaintView paintView = this.paintView; final StoryEntry outputEntry = this.outputEntry; if (paintView == null || outputEntry == null) { + whenDone.run(); return; } @@ -5130,7 +5426,7 @@ private void createFilterPhotoView() { if (outputEntry.filterFile == null) { photoBitmap = previewView.getPhotoBitmap(); } else { - photoBitmap = StoryEntry.getScaledBitmap(opts -> BitmapFactory.decodeFile(outputEntry.file.getAbsolutePath(), opts), AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y, true); + photoBitmap = StoryEntry.getScaledBitmap(opts -> BitmapFactory.decodeFile(outputEntry.file.getAbsolutePath(), opts), AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y, true, true); } } if (photoBitmap == null && !outputEntry.isVideo) { @@ -5273,7 +5569,7 @@ protected void onSavedDualCameraSuccess() { return; } if (savedDualHint != null) { - CharSequence text = isFrontface() ? LocaleController.getString(R.string.StoryCameraSavedDualBackHint) : LocaleController.getString(R.string.StoryCameraSavedDualFrontHint); + CharSequence text = isFrontface() ? getString(R.string.StoryCameraSavedDualBackHint) : getString(R.string.StoryCameraSavedDualFrontHint); savedDualHint.setMaxWidthPx(HintView2.cutInFancyHalf(text, savedDualHint.getTextPaint())); savedDualHint.setText(text); savedDualHint.show(); @@ -5429,10 +5725,10 @@ private void saveLastCameraBitmap(Runnable whenDone) { private void showDismissEntry() { AlertDialog.Builder builder = new AlertDialog.Builder(getContext(), resourcesProvider); - builder.setTitle(LocaleController.getString("DiscardChanges", R.string.DiscardChanges)); - builder.setMessage(LocaleController.getString("PhotoEditorDiscardAlert", R.string.PhotoEditorDiscardAlert)); + builder.setTitle(getString("DiscardChanges", R.string.DiscardChanges)); + builder.setMessage(getString("PhotoEditorDiscardAlert", R.string.PhotoEditorDiscardAlert)); if (outputEntry != null && !outputEntry.isEdit) { - builder.setNeutralButton(outputEntry.isDraft ? LocaleController.getString("StoryKeepDraft") : LocaleController.getString("StorySaveDraft"), (di, i) -> { + builder.setNeutralButton(outputEntry.isDraft ? getString("StoryKeepDraft") : getString("StorySaveDraft"), (di, i) -> { if (outputEntry == null) { return; } @@ -5456,7 +5752,7 @@ private void showDismissEntry() { navigateTo(PAGE_CAMERA, true); }); } - builder.setPositiveButton(outputEntry != null && outputEntry.isDraft && !outputEntry.isEdit ? LocaleController.getString("StoryDeleteDraft") : LocaleController.getString("Discard", R.string.Discard), (dialogInterface, i) -> { + builder.setPositiveButton(outputEntry != null && outputEntry.isDraft && !outputEntry.isEdit ? getString("StoryDeleteDraft") : getString("Discard", R.string.Discard), (dialogInterface, i) -> { if (outputEntry != null && !(outputEntry.isEdit || outputEntry.isRepost && !outputEntry.isRepostMessage) && outputEntry.isDraft) { MessagesController.getInstance(currentAccount).getStoriesController().getDraftsController().delete(outputEntry); outputEntry = null; @@ -5467,7 +5763,7 @@ private void showDismissEntry() { navigateTo(PAGE_CAMERA, true); } }); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder.setNegativeButton(getString("Cancel", R.string.Cancel), null); AlertDialog dialog = builder.create(); dialog.show(); View positiveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE); @@ -5523,8 +5819,8 @@ private void requestCameraPermission(boolean force) { if (activity.shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)) { new AlertDialog.Builder(getContext(), resourcesProvider) .setTopAnimation(R.raw.permission_request_camera, AlertsCreator.PERMISSIONS_REQUEST_TOP_ICON_SIZE, false, Theme.getColor(Theme.key_dialogTopBackground)) - .setMessage(AndroidUtilities.replaceTags(LocaleController.getString("PermissionNoCameraWithHint", R.string.PermissionNoCameraWithHint))) - .setPositiveButton(LocaleController.getString("PermissionOpenSettings", R.string.PermissionOpenSettings), (dialogInterface, i) -> { + .setMessage(AndroidUtilities.replaceTags(getString("PermissionNoCameraWithHint", R.string.PermissionNoCameraWithHint))) + .setPositiveButton(getString("PermissionOpenSettings", R.string.PermissionOpenSettings), (dialogInterface, i) -> { try { Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.parse("package:" + ApplicationLoader.applicationContext.getPackageName())); @@ -5533,7 +5829,7 @@ private void requestCameraPermission(boolean force) { FileLog.e(e); } }) - .setNegativeButton(LocaleController.getString("ContactsPermissionAlertNotNow", R.string.ContactsPermissionAlertNotNow), null) + .setNegativeButton(getString("ContactsPermissionAlertNotNow", R.string.ContactsPermissionAlertNotNow), null) .create() .show(); return; @@ -5661,8 +5957,8 @@ private void onRequestPermissionsResultInternal(int requestCode, String[] permis } else { new AlertDialog.Builder(getContext(), resourcesProvider) .setTopAnimation(R.raw.permission_request_folder, AlertsCreator.PERMISSIONS_REQUEST_TOP_ICON_SIZE, false, Theme.getColor(Theme.key_dialogTopBackground)) - .setMessage(AndroidUtilities.replaceTags(LocaleController.getString(R.string.PermissionStorageWithHint))) - .setPositiveButton(LocaleController.getString("PermissionOpenSettings", R.string.PermissionOpenSettings), (dialogInterface, i) -> { + .setMessage(AndroidUtilities.replaceTags(getString(R.string.PermissionStorageWithHint))) + .setPositiveButton(getString("PermissionOpenSettings", R.string.PermissionOpenSettings), (dialogInterface, i) -> { try { Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.parse("package:" + ApplicationLoader.applicationContext.getPackageName())); @@ -5671,7 +5967,7 @@ private void onRequestPermissionsResultInternal(int requestCode, String[] permis FileLog.e(e); } }) - .setNegativeButton(LocaleController.getString("ContactsPermissionAlertNotNow", R.string.ContactsPermissionAlertNotNow), null) + .setNegativeButton(getString("ContactsPermissionAlertNotNow", R.string.ContactsPermissionAlertNotNow), null) .create() .show(); } @@ -5679,8 +5975,8 @@ private void onRequestPermissionsResultInternal(int requestCode, String[] permis if (!granted) { new AlertDialog.Builder(getContext(), resourcesProvider) .setTopAnimation(R.raw.permission_request_camera, AlertsCreator.PERMISSIONS_REQUEST_TOP_ICON_SIZE, false, Theme.getColor(Theme.key_dialogTopBackground)) - .setMessage(AndroidUtilities.replaceTags(LocaleController.getString("PermissionNoCameraMicVideo", R.string.PermissionNoCameraMicVideo))) - .setPositiveButton(LocaleController.getString("PermissionOpenSettings", R.string.PermissionOpenSettings), (dialogInterface, i) -> { + .setMessage(AndroidUtilities.replaceTags(getString("PermissionNoCameraMicVideo", R.string.PermissionNoCameraMicVideo))) + .setPositiveButton(getString("PermissionOpenSettings", R.string.PermissionOpenSettings), (dialogInterface, i) -> { try { Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.parse("package:" + ApplicationLoader.applicationContext.getPackageName())); @@ -5689,7 +5985,7 @@ private void onRequestPermissionsResultInternal(int requestCode, String[] permis FileLog.e(e); } }) - .setNegativeButton(LocaleController.getString("ContactsPermissionAlertNotNow", R.string.ContactsPermissionAlertNotNow), null) + .setNegativeButton(getString("ContactsPermissionAlertNotNow", R.string.ContactsPermissionAlertNotNow), null) .create() .show(); } @@ -5697,8 +5993,8 @@ private void onRequestPermissionsResultInternal(int requestCode, String[] permis if (!granted) { new AlertDialog.Builder(getContext(), resourcesProvider) .setTopAnimation(R.raw.permission_request_folder, AlertsCreator.PERMISSIONS_REQUEST_TOP_ICON_SIZE, false, Theme.getColor(Theme.key_dialogTopBackground)) - .setMessage(AndroidUtilities.replaceTags(LocaleController.getString("PermissionNoAudioStorageStory", R.string.PermissionNoAudioStorageStory))) - .setPositiveButton(LocaleController.getString("PermissionOpenSettings", R.string.PermissionOpenSettings), (dialogInterface, i) -> { + .setMessage(AndroidUtilities.replaceTags(getString("PermissionNoAudioStorageStory", R.string.PermissionNoAudioStorageStory))) + .setPositiveButton(getString("PermissionOpenSettings", R.string.PermissionOpenSettings), (dialogInterface, i) -> { try { Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.parse("package:" + ApplicationLoader.applicationContext.getPackageName())); @@ -5707,7 +6003,7 @@ private void onRequestPermissionsResultInternal(int requestCode, String[] permis FileLog.e(e); } }) - .setNegativeButton(LocaleController.getString("ContactsPermissionAlertNotNow", R.string.ContactsPermissionAlertNotNow), null) + .setNegativeButton(getString("ContactsPermissionAlertNotNow", R.string.ContactsPermissionAlertNotNow), null) .create() .show(); } @@ -5747,10 +6043,10 @@ public void didReceivedNotification(int id, int account, Object... args) { } } else if (id == NotificationCenter.storiesLimitUpdate) { if (currentPage == PAGE_PREVIEW) { - previewButtons.setShareEnabled(!videoError && !captionEdit.isCaptionOverLimit() && (!MessagesController.getInstance(currentAccount).getStoriesController().hasStoryLimit() || (outputEntry != null && outputEntry.isEdit))); + previewButtons.setShareEnabled(!videoError && !captionEdit.isCaptionOverLimit() && (!MessagesController.getInstance(currentAccount).getStoriesController().hasStoryLimit() || (outputEntry != null && (outputEntry.isEdit || outputEntry.botId != 0)))); } else if (currentPage == PAGE_CAMERA) { StoriesController.StoryLimit storyLimit = MessagesController.getInstance(currentAccount).getStoriesController().checkStoryLimit(); - if (storyLimit != null && storyLimit.active(currentAccount)) { + if (storyLimit != null && storyLimit.active(currentAccount) && (outputEntry == null || outputEntry.botId == 0)) { showLimitReachedSheet(storyLimit, true); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/TimelineView.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/TimelineView.java index b8ca1546378..ba255c7c3c9 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/TimelineView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/TimelineView.java @@ -61,26 +61,26 @@ public class TimelineView extends View { public static final long MAX_SELECT_DURATION = (long) (59 * 1000L); interface TimelineDelegate { - void onProgressDragChange(boolean dragging); - void onProgressChange(long progress, boolean fast); - - void onVideoLeftChange(float left); - void onVideoRightChange(float right); - void onVideoVolumeChange(float volume); - - void onAudioOffsetChange(long offset); - void onAudioLeftChange(float left); - void onAudioRightChange(float right); - void onAudioVolumeChange(float volume); - void onAudioRemove(); - - void onRoundOffsetChange(long offset); - void onRoundLeftChange(float left); - void onRoundRightChange(float right); - void onRoundVolumeChange(float volume); - void onRoundRemove(); - - void onRoundSelectChange(boolean selected); + default void onProgressDragChange(boolean dragging) {}; + default void onProgressChange(long progress, boolean fast) {}; + + default void onVideoLeftChange(float left) {}; + default void onVideoRightChange(float right) {}; + default void onVideoVolumeChange(float volume) {}; + + default void onAudioOffsetChange(long offset) {}; + default void onAudioLeftChange(float left) {}; + default void onAudioRightChange(float right) {}; + default void onAudioVolumeChange(float volume) {}; + default void onAudioRemove() {}; + + default void onRoundOffsetChange(long offset) {}; + default void onRoundLeftChange(float left) {}; + default void onRoundRightChange(float right) {}; + default void onRoundVolumeChange(float volume) {}; + default void onRoundRemove() {}; + + default void onRoundSelectChange(boolean selected) {}; } private TimelineDelegate delegate; @@ -186,6 +186,11 @@ private long getBaseDuration() { private final View previewContainer; private final Theme.ResourcesProvider resourcesProvider; + private boolean isCover; + public void setCover() { + isCover = true; + } + private final Runnable onLongPress; public TimelineView(Context context, ViewGroup container, View previewContainer, Theme.ResourcesProvider resourcesProvider, BlurringShader.BlurManager blurManager) { @@ -314,6 +319,13 @@ public void setDelegate(TimelineDelegate delegate) { this.delegate = delegate; } + private long coverStart = -1, coverEnd = -1; + public void setCoverVideo(long videoStart, long videoEnd) { + coverStart = videoStart; + coverEnd = videoEnd; + setupVideoThumbs(true); + } + public void setVideo(boolean isRound, String videoPath, long videoDuration, float videoVolume) { if (TextUtils.equals(this.videoPath, videoPath)) { return; @@ -328,7 +340,7 @@ public void setVideo(boolean isRound, String videoPath, long videoDuration, floa this.videoPath = videoPath; this.videoDuration = videoDuration; this.videoVolume = videoVolume; - setupVideoThumbs(); + setupVideoThumbs(false); } else { this.videoPath = null; this.videoDuration = 1; @@ -400,11 +412,15 @@ public void selectRound(boolean select) { invalidate(); } - private void setupVideoThumbs() { - if (getMeasuredWidth() <= 0 || this.thumbs != null) { + private void setupVideoThumbs(boolean force) { + if (getMeasuredWidth() <= 0 || this.thumbs != null && !force) { return; } - this.thumbs = new VideoThumbsLoader(isMainVideoRound, videoPath, w - px - px, dp(38), videoDuration > 2 ? videoDuration : null); + if (thumbs != null) { + thumbs.destroy(); + thumbs = null; + } + this.thumbs = new VideoThumbsLoader(isMainVideoRound, videoPath, w - px - px, dp(38), videoDuration > 2 ? videoDuration : null, MAX_SCROLL_DURATION, coverStart, coverEnd); if (this.thumbs.getDuration() > 0) { videoDuration = this.thumbs.getDuration(); } @@ -415,7 +431,7 @@ private void setupRoundThumbs() { if (getMeasuredWidth() <= 0 || this.roundThumbs != null || hasVideo && videoDuration < 1) { return; } - this.roundThumbs = new VideoThumbsLoader(false, roundPath, w - px - px, dp(38), roundDuration > 2 ? roundDuration : null, hasVideo ? videoDuration : MAX_SCROLL_DURATION); + this.roundThumbs = new VideoThumbsLoader(false, roundPath, w - px - px, dp(38), roundDuration > 2 ? roundDuration : null, hasVideo ? videoDuration : MAX_SCROLL_DURATION, -1, -1); if (this.roundThumbs.getDuration() > 0) { roundDuration = this.roundThumbs.getDuration(); } @@ -533,7 +549,7 @@ private int detectHandle(MotionEvent event) { final long scrollWidth = Math.min(getBaseDuration(), MAX_SCROLL_DURATION); final float progressT = (Utilities.clamp(progress, getBaseDuration(), 0) + (!hasVideo ? audioOffset : 0) - scroll) / (float) scrollWidth; final float progressX = px + ph + sw * progressT; - if (x >= progressX - dp(12) && x <= progressX + dp(12)) { + if (!isCover && x >= progressX - dp(12) && x <= progressX + dp(12)) { return HANDLE_PROGRESS; } @@ -541,6 +557,10 @@ private int detectHandle(MotionEvent event) { final boolean isInRound = hasRound && y > h - py - getVideoHeight() - dp(4) - getRoundHeight() - dp(4) - dp(2) && y < h - py - getVideoHeight() - dp(2); if (isInVideo) { + if (isCover) { + return HANDLE_VIDEO_REGION; + } + final float leftX = px + ph + (videoLeft * videoDuration - scroll) / (float) scrollWidth * sw; final float rightX = px + ph + (videoRight * videoDuration - scroll) / (float) scrollWidth * sw; @@ -734,8 +754,10 @@ public boolean onTouchEvent(MotionEvent event) { } dragged = false; lastX = event.getX(); - AndroidUtilities.cancelRunOnUIThread(this.onLongPress); - AndroidUtilities.runOnUIThread(this.onLongPress, ViewConfiguration.getLongPressTimeout()); + if (!isCover) { + AndroidUtilities.cancelRunOnUIThread(this.onLongPress); + AndroidUtilities.runOnUIThread(this.onLongPress, ViewConfiguration.getLongPressTimeout()); + } } else if (event.getAction() == MotionEvent.ACTION_MOVE) { final float Δx = event.getX() - lastX; final boolean allowDrag = dragged || Math.abs(Δx) > AndroidUtilities.touchSlop; @@ -975,7 +997,16 @@ public boolean onTouchEvent(MotionEvent event) { boolean scrollStopped = true; if (event.getAction() == MotionEvent.ACTION_UP) { if (System.currentTimeMillis() - pressTime <= ViewConfiguration.getTapTimeout() && !dragged) { - if (pressType == 2 && !audioSelected) { + if (isCover) { + float d = videoRight - videoLeft; + videoLeft = (event.getX() - px - ph) / sw * (1 - d); + videoRight = videoLeft + d; + if (delegate != null) { + delegate.onVideoLeftChange(videoLeft); + delegate.onVideoRightChange(videoRight); + } + invalidate(); + } else if (pressType == 2 && !audioSelected) { audioSelected = true; roundSelected = false; if (delegate != null) { @@ -1440,19 +1471,21 @@ protected void dispatchDraw(Canvas canvas) { } selectedVideoClipPath.rewind(); - AndroidUtilities.rectTmp.set( - px + ph + (videoLeft * videoDuration - scroll) / (float) scrollDuration * sw - (videoLeft <= 0 ? ph : 0), - h - py - videoHeight, - px + ph + (videoRight * videoDuration - scroll) / (float) scrollDuration * sw + (videoRight >= 1 ? ph : 0), - h - py - ); - selectedVideoClipPath.addRoundRect( - AndroidUtilities.rectTmp, - selectedVideoRadii, - Path.Direction.CW - ); - canvas.clipPath(selectedVideoClipPath, Region.Op.DIFFERENCE); - canvas.drawColor(0x50000000); + if (!isCover) { + AndroidUtilities.rectTmp.set( + px + ph + (videoLeft * videoDuration - scroll) / (float) scrollDuration * sw - (videoLeft <= 0 ? ph : 0), + h - py - videoHeight, + px + ph + (videoRight * videoDuration - scroll) / (float) scrollDuration * sw + (videoRight >= 1 ? ph : 0), + h - py + ); + selectedVideoClipPath.addRoundRect( + AndroidUtilities.rectTmp, + selectedVideoRadii, + Path.Direction.CW + ); + canvas.clipPath(selectedVideoClipPath, Region.Op.DIFFERENCE); + canvas.drawColor(0x50000000); + } canvas.restore(); } @@ -1770,40 +1803,50 @@ private void drawRegion(Canvas canvas, Paint blurPaint, float top, float bottom, canvas.saveLayerAlpha(0, 0, w, h, 0xFF, Canvas.ALL_SAVE_FLAG); regionPaint.setAlpha((int) (0xFF * alpha)); canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(6), dp(6), regionPaint); - AndroidUtilities.rectTmp.inset(dp(10), dp(2)); - canvas.drawRect(AndroidUtilities.rectTmp, regionCutPaint); + AndroidUtilities.rectTmp.inset(dp(isCover ? 2.5f : 10), dp(2)); + if (isCover) { + canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(3), dp(3), regionCutPaint); + } else { + canvas.drawRect(AndroidUtilities.rectTmp, regionCutPaint); + } final float hw = dp(2), hh = dp(10); Paint handlePaint = blurPaint != null ? blurPaint : regionHandlePaint; regionHandlePaint.setAlpha(0xFF); handlePaint.setAlpha((int) (0xFF * alpha)); AndroidUtilities.rectTmp.set( - left - (dp(10) - hw) / 2f, + left - (dp(isCover ? 2 : 10) - hw) / 2f, (top + bottom - hh) / 2f, - left - (dp(10) + hw) / 2f, + left - (dp(isCover ? 2 : 10) + hw) / 2f, (top + bottom + hh) / 2f ); - canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(1), dp(1), handlePaint); - if (blurPaint != null) { - regionHandlePaint.setAlpha((int) (0x30 * alpha)); - canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(1), dp(1), regionHandlePaint); + if (!isCover) { + canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(1), dp(1), handlePaint); + if (blurPaint != null && !isCover) { + regionHandlePaint.setAlpha((int) (0x30 * alpha)); + canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(1), dp(1), regionHandlePaint); + } } AndroidUtilities.rectTmp.set( - right + (dp(10) - hw) / 2f, + right + (dp(isCover ? 2.5f : 10) - hw) / 2f, (top + bottom - hh) / 2f, - right + (dp(10) + hw) / 2f, + right + (dp(isCover ? 2.5f : 10) + hw) / 2f, (top + bottom + hh) / 2f ); - canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(1), dp(1), handlePaint); - if (blurPaint != null) { - regionHandlePaint.setAlpha((int) (0x30 * alpha)); - canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(1), dp(1), regionHandlePaint); + if (!isCover) { + canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(1), dp(1), handlePaint); + if (blurPaint != null) { + regionHandlePaint.setAlpha((int) (0x30 * alpha)); + canvas.drawRoundRect(AndroidUtilities.rectTmp, dp(1), dp(1), regionHandlePaint); + } } canvas.restore(); } private void drawProgress(Canvas canvas, float y1, float y2, long progress, float scale) { + if (isCover) return; + final long scrollDuration = Math.min(getBaseDuration(), MAX_SCROLL_DURATION); final float progressT = (Utilities.clamp(progress, getBaseDuration(), 0) + (!hasVideo ? audioOffset : 0) - scroll) / (float) scrollDuration; @@ -1840,7 +1883,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { ph = dp(10); sw = w - 2 * ph - 2 * px; if (videoPath != null && this.thumbs == null) { - setupVideoThumbs(); + setupVideoThumbs(false); } if (audioPath != null && this.waveform == null) { setupAudioWaveform(); @@ -1867,6 +1910,10 @@ public VideoThumbsLoader(boolean isRound, String path, int uiWidth, int uiHeight } public VideoThumbsLoader(boolean isRound, String path, int uiWidth, int uiHeight, Long overrideDuration, long maxDuration) { + this(isRound, path, uiWidth, uiHeight, overrideDuration, maxDuration, -1, -1); + } + + public VideoThumbsLoader(boolean isRound, String path, int uiWidth, int uiHeight, Long overrideDuration, long maxDuration, long startFrom, long endTo) { this.isRound = isRound; metadataRetriever = new MediaMetadataRetriever(); long duration = MAX_SCROLL_DURATION; @@ -1903,6 +1950,9 @@ public VideoThumbsLoader(boolean isRound, String path, int uiWidth, int uiHeight if (overrideDuration != null) { this.duration = duration = overrideDuration; } + if (startFrom != -1 && endTo != -1) { + duration = endTo - startFrom; + } float aspectRatio = 1; if (width != 0 && height != 0) { aspectRatio = width / (float) height; @@ -1914,6 +1964,9 @@ public VideoThumbsLoader(boolean isRound, String path, int uiWidth, int uiHeight count = (int) Math.ceil(uiScrollWidth / frameWidth); frameIterator = (long) (duration / (float) count); nextFrame = -frameIterator; + if (startFrom != -1) { + nextFrame = startFrom - frameIterator; + } load(); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/Weather.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/Weather.java new file mode 100644 index 00000000000..c169b58b5b6 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/Weather.java @@ -0,0 +1,617 @@ +package org.telegram.ui.Stories.recorder; + +import static org.telegram.messenger.LocaleController.getString; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; +import android.net.Uri; +import android.os.Build; +import android.text.TextUtils; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.ApplicationLoader; +import org.telegram.messenger.DialogObject; +import org.telegram.messenger.FileLog; +import org.telegram.messenger.LocaleController; +import org.telegram.messenger.MessagesController; +import org.telegram.messenger.R; +import org.telegram.messenger.UserConfig; +import org.telegram.messenger.Utilities; +import org.telegram.tgnet.AbstractSerializedData; +import org.telegram.tgnet.ConnectionsManager; +import org.telegram.tgnet.TLObject; +import org.telegram.tgnet.TLRPC; +import org.telegram.ui.ActionBar.AlertDialog; +import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.Components.AlertsCreator; +import org.telegram.ui.LaunchActivity; +import org.telegram.ui.Stories.DarkThemeResourceProvider; + + +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.TimeZone; + +public class Weather { + +// public static String[] emojis = new String[] { +// "☀", // Clear sky +// "🌤", // Mainly clear +// "⛅", // Partly cloudy +// "☁", // Overcast +// "😶‍🌫", // Fog +// "😶‍🌫", // Depositing rime fog +// "🌦", // Light drizzle +// "🌧", // Moderate drizzle +// "🌧", // Dense drizzle +// "❄", // Light freezing drizzle +// "❄", // Dense freezing drizzle +// "🌦", // Slight rain +// "🌧", // Moderate rain +// "🌧", // Heavy rain +// "❄", // Light freezing rain +// "❄", // Heavy freezing rain +// "🌨", // Slight snow fall +// "🌨", // Moderate snow fall +// "❄", // Heavy snow fall +// "🌨", // Snow grains +// "🌦", // Slight rain showers +// "🌧", // Moderate rain showers +// "⛈", // Violent rain showers +// "🌨", // Slight snow showers +// "❄", // Heavy snow showers +// "⚡", // Thunderstorm +// "⚡" // Thunderstorm with slight hail +// }; +// public static int[] emojiKeys = new int[] { +// 0, // Clear sky +// 1, // Mainly clear +// 2, // Partly cloudy +// 3, // Overcast +// 45, // Fog +// 48, // Depositing rime fog +// 51, // Light drizzle +// 53, // Moderate drizzle +// 55, // Dense drizzle +// 56, // Light freezing drizzle +// 57, // Dense freezing drizzle +// 61, // Slight rain +// 63, // Moderate rain +// 65, // Heavy rain +// 66, // Light freezing rain +// 67, // Heavy freezing rain +// 71, // Slight snow fall +// 73, // Moderate snow fall +// 75, // Heavy snow fall +// 77, // Snow grains +// 80, // Slight rain showers +// 81, // Moderate rain showers +// 82, // Violent rain showers +// 85, // Slight snow showers +// 86, // Heavy snow showers +// 95, // Thunderstorm +// 96, // Thunderstorm with slight hail +// }; +// public static String[] moonEmojis = new String[] { +// "🌚", // New Moon +// "🌛", // Waxing Crescent +// "🌓", // First Quarter +// "🌔", // Waxing Gibbous +// "🌝", // Full Moon +// "🌖", // Waning Gibbous +// "🌗", // Last Quarter +// "🌜", // Waning Crescent +// "🌚" // New Moon +// }; + +// public static String getEmoji(int type, double lat, double lng) { +// if (type == 0 || type == 1 || type == 2) { +// final Date now = new Date(); +// if (!isDay(lat, lng, LocalDateTime.now(ZoneOffset.UTC))) { +// return getMoonPhaseEmoji(now); +// } +// } +// for (int i = emojiKeys.length - 1; i >= 0; --i) { +// if (type >= emojiKeys[i]) { +// return emojis[i]; +// } +// } +// return emojis[0]; +// } +// +// private static final double J1970 = 2440588; +// +// public static String getMoonPhaseEmoji(Date date) { +// double julianDate = toJulianDate(date); +// +// double referenceNewMoon = 2451550.1; // January 6, 2000 +// double synodicMonth = 29.53058867; // Average length of a synodic month +// +// double daysSinceNewMoon = julianDate - referenceNewMoon; +// double newMoons = daysSinceNewMoon / synodicMonth; +// double currentMoonPhase = (newMoons - Math.floor(newMoons)) * synodicMonth; +// +// if (currentMoonPhase < 1.84566) { +// return moonEmojis[0]; // New Moon +// } else if (currentMoonPhase < 5.53699) { +// return moonEmojis[1]; // Waxing Crescent +// } else if (currentMoonPhase < 9.22831) { +// return moonEmojis[2]; // First Quarter +// } else if (currentMoonPhase < 12.91963) { +// return moonEmojis[3]; // Waxing Gibbous +// } else if (currentMoonPhase < 16.61096) { +// return moonEmojis[4]; // Full Moon +// } else if (currentMoonPhase < 20.30228) { +// return moonEmojis[5]; // Waning Gibbous +// } else if (currentMoonPhase < 23.99361) { +// return moonEmojis[6]; // Last Quarter +// } else if (currentMoonPhase < 27.68493) { +// return moonEmojis[7]; // Waning Crescent +// } else { +// return moonEmojis[8]; // New Moon +// } +// } +// +// public static boolean isDay(double latitude, double longitude, LocalDateTime dateTime) { +// LocalDate date = dateTime.toLocalDate(); +// LocalTime time = dateTime.toLocalTime(); +// +// double sunrise = calculateSunrise(latitude, longitude, date); +// double sunset = calculateSunset(latitude, longitude, date); +// +// return time.isAfter(LocalTime.ofSecondOfDay((long) (sunrise * 3600))) && +// time.isBefore(LocalTime.ofSecondOfDay((long) (sunset * 3600))); +// } +// +// public static double calculateSunrise(double latitude, double longitude, LocalDate date) { +// return calculateSunTime(latitude, longitude, date, true); +// } +// +// public static double calculateSunset(double latitude, double longitude, LocalDate date) { +// return calculateSunTime(latitude, longitude, date, false); +// } +// +// public static double calculateSunTime(double latitude, double longitude, LocalDate date, boolean isSunrise) { +// int dayOfYear = date.getDayOfYear(); +// double zenith = 90.833; // Official zenith for sunrise/sunset +// +// double D2R = Math.PI / 180.0; +// double R2D = 180.0 / Math.PI; +// +// double lngHour = longitude / 15.0; +// double t = dayOfYear + ((isSunrise ? 6 : 18) - lngHour) / 24.0; +// +// double M = (0.9856 * t) - 3.289; +// double L = M + (1.916 * Math.sin(M * D2R)) + (0.020 * Math.sin(2 * M * D2R)) + 282.634; +// +// if (L > 360.0) { +// L -= 360.0; +// } else if (L < 0.0) { +// L += 360.0; +// } +// +// double RA = R2D * Math.atan(0.91764 * Math.tan(L * D2R)); +// if (RA > 360.0) { +// RA -= 360.0; +// } else if (RA < 0.0) { +// RA += 360.0; +// } +// +// double Lquadrant = (Math.floor(L / 90.0)) * 90.0; +// double RAquadrant = (Math.floor(RA / 90.0)) * 90.0; +// RA += (Lquadrant - RAquadrant); +// RA /= 15.0; +// +// double sinDec = 0.39782 * Math.sin(L * D2R); +// double cosDec = Math.cos(Math.asin(sinDec)); +// +// double cosH = (Math.cos(zenith * D2R) - (sinDec * Math.sin(latitude * D2R))) / (cosDec * Math.cos(latitude * D2R)); +// if (cosH > 1.0) { +// return -1; +// } else if (cosH < -1.0) { +// return -1; +// } +// +// double H = isSunrise ? (360.0 - R2D * Math.acos(cosH)) : R2D * Math.acos(cosH); +// H /= 15.0; +// +// double T = H + RA - (0.06571 * t) - 6.622; +// double UT = T - lngHour; +// +// if (UT > 24.0) { +// UT -= 24.0; +// } else if (UT < 0.0) { +// UT += 24.0; +// } +// return UT; +// } +// +// private static double toJulianDate(Date date) { +// Calendar calendar = new GregorianCalendar(); +// calendar.setTime(date); +// return toJulianDate(calendar); +// } +// +// private static double toJulianDate(Calendar calendar) { +// return calendar.getTimeInMillis() / 86400000.0 + J1970 - 0.5; +// } + + public static boolean isDefaultCelsius() { + final String timezone = TimeZone.getDefault().getID(); + return !( + timezone.startsWith("US/") || + "America/Nassau".equals(timezone) || + "America/Belize".equals(timezone) || + "America/Cayman".equals(timezone) || + "Pacific/Palau".equals(timezone) + ); + } + + public static class State extends TLObject { + public double lat, lng; + +// public int type; + public String emoji; + public float temperature; // in celsius + + public String getEmoji() { +// return Weather.getEmoji(type, lat, lng); + return emoji; + } + + public String getTemperature() { + return getTemperature(isDefaultCelsius()); + } + + public String getTemperature(boolean celsius) { + if (celsius) { + return (int) Math.round(temperature) + "°C"; + } else { + return (int) Math.round((this.temperature * 9.0 / 5.0) + 32) + "°F"; + } + } + + public static Weather.State TLdeserialize(AbstractSerializedData stream) { + Weather.State state = new Weather.State(); + state.lat = stream.readDouble(false); + state.lng = stream.readDouble(false); +// state.type = stream.readInt32(false); + state.emoji = stream.readString(false); + state.temperature = stream.readFloat(false); + return state; + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeDouble(lat); + stream.writeDouble(lng); +// stream.writeInt32(type); + stream.writeString(emoji); + stream.writeFloat(temperature); + } + } + + public static void fetch(boolean withProgress, Utilities.Callback<State> whenFetched) { + if (whenFetched == null) return; + getUserLocation(withProgress, location -> { + if (location == null) { + whenFetched.run(null); + return; + } + + Activity activity = LaunchActivity.instance; + if (activity == null) activity = AndroidUtilities.findActivity(ApplicationLoader.applicationContext); + if (activity == null || activity.isFinishing()) { + whenFetched.run(null); + return; + } + + final AlertDialog progressDialog = withProgress ? new AlertDialog(activity, AlertDialog.ALERT_TYPE_SPINNER, new DarkThemeResourceProvider()) : null; + if (withProgress) progressDialog.showDelayed(200); + Runnable cancel = fetch(location.getLatitude(), location.getLongitude(), weather -> { + if (withProgress) { + progressDialog.dismissUnless(350); + } + whenFetched.run(weather); + }); + if (withProgress && cancel != null) { + progressDialog.setOnCancelListener(di -> cancel.run()); + } + }); + } + + private static String cacheKey; + private static State cacheValue; + + public static State getCached() { + return cacheValue; + } + +// public static Runnable fetch(double lat, double lng, Utilities.Callback<State> whenFetched) { +// if (whenFetched == null) return null; +// +// final Date date = new Date(); +// final Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); +// calendar.setTime(date); +// final long hours = calendar.getTimeInMillis() / 1_000L / 60L / 60L; +// final String key = Math.round(lat * 1000) + ":" + Math.round(lng * 1000) + "at" + hours; +// if (cacheValue != null && TextUtils.equals(cacheKey, key)) { +// whenFetched.run(cacheValue); +// return null; +// } +// +// AsyncTask task = new HttpGetTask(result -> { +// try { +// final JSONObject obj = new JSONObject(result); +// final JSONObject current_weather = obj.getJSONObject("current_weather"); +// final int type = current_weather.getInt("weathercode"); +// int temperature = current_weather.getInt("temperature"); +// final JSONObject current_weather_units = obj.getJSONObject("current_weather_units"); +// if (current_weather_units.getString("temperature").equals("°F")) { +// temperature = (int) Math.round((temperature - 32) * 5.0 / 9.0); +// } +// +// final State state = new State(); +// state.lat = lat; +// state.lng = lng; +// state.type = type; +// state.temperature = temperature; +// +// cacheKey = key; +// cacheValue = state; +// +// whenFetched.run(state); +// +// } catch (Exception e) { +// FileLog.e(e); +// } +// }).execute( +// "https://api.open-meteo.com/v1/forecast?latitude="+lat+"&longitude="+lng+"&current_weather=true" +// ); +// +// return () -> task.cancel(true); +// } + + public static Runnable fetch(double lat, double lng, Utilities.Callback<State> whenFetched) { + if (whenFetched == null) return null; + + final Date date = new Date(); + final Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + calendar.setTime(date); + final long hours = calendar.getTimeInMillis() / 1_000L / 60L / 60L; + final String key = Math.round(lat * 1000) + ":" + Math.round(lng * 1000) + "at" + hours; + if (cacheValue != null && TextUtils.equals(cacheKey, key)) { + whenFetched.run(cacheValue); + return null; + } + + final int[] currentReqId = new int[1]; + + final MessagesController messagesController = MessagesController.getInstance(UserConfig.selectedAccount); + final ConnectionsManager connectionsManager = ConnectionsManager.getInstance(UserConfig.selectedAccount); + final String username = messagesController.weatherSearchUsername; + + final TLRPC.User[] bot = new TLRPC.User[] { messagesController.getUser(username) }; + Runnable request = () -> { + TLRPC.TL_messages_getInlineBotResults req2 = new TLRPC.TL_messages_getInlineBotResults(); + req2.bot = messagesController.getInputUser(bot[0]); + req2.query = ""; + req2.offset = ""; + req2.flags |= 1; + req2.geo_point = new TLRPC.TL_inputGeoPoint(); + req2.geo_point.lat = lat; + req2.geo_point._long = lng; + req2.peer = new TLRPC.TL_inputPeerEmpty(); + + currentReqId[0] = connectionsManager.sendRequest(req2, (res2, err2) -> AndroidUtilities.runOnUIThread(() -> { + currentReqId[0] = 0; + if (res2 instanceof TLRPC.messages_BotResults) { + TLRPC.messages_BotResults r = (TLRPC.messages_BotResults) res2; + if (!r.results.isEmpty()) { + TLRPC.BotInlineResult rr = r.results.get(0); + final String emoji = rr.title; + final float temp; + try { + temp = Float.parseFloat(rr.description); + } catch (Exception e) { + whenFetched.run(null); + return; + } + final State state = new State(); + state.lat = lat; + state.lng = lng; + state.emoji = emoji; + state.temperature = temp; + + cacheKey = key; + cacheValue = state; + + whenFetched.run(state); + return; + } + } + whenFetched.run(null); + })); + }; + + if (bot[0] == null) { + TLRPC.TL_contacts_resolveUsername req = new TLRPC.TL_contacts_resolveUsername(); + req.username = username; + currentReqId[0] = connectionsManager.sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + currentReqId[0] = 0; + if (res instanceof TLRPC.TL_contacts_resolvedPeer) { + TLRPC.TL_contacts_resolvedPeer r = (TLRPC.TL_contacts_resolvedPeer) res; + messagesController.putUsers(r.users, false); + messagesController.putChats(r.chats, false); + long uid = DialogObject.getPeerDialogId(r.peer); + bot[0] = messagesController.getUser(uid); + if (bot[0] != null) { + request.run(); + return; + } + } + whenFetched.run(null); + })); + } else { + request.run(); + } + + return () -> { + if (currentReqId[0] != 0) { + connectionsManager.cancelRequest(currentReqId[0], true); + currentReqId[0] = 0; + } + }; + } + + public static int LOCATION_REQUEST = 3332; + private static Utilities.Callback<Boolean> latestPermissionCallback; + + public static boolean hasLocationPermission() { + Activity _activity = LaunchActivity.instance; + if (_activity == null) _activity = AndroidUtilities.findActivity(ApplicationLoader.applicationContext); + if (_activity == null) return false; + final Activity activity = _activity; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (activity.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { + return true; + } + return false; + } else { + return true; + } + } + + public static void ensureLocationPermission(Utilities.Callback<Boolean> ensured) { + if (ensured == null) return; + Activity _activity = LaunchActivity.instance; + if (_activity == null) _activity = AndroidUtilities.findActivity(ApplicationLoader.applicationContext); + if (_activity == null) return; + final Activity activity = _activity; + + latestPermissionCallback = ensured; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if ( + ApplicationLoader.applicationContext.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED || + ApplicationLoader.applicationContext.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED + ) { + ensured.run(true); + return; + } + if (activity.shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_COARSE_LOCATION) || activity.shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_FINE_LOCATION)) { + new AlertDialog.Builder(activity, null) + .setTopAnimation(R.raw.permission_request_location, AlertsCreator.PERMISSIONS_REQUEST_TOP_ICON_SIZE, false, Theme.getColor(Theme.key_dialogTopBackground)) + .setMessage(AndroidUtilities.replaceTags(LocaleController.getString(R.string.PermissionNoLocationStory))) + .setPositiveButton(LocaleController.getString("PermissionOpenSettings", R.string.PermissionOpenSettings), (dialogInterface, i) -> { + try { + Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + intent.setData(Uri.parse("package:" + ApplicationLoader.applicationContext.getPackageName())); + activity.startActivity(intent); + } catch (Exception e) { + FileLog.e(e); + } + }) + .setNegativeButton(LocaleController.getString("ContactsPermissionAlertNotNow", R.string.ContactsPermissionAlertNotNow), null) + .create() + .show(); + ensured.run(false); + return; + } + activity.requestPermissions(new String[]{ Manifest.permission.ACCESS_COARSE_LOCATION }, LOCATION_REQUEST); + } else { + ensured.run(true); + } + } + + public static void receivePermissionIntent(String[] permissions, int[] grantResults) { + boolean granted = false; + for (int i = 0; i < permissions.length; ++i) { + if (Manifest.permission.ACCESS_COARSE_LOCATION.equals(permissions[i]) || Manifest.permission.ACCESS_FINE_LOCATION.equals(permissions[i])) { + granted = grantResults[i] == PackageManager.PERMISSION_GRANTED; + break; + } + } + if (latestPermissionCallback != null) { + Utilities.Callback<Boolean> callback = latestPermissionCallback; + latestPermissionCallback = null; + callback.run(granted); + } + } + + @SuppressLint("MissingPermission") + public static void getUserLocation(boolean withProgress, Utilities.Callback<Location> whenGot) { + if (whenGot == null) return; + + ensureLocationPermission(granted -> { + if (!granted) { + whenGot.run(null); + return; + } + + LocationManager lm = (LocationManager) ApplicationLoader.applicationContext.getSystemService(Context.LOCATION_SERVICE); + List<String> providers = lm.getProviders(true); + Location l = null; + for (int i = providers.size() - 1; i >= 0; i--) { + l = lm.getLastKnownLocation(providers.get(i)); + if (l != null) { + break; + } + } + if (l == null && withProgress) { + if (!lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) { + Context context = LaunchActivity.instance; + if (context == null) context = ApplicationLoader.applicationContext; + if (context != null) { + try { + final Context finalContext = context; + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTopAnimation(R.raw.permission_request_location, AlertsCreator.PERMISSIONS_REQUEST_TOP_ICON_SIZE, false, Theme.getColor(Theme.key_dialogTopBackground)); + builder.setMessage(getString(R.string.GpsDisabledAlertText)); + builder.setPositiveButton(getString(R.string.Enable), (dialog, id) -> { + try { + finalContext.startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS)); + } catch (Exception ignore) { + } + }); + builder.setNegativeButton(getString(R.string.Cancel), null); + builder.show(); + } catch (Exception e) { + FileLog.e(e); + } + } + } else { + try { + final Utilities.Callback<Location>[] callback = new Utilities.Callback[] { whenGot }; + final LocationListener[] listenerArr = new LocationListener[] { null }; + final LocationListener listener = location -> { + if (listenerArr[0] != null) { + lm.removeUpdates(listenerArr[0]); + listenerArr[0] = null; + } + if (callback[0] != null) { + callback[0].run(location); + callback[0] = null; + } + }; + listenerArr[0] = listener; + lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1, 0, listener); + } catch (Exception e) { + FileLog.e(e); + whenGot.run(null); + } + return; + } + } + whenGot.run(l); + }); + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/TextMessageEnterTransition.java b/TMessagesProj/src/main/java/org/telegram/ui/TextMessageEnterTransition.java index 0300a5cc21d..3b865ecdb26 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/TextMessageEnterTransition.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/TextMessageEnterTransition.java @@ -24,7 +24,6 @@ import android.text.StaticLayout; import android.text.TextPaint; import android.text.TextUtils; -import android.util.Log; import android.view.View; import android.view.animation.LinearInterpolator; @@ -526,7 +525,7 @@ public void onDraw(Canvas canvas) { messageView.drawNamesLayout(canvas, alphaProgress); messageView.drawCommentButton(canvas, alphaProgress); messageView.drawCaptionLayout(canvas, false, alphaProgress); - messageView.drawReactionsLayout(canvas, alphaProgress); + messageView.drawReactionsLayout(canvas, alphaProgress, null); messageView.drawLinkPreview(canvas, alphaProgress); canvas.restore(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ThemeActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ThemeActivity.java index edb26ba96d5..994ea55a98f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ThemeActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ThemeActivity.java @@ -23,8 +23,6 @@ import android.content.pm.PackageManager; import android.graphics.Canvas; import android.graphics.Paint; -import android.graphics.PorterDuff; -import android.graphics.PorterDuffColorFilter; import android.graphics.drawable.Drawable; import android.location.Address; import android.location.Geocoder; @@ -55,7 +53,6 @@ import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ApplicationLoader; -import org.telegram.messenger.Emoji; import org.telegram.messenger.FileLoader; import org.telegram.messenger.FileLog; import org.telegram.messenger.LocaleController; @@ -64,10 +61,9 @@ import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.R; import org.telegram.messenger.SharedConfig; -import org.telegram.messenger.UserObject; import org.telegram.messenger.Utilities; import org.telegram.messenger.time.SunDate; -import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_account; import org.telegram.ui.ActionBar.ActionBar; import org.telegram.ui.ActionBar.ActionBarMenu; import org.telegram.ui.ActionBar.ActionBarMenuItem; @@ -94,7 +90,6 @@ import org.telegram.ui.Cells.ThemeTypeCell; import org.telegram.ui.Cells.ThemesHorizontalListCell; import org.telegram.ui.Components.AlertsCreator; -import org.telegram.ui.Components.AvatarDrawable; import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.RLottieDrawable; @@ -103,8 +98,9 @@ import org.telegram.ui.Components.ShareAlert; import org.telegram.ui.Components.SimpleThemeDescription; import org.telegram.ui.Components.SwipeGestureSettingsView; -import org.telegram.ui.Components.Text; import org.telegram.ui.Components.ThemeEditorView; +import org.telegram.ui.web.SearchEngine; +import org.telegram.ui.web.WebBrowserSettings; import java.io.File; import java.io.FileOutputStream; @@ -143,8 +139,8 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No private int textSizeHeaderRow; private int textSizeRow; private int settingsRow; - private int customTabsRow; private int directShareRow; + private int sensitiveContentRow; private int raiseToSpeakRow; private int raiseToListenRow; private int nextMediaTapRow; @@ -153,6 +149,7 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No private int saveToGalleryOption2Row; private int saveToGallerySectionRow; private int distanceRow; + private int searchEngineRow; private int bluetoothScoRow; private int enableAnimationsRow; private int settings2Row; @@ -162,6 +159,7 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No private int contactsSortRow; private int nightThemeRow; + private int browserRow; private int nightDisabledRow; private int nightScheduledRow; private int nightAutomaticRow; @@ -223,6 +221,7 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No private boolean updateRecordViaSco; private boolean updateDistance; + private boolean updateSearchEngine; private GpsLocationListener gpsLocationListener = new GpsLocationListener(); private GpsLocationListener networkLocationListener = new GpsLocationListener(); @@ -235,6 +234,12 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No private RLottieDrawable sunDrawable; + private boolean highlightSensitiveRow; + public ThemeActivity highlightSensitiveRow() { + this.highlightSensitiveRow = true; + return this; + } + private class GpsLocationListener implements LocationListener { @Override @@ -515,6 +520,7 @@ private void updateRows(boolean notify) { nightTypeInfoRow = -1; scheduleHeaderRow = -1; nightThemeRow = -1; + browserRow = -1; newThemeInfoRow = -1; scheduleFromRow = -1; scheduleToRow = -1; @@ -552,8 +558,8 @@ private void updateRows(boolean notify) { backgroundRow = -1; changeUserColor = -1; settingsRow = -1; - customTabsRow = -1; directShareRow = -1; + sensitiveContentRow = -1; enableAnimationsRow = -1; raiseToSpeakRow = -1; raiseToListenRow = -1; @@ -563,6 +569,7 @@ private void updateRows(boolean notify) { saveToGalleryOption2Row = -1; saveToGallerySectionRow = -1; distanceRow = -1; + searchEngineRow = -1; bluetoothScoRow = -1; settings2Row = -1; @@ -649,6 +656,7 @@ private void updateRows(boolean notify) { swipeGestureInfoRow = rowCount++; nightThemeRow = rowCount++; + browserRow = rowCount++; liteModeRow = rowCount++; stickersRow = rowCount++; stickersSectionRow = rowCount++; @@ -665,8 +673,11 @@ private void updateRows(boolean notify) { mediaSoundSectionRow = rowCount++; otherHeaderRow = rowCount++; - customTabsRow = rowCount++; directShareRow = rowCount++; + TL_account.contentSettings contentSettings = getMessagesController().getContentSettings(); + if (contentSettings != null && contentSettings.sensitive_can_change) { + sensitiveContentRow = rowCount++; + } sendByEnterRow = rowCount++; distanceRow = rowCount++; otherSectionRow = rowCount++; @@ -914,6 +925,18 @@ public View createView(Context context) { menuItem.addSubItem(edit_theme, R.drawable.msg_edit, getString("EditThemeColors", R.string.EditThemeColors)); menuItem.addSubItem(create_theme, R.drawable.msg_palette, getString("CreateNewThemeMenu", R.string.CreateNewThemeMenu)); menuItem.addSubItem(reset_settings, R.drawable.msg_reset, getString("ThemeResetToDefaults", R.string.ThemeResetToDefaults)); + + if (getMessagesController().getContentSettings() == null) { + getMessagesController().getContentSettings(settings -> { + if (listView != null && listView.isAttachedToWindow() && listAdapter != null) { + if ((sensitiveContentRow >= 0) == (settings != null && settings.sensitive_can_change)) { + listAdapter.notifyItemChanged(sensitiveContentRow); + } else { + updateRows(true); + } + } + }); + } } else { actionBar.setTitle(getString("AutoNightTheme", R.string.AutoNightTheme)); } @@ -1138,6 +1161,47 @@ public void onItemClick(int id) { .create(); dialogRef.set(dialog); showDialog(dialog); + } else if (position == searchEngineRow) { + if (getParentActivity() == null) { + return; + } + AtomicReference<Dialog> dialogRef = new AtomicReference<>(); + + LinearLayout linearLayout = new LinearLayout(context); + linearLayout.setOrientation(LinearLayout.VERTICAL); + + ArrayList<SearchEngine> searchEngines = SearchEngine.getSearchEngines(); + CharSequence[] items = new CharSequence[ searchEngines.size() ]; + + for (int i = 0; i < items.length; ++i) { + final SearchEngine engine = searchEngines.get(i); + items[i] = engine.name; + + final int index = i; + RadioColorCell cell = new RadioColorCell(getParentActivity()); + cell.setPadding(dp(4), 0, dp(4), 0); + cell.setCheckColor(Theme.getColor(Theme.key_radioBackground), Theme.getColor(Theme.key_dialogRadioBackgroundChecked)); + cell.setTextAndValue(items[index], index == SharedConfig.searchEngineType); + cell.setBackground(Theme.createSelectorDrawable(Theme.getColor(Theme.key_listSelector), Theme.RIPPLE_MASK_ALL)); + linearLayout.addView(cell); + cell.setOnClickListener(v -> { + SharedConfig.setSearchEngineType(index); + updateSearchEngine = true; + RecyclerView.ViewHolder holder = listView.findViewHolderForAdapterPosition(searchEngineRow); + if (holder != null) { + listAdapter.onBindViewHolder(holder, searchEngineRow); + } + dialogRef.get().dismiss(); + }); + } + + Dialog dialog = new AlertDialog.Builder(getParentActivity()) + .setTitle(getString(R.string.SearchEngine)) + .setView(linearLayout) + .setNegativeButton(getString("Cancel", R.string.Cancel), null) + .create(); + dialogRef.set(dialog); + showDialog(dialog); } else if (position == bluetoothScoRow) { if (getParentActivity() == null) { return; @@ -1190,16 +1254,32 @@ public void onItemClick(int id) { .create(); dialogRef.set(dialog); showDialog(dialog); - } else if (position == customTabsRow) { - SharedConfig.toggleCustomTabs(); - if (view instanceof TextCheckCell) { - ((TextCheckCell) view).setChecked(SharedConfig.customTabs); - } } else if (position == directShareRow) { SharedConfig.toggleDirectShare(); if (view instanceof TextCheckCell) { ((TextCheckCell) view).setChecked(SharedConfig.directShare); } + } else if (position == sensitiveContentRow) { + if (!getMessagesController().showSensitiveContent()) { + showDialog( + new AlertDialog.Builder(context, resourceProvider) + .setTitle(getString(R.string.ConfirmSensitiveContentTitle)) + .setMessage(getString(R.string.ConfirmSensitiveContentText)) + .setPositiveButton(getString(R.string.Confirm), (di, w) -> { + getMessagesController().setContentSettings(true); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(getMessagesController().showSensitiveContent()); + } + }) + .setNegativeButton(getString(R.string.Cancel), null) + .create() + ); + } else { + getMessagesController().setContentSettings(false); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(getMessagesController().showSensitiveContent()); + } + } } else if (position == contactsReimportRow) { //not implemented } else if (position == contactsSortRow) { @@ -1257,6 +1337,14 @@ public void onItemClick(int id) { } else { presentFragment(new ThemeActivity(THEME_TYPE_NIGHT)); } + } else if (position == browserRow) { + if (LocaleController.isRTL && x <= dp(76) || !LocaleController.isRTL && x >= view.getMeasuredWidth() - dp(76)) { + NotificationsCheckCell checkCell = (NotificationsCheckCell) view; + SharedConfig.toggleInappBrowser(); + checkCell.setChecked(SharedConfig.inappBrowser); + } else { + presentFragment(new WebBrowserSettings(null)); + } } else if (position == nightDisabledRow) { if (Theme.selectedAutoNightType == Theme.AUTO_NIGHT_TYPE_NONE) { return; @@ -1343,6 +1431,15 @@ public void onItemClick(int id) { listView.setItemAnimator(itemAnimator); } + if (highlightSensitiveRow) { + updateRows(false); + highlightSensitiveRow = false; + listView.scrollToPosition(listAdapter.getItemCount() - 1); + AndroidUtilities.runOnUIThread(() -> { + listView.highlightRow(() -> sensitiveContentRow); + }, 200); + } + return fragmentView; } @@ -2206,9 +2303,9 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { TextSettingsCell cell = (TextSettingsCell) holder.itemView; if (position == nightThemeRow) { if (Theme.selectedAutoNightType == Theme.AUTO_NIGHT_TYPE_NONE || Theme.getCurrentNightTheme() == null) { - cell.setTextAndValue(getString("AutoNightTheme", R.string.AutoNightTheme), getString("AutoNightThemeOff", R.string.AutoNightThemeOff), false); + cell.setTextAndValue(getString(R.string.AutoNightTheme), getString(R.string.AutoNightThemeOff), false); } else { - cell.setTextAndValue(getString("AutoNightTheme", R.string.AutoNightTheme), Theme.getCurrentNightThemeName(), false); + cell.setTextAndValue(getString(R.string.AutoNightTheme), Theme.getCurrentNightThemeName(), false); } } else if (position == scheduleFromRow) { int currentHour = Theme.autoNightDayStartTime / 60; @@ -2243,8 +2340,10 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { } else { value = getString("DistanceUnitsMiles", R.string.DistanceUnitsMiles); } - cell.setTextAndValue(getString("DistanceUnits", R.string.DistanceUnits), value, updateDistance, false); + cell.setTextAndValue(getString("DistanceUnits", R.string.DistanceUnits), value, updateDistance, true); updateDistance = false; + } else if (position == searchEngineRow) { + cell.setTextAndValue(getString(R.string.SearchEngine), SearchEngine.getCurrent().name, updateSearchEngine, false); } else if (position == bluetoothScoRow) { cell.setTextAndValue(getString(R.string.MicrophoneForVoiceMessages), getString(SharedConfig.recordViaSco ? R.string.MicrophoneForVoiceMessagesSco : R.string.MicrophoneForVoiceMessagesBuiltIn), updateRecordViaSco, false); updateRecordViaSco = false; @@ -2349,10 +2448,10 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { textCheckCell.setTextAndValueAndCheck(getString(R.string.PauseMusicOnRecord), getString("PauseMusicOnRecordInfo", R.string.PauseMusicOnRecordInfo), SharedConfig.pauseMusicOnRecord, true, true); } else if (position == pauseOnMediaRow) { textCheckCell.setTextAndCheck(getString(R.string.PauseMusicOnMedia), SharedConfig.pauseMusicOnMedia, true); - } else if (position == customTabsRow) { - textCheckCell.setTextAndValueAndCheck(getString("ChromeCustomTabs", R.string.ChromeCustomTabs), getString("ChromeCustomTabsInfo", R.string.ChromeCustomTabsInfo), SharedConfig.customTabs, false, true); } else if (position == directShareRow) { textCheckCell.setTextAndValueAndCheck(getString("DirectShare", R.string.DirectShare), getString("DirectShareInfo", R.string.DirectShareInfo), SharedConfig.directShare, false, true); + } else if (position == sensitiveContentRow) { + textCheckCell.setTextAndValueAndCheck(getString(R.string.ShowSensitiveContent), getString(R.string.ShowSensitiveContentInfo), getMessagesController().showSensitiveContent(), true, true); } else if (position == chatBlurRow) { textCheckCell.setTextAndCheck(getString("BlurInChat", R.string.BlurInChat), SharedConfig.chatBlurEnabled(), true); } @@ -2375,6 +2474,8 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { value = type + " " + value; } checkCell.setTextAndValueAndIconAndCheck(getString("AutoNightTheme", R.string.AutoNightTheme), value, R.drawable.msg2_night_auto, enabled, 0, false, true); + } else if (position == browserRow) { + checkCell.setTextAndValueAndIconAndCheck(getString(R.string.InappBrowser), getString(R.string.InappBrowserInfo), R.drawable.msg2_language, SharedConfig.inappBrowser, 0, false, true); } break; } @@ -2468,7 +2569,7 @@ public int getItemViewType(int position) { if (position == scheduleFromRow || position == distanceRow || position == scheduleToRow || position == scheduleUpdateLocationRow || position == contactsReimportRow || position == contactsSortRow || - position == bluetoothScoRow) { + position == bluetoothScoRow || position == searchEngineRow) { return TYPE_TEXT_SETTING; } else if (position == automaticBrightnessInfoRow || position == scheduleLocationInfoRow || position == swipeGestureInfoRow || position == stickersInfoRow || position == liteModeInfoRow) { return TYPE_TEXT_INFO_PRIVACY; @@ -2488,14 +2589,14 @@ public int getItemViewType(int position) { } else if (position == automaticBrightnessRow) { return TYPE_BRIGHTNESS; } else if (position == scheduleLocationRow || position == sendByEnterRow || - position == raiseToSpeakRow || position == raiseToListenRow || position == pauseOnRecordRow || position == customTabsRow || - position == directShareRow || position == chatBlurRow || position == pauseOnMediaRow || position == nextMediaTapRow) { + position == raiseToSpeakRow || position == raiseToListenRow || position == pauseOnRecordRow || + position == directShareRow || position == chatBlurRow || position == pauseOnMediaRow || position == nextMediaTapRow || position == sensitiveContentRow) { return TYPE_TEXT_CHECK; } else if (position == textSizeRow) { return TYPE_TEXT_SIZE; } else if (position == chatListRow) { return TYPE_CHAT_LIST; - } else if (position == nightThemeRow) { + } else if (position == nightThemeRow || position == browserRow) { return TYPE_NIGHT_THEME; } else if (position == themeListRow) { return TYPE_THEME_LIST; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/TwoStepVerificationSetupActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/TwoStepVerificationSetupActivity.java index cd9e7567561..8f958c6f79a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/TwoStepVerificationSetupActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/TwoStepVerificationSetupActivity.java @@ -51,6 +51,7 @@ import android.widget.TextView; import android.widget.Toast; +import androidx.core.content.ContextCompat; import androidx.core.graphics.ColorUtils; import org.telegram.messenger.AndroidUtilities; @@ -327,7 +328,7 @@ public void getOutline(View view, Outline outline) { Drawable drawable = Theme.createSimpleSelectorCircleDrawable(AndroidUtilities.dp(56), Theme.getColor(Theme.key_chats_actionBackground), Theme.getColor(Theme.key_chats_actionPressedBackground)); if (Build.VERSION.SDK_INT < 21) { - Drawable shadowDrawable = context.getResources().getDrawable(R.drawable.floating_shadow).mutate(); + Drawable shadowDrawable = ContextCompat.getDrawable(context, R.drawable.floating_shadow).mutate(); shadowDrawable.setColorFilter(new PorterDuffColorFilter(0xff000000, PorterDuff.Mode.MULTIPLY)); CombinedDrawable combinedDrawable = new CombinedDrawable(shadowDrawable, drawable, 0, 0); combinedDrawable.setIconSize(AndroidUtilities.dp(56), AndroidUtilities.dp(56)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/UserInfoActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/UserInfoActivity.java index aa8e24daf31..a1265cb0297 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/UserInfoActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/UserInfoActivity.java @@ -438,6 +438,7 @@ private void processDone(boolean error) { userFull.birthday = null; } requests.add(req); + getMessagesController().invalidateContentSettings(); NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.premiumPromoUpdated); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/UsersSelectActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/UsersSelectActivity.java index 86de3b362fb..1051f5257d2 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/UsersSelectActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/UsersSelectActivity.java @@ -1088,9 +1088,9 @@ private void updateHint() { } else { animatedAvatarContainer.getTitle().setText(LocaleController.formatPluralString("Chats", selectedCount, selectedCount)); if (ttlPeriod > 0) { - animatedAvatarContainer.getSubtitleTextView().setText(LocaleController.getPluralString("SelectChatsForAutoDelete2", selectedCount)); + animatedAvatarContainer.getSubtitleTextView().setText(LocaleController.getString(R.string.SelectChatsForAutoDelete2)); } else { - animatedAvatarContainer.getSubtitleTextView().setText(LocaleController.getPluralString("SelectChatsForDisableAutoDelete2", selectedCount)); + animatedAvatarContainer.getSubtitleTextView().setText(LocaleController.getString(R.string.SelectChatsForDisableAutoDelete2)); } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/WebAppDisclaimerAlert.java b/TMessagesProj/src/main/java/org/telegram/ui/WebAppDisclaimerAlert.java index 04ed92bc3b4..9bdda36ff8b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/WebAppDisclaimerAlert.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/WebAppDisclaimerAlert.java @@ -16,6 +16,7 @@ import org.telegram.messenger.LocaleController; import org.telegram.messenger.R; import org.telegram.messenger.UserObject; +import org.telegram.messenger.Utilities; import org.telegram.messenger.browser.Browser; import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.AlertDialog; @@ -31,11 +32,12 @@ public class WebAppDisclaimerAlert { private AlertDialog alert; private TextView positiveButton; - public static void show(Context context, Consumer<Boolean> consumer, TLRPC.User withSendMessage) { + public static void show(Context context, Consumer<Boolean> consumer, TLRPC.User withSendMessage, Runnable dismissed) { WebAppDisclaimerAlert alert = new WebAppDisclaimerAlert(); AlertDialog.Builder alertDialog = new AlertDialog.Builder(context); alertDialog.setTitle(LocaleController.getString("TermsOfUse", R.string.TermsOfUse)); + LinearLayout linearLayout = new LinearLayout(context); linearLayout.setOrientation(LinearLayout.VERTICAL); TextView textView = new TextView(context); @@ -61,6 +63,7 @@ public static void show(Context context, Consumer<Boolean> consumer, TLRPC.User // }); // } + final boolean[] dismissing = new boolean[1]; textView.setText(AndroidUtilities.replaceTags(LocaleController.getString("BotWebAppDisclaimerSubtitle", R.string.BotWebAppDisclaimerSubtitle))); alert.cell.setText(AndroidUtilities.replaceSingleTag(LocaleController.getString("BotWebAppDisclaimerCheck", R.string.BotWebAppDisclaimerCheck), () -> { Browser.openUrl(context, LocaleController.getString("WebAppDisclaimerUrl", R.string.WebAppDisclaimerUrl)); @@ -68,6 +71,7 @@ public static void show(Context context, Consumer<Boolean> consumer, TLRPC.User alertDialog.setView(linearLayout); alertDialog.setPositiveButton(LocaleController.getString("Continue", R.string.Continue), (dialog, which) -> { consumer.accept(true); + dismissing[0] = true; dialog.dismiss(); }); alertDialog.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), (dialog, which) -> { @@ -84,5 +88,13 @@ public static void show(Context context, Consumer<Boolean> consumer, TLRPC.User alert.positiveButton.animate().alpha(alert.cell.isChecked() ? 1f : 0.5f).start(); }); alert.cell.setBackground(Theme.createSelectorDrawable(Theme.getColor(Theme.key_listSelector), Theme.RIPPLE_MASK_ROUNDRECT_6DP)); + alert.alert.setOnDismissListener(d -> { + if (!dismissing[0]) { + dismissing[0] = true; + if (dismissed != null) { + dismissed.run(); + } + } + }); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/WrappedResourceProvider.java b/TMessagesProj/src/main/java/org/telegram/ui/WrappedResourceProvider.java index cc522fea8b0..36245cc0d35 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/WrappedResourceProvider.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/WrappedResourceProvider.java @@ -27,46 +27,71 @@ public int getColor(int key) { if (index >= 0) { return sparseIntArray.valueAt(index); } + if (resourcesProvider == null) { + return Theme.getColor(key); + } return resourcesProvider.getColor(key); } @Override public int getColorOrDefault(int key) { + if (resourcesProvider == null) { + return Theme.getColor(key); + } return resourcesProvider.getColorOrDefault(key); } @Override public int getCurrentColor(int key) { + if (resourcesProvider == null) return Theme.getColor(key); return resourcesProvider.getCurrentColor(key); } @Override public void setAnimatedColor(int key, int color) { - resourcesProvider.setAnimatedColor(key, color); + if (resourcesProvider != null) { + resourcesProvider.setAnimatedColor(key, color); + } } @Override public Drawable getDrawable(String drawableKey) { + if (resourcesProvider == null) { + return Theme.getThemeDrawable(drawableKey); + } return resourcesProvider.getDrawable(drawableKey); } @Override public Paint getPaint(String paintKey) { + if (resourcesProvider == null) { + return Theme.getThemePaint(paintKey); + } return resourcesProvider.getPaint(paintKey); } @Override public boolean hasGradientService() { + if (resourcesProvider == null) { + return Theme.hasGradientService(); + } return resourcesProvider.hasGradientService(); } @Override public void applyServiceShaderMatrix(int w, int h, float translationX, float translationY) { - resourcesProvider.applyServiceShaderMatrix(w, h, translationX, translationY); + if (resourcesProvider == null) { + Theme.applyServiceShaderMatrix(w, h, translationX, translationY); + } else { + resourcesProvider.applyServiceShaderMatrix(w, h, translationX, translationY); + } } @Override public ColorFilter getAnimatedEmojiColorFilter() { + if (resourcesProvider == null) { + return Theme.getAnimatedEmojiColorFilter(null); + } return resourcesProvider.getAnimatedEmojiColorFilter(); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotBiometry.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotBiometry.java index 718b2408538..3b6a9306e9f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotBiometry.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotBiometry.java @@ -45,6 +45,7 @@ import java.security.NoSuchProviderException; import java.security.SecureRandom; import java.util.ArrayList; +import java.util.HashMap; import java.util.Map; import java.util.concurrent.Executor; @@ -102,7 +103,7 @@ public static String getAvailableType(Context context) { private BiometricPrompt prompt; public void requestToken(String reason, Utilities.Callback2<Boolean, String> whenDecrypted) { - prompt(reason, true, null, result -> { + prompt(reason, true, null, (success, result) -> { String token = null; if (result != null) { try { @@ -130,15 +131,15 @@ public void requestToken(String reason, Utilities.Callback2<Boolean, String> whe } catch (Exception e) { FileLog.e(e); result = null; + success = false; } } - whenDecrypted.run(result != null, token); + whenDecrypted.run(success, token); }); } public void updateToken(String reason, String token, Utilities.Callback<Boolean> whenDone) { - prompt(reason, false, token, result -> { - boolean success = result != null; + prompt(reason, false, token, (success, result) -> { if (result != null) { try { BiometricPrompt.CryptoObject cryptoObject = result.getCryptoObject(); @@ -179,9 +180,9 @@ private void initPrompt() { public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) { FileLog.d("BotBiometry onAuthenticationError " + errorCode + " \"" + errString + "\""); if (callback != null) { - Utilities.Callback<BiometricPrompt.AuthenticationResult> thisCallback = callback; + Utilities.Callback2<Boolean, BiometricPrompt.AuthenticationResult> thisCallback = callback; callback = null; - thisCallback.run(null); + thisCallback.run(false, null); } } @@ -189,9 +190,9 @@ public void onAuthenticationError(int errorCode, @NonNull CharSequence errString public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) { FileLog.d("BotBiometry onAuthenticationSucceeded"); if (callback != null) { - Utilities.Callback<BiometricPrompt.AuthenticationResult> thisCallback = callback; + Utilities.Callback2<Boolean, BiometricPrompt.AuthenticationResult> thisCallback = callback; callback = null; - thisCallback.run(result); + thisCallback.run(true, result); } } @@ -225,19 +226,19 @@ private BiometricPrompt.CryptoObject makeCryptoObject(boolean decrypt) { return null; } - private Utilities.Callback<BiometricPrompt.AuthenticationResult> callback; + private Utilities.Callback2<Boolean, BiometricPrompt.AuthenticationResult> callback; private void prompt( String text, boolean decrypt, String token, - Utilities.Callback<BiometricPrompt.AuthenticationResult> whenDone + Utilities.Callback2<Boolean, BiometricPrompt.AuthenticationResult> whenDone ) { this.callback = whenDone; try { initPrompt(); } catch (Exception e) { FileLog.e(e); - whenDone.run(null); + whenDone.run(false, null); return; } BiometricPrompt.CryptoObject cryptoObject = makeCryptoObject(decrypt); @@ -262,7 +263,7 @@ private void prompt( } save(); this.callback = null; - whenDone.run(null); + whenDone.run(true, null); return; } catch (Exception e) { FileLog.e(e); @@ -386,22 +387,25 @@ public static void getBots( final SharedPreferences prefs = context.getSharedPreferences(PREF + currentAccount, Activity.MODE_PRIVATE); final ArrayList<Long> botIds = new ArrayList<>(); - final ArrayList<Boolean> botDisabled = new ArrayList<>(); final Map<String, ?> values = prefs.getAll(); for (Map.Entry<String, ?> entry : values.entrySet()) { - if (!entry.getKey().startsWith("device_id") || !(entry.getValue() instanceof String)) continue; + final String key = entry.getKey(); + if (!key.endsWith("_requested")) continue; long botId; - boolean disabled; try { - botId = Long.parseLong(entry.getKey().substring("device_id".length())); - Boolean disabledValue = (Boolean) values.get(botId + "_disabled"); - disabled = disabledValue != null && disabledValue; + botId = Long.parseLong(key.substring(0, key.length() - "_requested".length())); } catch (Exception e) { FileLog.e(e); continue; } botIds.add(botId); - botDisabled.add(disabled); + } + + final HashMap<Long, Boolean> botEnabled = new HashMap<>(); + for (long botId : botIds) { + final BotBiometry biometry = new BotBiometry(context, currentAccount, botId); + if (!biometry.access_granted || !biometry.access_requested) continue; + botEnabled.put(botId, !biometry.disabled); } if (botIds.isEmpty()) { @@ -414,7 +418,9 @@ public static void getBots( AndroidUtilities.runOnUIThread(() -> { ArrayList<Bot> result = new ArrayList<>(); for (int i = 0; i < bots.size(); ++i) { - result.add(new Bot(bots.get(i), i < botDisabled.size() && botDisabled.get(i))); + final TLRPC.User user = bots.get(i); + final Boolean bool = botEnabled.get(user.id); + result.add(new Bot(user, bool == null || !bool)); } whenDone.run(result); }); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotCommandsMenuView.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotCommandsMenuView.java index 6f549bd0c3e..e8f3843c010 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotCommandsMenuView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotCommandsMenuView.java @@ -29,6 +29,7 @@ import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.R; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.ui.ActionBar.MenuDrawable; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Components.CubicBezierInterpolator; @@ -284,11 +285,11 @@ public int getItemCount() { return newResult.size(); } - public void setBotInfo(LongSparseArray<TLRPC.BotInfo> botInfo) { + public void setBotInfo(LongSparseArray<TL_bots.BotInfo> botInfo) { newResult.clear(); newResultHelp.clear(); for (int b = 0; b < botInfo.size(); b++) { - TLRPC.BotInfo info = botInfo.valueAt(b); + TL_bots.BotInfo info = botInfo.valueAt(b); for (int a = 0; a < info.commands.size(); a++) { TLRPC.TL_botCommand botCommand = info.commands.get(a); if (botCommand != null && botCommand.command != null) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewAttachedSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewAttachedSheet.java index c53e405627a..c02086d6665 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewAttachedSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewAttachedSheet.java @@ -13,11 +13,14 @@ import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.Path; +import android.graphics.PixelFormat; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; import android.graphics.RectF; import android.graphics.drawable.Drawable; -import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.text.TextPaint; @@ -41,6 +44,7 @@ import org.json.JSONObject; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.AnimationNotificationsLocker; +import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.ContactsController; import org.telegram.messenger.DialogObject; import org.telegram.messenger.Emoji; @@ -66,7 +70,9 @@ import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.BackDrawable; import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.ActionBar.BottomSheetTabDialog; import org.telegram.ui.ActionBar.BottomSheetTabs; +import org.telegram.ui.ActionBar.BottomSheetTabsOverlay; import org.telegram.ui.ActionBar.INavigationLayout; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.ChatActivity; @@ -76,6 +82,7 @@ import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.OverlayActionBarLayoutDialog; import org.telegram.ui.Components.RadialProgressView; +import org.telegram.ui.Components.ShareAlert; import org.telegram.ui.Components.SimpleFloatPropertyCompat; import org.telegram.ui.Components.SizeNotifierFrameLayout; import org.telegram.ui.Components.VerticalPositionAutoAnimator; @@ -83,6 +90,8 @@ import org.telegram.ui.LaunchActivity; import org.telegram.ui.PaymentFormActivity; import org.telegram.ui.Stars.StarsController; +import org.telegram.ui.Stories.DarkThemeResourceProvider; +import org.telegram.ui.web.BotWebViewContainer; import java.io.File; import java.lang.annotation.Retention; @@ -90,8 +99,8 @@ import java.util.List; import java.util.Locale; -public class BotWebViewAttachedSheet implements NotificationCenter.NotificationCenterDelegate, BaseFragment.AttachedSheet { - public final static int TYPE_WEB_VIEW_BUTTON = 0, TYPE_SIMPLE_WEB_VIEW_BUTTON = 1, TYPE_BOT_MENU_BUTTON = 2, TYPE_WEB_VIEW_BOT_APP = 3; +public class BotWebViewAttachedSheet implements NotificationCenter.NotificationCenterDelegate, BaseFragment.AttachedSheet, BottomSheetTabsOverlay.Sheet { + public final static int TYPE_WEB_VIEW_BUTTON = 0, TYPE_SIMPLE_WEB_VIEW_BUTTON = 1, TYPE_BOT_MENU_BUTTON = 2, TYPE_WEB_VIEW_BOT_APP = 3, TYPE_WEB_VIEW_BOT_MAIN = 4; public final static int FLAG_FROM_INLINE_SWITCH = 1; public final static int FLAG_FROM_SIDE_MENU = 2; @@ -125,12 +134,20 @@ public void showJustAddedBulletin() { }, 200); } + @Override + public void setLastVisible(boolean lastVisible) { + if (webViewContainer != null) { + webViewContainer.setKeyboardFocusable(lastVisible); + } + } + @Retention(RetentionPolicy.SOURCE) @IntDef(value = { TYPE_WEB_VIEW_BUTTON, TYPE_SIMPLE_WEB_VIEW_BUTTON, TYPE_BOT_MENU_BUTTON, - TYPE_WEB_VIEW_BOT_APP + TYPE_WEB_VIEW_BOT_APP, + TYPE_WEB_VIEW_BOT_MAIN }) public @interface WebViewType {} @@ -144,6 +161,7 @@ public void showJustAddedBulletin() { }).setMultiplier(100f); private float actionBarTransitionProgress = 0f; private SpringAnimation springAnimation; + private boolean actionBarAttached; private Boolean wasLightStatusBar; @@ -211,22 +229,23 @@ public BottomSheetTabs.WebTabData saveState() { tab.ready = webViewContainer != null && webViewContainer.isPageLoaded(); tab.themeIsDark = Theme.isCurrentThemeDark(); tab.lastUrl = webViewContainer != null ? webViewContainer.getUrlLoaded() : null; - tab.expanded = swipeContainer != null && ((1f - Math.min(swipeContainer.getTopActionBarOffsetY(), swipeContainer.getTranslationY() - swipeContainer.getTopActionBarOffsetY()) / swipeContainer.getTopActionBarOffsetY()) > .5f) || forceExpnaded || getFullSize(); - tab.fullsize = getFullSize(); + tab.expanded = swipeContainer != null && ((1f - Math.min(swipeContainer.getTopActionBarOffsetY(), swipeContainer.getTranslationY() - swipeContainer.getTopActionBarOffsetY()) / swipeContainer.getTopActionBarOffsetY()) > .5f) || forceExpnaded || isFullSize(); + tab.fullsize = isFullSize(); tab.expandedOffset = swipeContainer != null ? swipeContainer.getOffsetY() : Float.MAX_VALUE; tab.backButton = backButtonShown; tab.settings = settingsItem != null && settingsItem.getVisibility() == View.VISIBLE; tab.main = mainButtonSettings; tab.confirmDismiss = needCloseConfirmation; tab.needsContext = needsContext; + tab.allowSwipes = swipeContainer == null || swipeContainer.isAllowedSwipes(); BotWebViewContainer.MyWebView webView = webViewContainer == null ? null : webViewContainer.getWebView(); if (webView != null) { webViewContainer.preserveWebView(); tab.webView = webView; - tab.webViewProxy = webViewContainer == null ? null : webViewContainer.getProxy(); - tab.webViewWidth = webView.getWidth(); - tab.webViewHeight = webView.getHeight(); - tab.webViewScroll = webView.getScrollY(); + tab.proxy = webViewContainer == null ? null : webViewContainer.getBotProxy(); + tab.viewWidth = webView.getWidth(); + tab.viewHeight = webView.getHeight(); + tab.viewScroll = webView.getScrollY(); webView.onPause(); // webView.pauseTimers(); } @@ -241,12 +260,12 @@ public boolean restoreState(BaseFragment fragment, BottomSheetTabs.WebTabData ta if (tab.overrideActionBarColor) { setBackgroundColor(tab.backgroundColor, false); } - setActionBarColor(!tab.overrideActionBarColor ? Theme.getColor(tab.actionBarColorKey < 0 ? Theme.key_windowBackgroundWhite : tab.actionBarColorKey, resourcesProvider) : tab.actionBarColor, tab.overrideActionBarColor, false); showExpanded = tab.expanded; showOffsetY = tab.expandedOffset; fullsize = tab.fullsize; needsContext = tab.needsContext; webViewContainer.setIsBackButtonVisible(backButtonShown = tab.backButton); + swipeContainer.setAllowSwipes(tab.allowSwipes); if (backDrawable != null) { backDrawable.setRotation(backButtonShown ? 0f : 1f, false); } @@ -257,7 +276,7 @@ public boolean restoreState(BaseFragment fragment, BottomSheetTabs.WebTabData ta if (tab.webView != null) { // tab.webView.resumeTimers(); tab.webView.onResume(); - webViewContainer.replaceWebView(tab.webView, tab.webViewProxy); + webViewContainer.replaceWebView(tab.webView, tab.proxy); webViewContainer.setState(tab.ready || tab.webView.isPageLoaded(), tab.lastUrl); if (Theme.isCurrentThemeDark() != tab.themeIsDark) { // webViewContainer.notifyThemeChanged(); @@ -288,6 +307,7 @@ public boolean restoreState(BaseFragment fragment, BottomSheetTabs.WebTabData ta if (settingsItem != null) { settingsItem.setVisibility(tab.settings ? View.VISIBLE : View.GONE); } + setActionBarColor(!tab.overrideActionBarColor ? Theme.getColor(tab.actionBarColorKey < 0 ? Theme.key_windowBackgroundWhite : tab.actionBarColorKey, resourcesProvider) : tab.actionBarColor, tab.overrideActionBarColor, false); return true; } @@ -306,6 +326,7 @@ public boolean restoreState(BaseFragment fragment, BottomSheetTabs.WebTabData ta private BackDrawable backDrawable; private ActionBar actionBar; private Drawable actionBarShadow; + private ActionBarMenuItem optionsItem; private ActionBarMenuSubItem settingsItem; private TLRPC.BotApp currentWebApp; @@ -391,7 +412,9 @@ public void requestLayout() { super.requestLayout(); } }; - webViewContainer = new BotWebViewContainer(getContext(), resourcesProvider, getColor(Theme.key_windowBackgroundWhite)) { + swipeContainer.setAllowFullSizeSwipe(true); + swipeContainer.setShouldWaitWebViewScroll(true); + webViewContainer = new BotWebViewContainer(getContext(), resourcesProvider, getColor(Theme.key_windowBackgroundWhite), true) { @Override public void onWebViewCreated() { super.onWebViewCreated(); @@ -406,11 +429,21 @@ public void onCloseRequested(Runnable callback) { dismiss(false, callback); } + @Override + public void onCloseToTabs() { + dismiss(true, null); + } + @Override public void onWebAppSetupClosingBehavior(boolean needConfirmation) { BotWebViewAttachedSheet.this.needCloseConfirmation = needConfirmation; } + @Override + public void onWebAppSwipingBehavior(boolean allowSwiping) { + swipeContainer.setAllowSwipes(allowSwiping); + } + @Override public void onSendWebViewData(String data) { if (queryId != 0 || sentWebViewData) { @@ -701,10 +734,12 @@ public void onAnimationEnd(Animator animation) { if (springAnimation != null) { float progress = (1f - Math.min(swipeContainer.getTopActionBarOffsetY(), swipeContainer.getTranslationY() - swipeContainer.getTopActionBarOffsetY()) / swipeContainer.getTopActionBarOffsetY()); - float newPos = (progress > 0.5f ? 1 : 0) * 100f; + float newPos = ((actionBarAttached = progress > 0.5f) ? 1 : 0) * 100f; if (springAnimation.getSpring().getFinalPosition() != newPos) { springAnimation.getSpring().setFinalPosition(newPos); springAnimation.start(); + + checkNavBarColor(); } } float offsetY = Math.max(0, swipeContainer.getSwipeOffsetY()); @@ -735,7 +770,9 @@ public float getContainerTop() { public void attachInternal() { NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.didSetNewTheme); - if (fragment.getLayoutContainer() != null) { + if (dialog != null) { + dialog.attach(); + } else if (fragment.getLayoutContainer() != null) { fragment.getLayoutContainer().addView(windowView); } } @@ -745,11 +782,13 @@ public void release() { if (webViewContainer != null) { webViewContainer.destroyWebView(); } - if (fragment.sheetsStack != null) { - fragment.sheetsStack.remove(this); - } - if (windowView != null && windowView.getParent() instanceof ViewGroup) { - ((ViewGroup) windowView.getParent()).removeView(windowView); + if (dialog != null) { + dialog.detach(); + } else { + fragment.removeSheet(this); + if (windowView != null && windowView.getParent() instanceof ViewGroup) { + ((ViewGroup) windowView.getParent()).removeView(windowView); + } } } @@ -815,14 +854,15 @@ private void updateLightStatusBar() { } wasLightStatusBar = lightStatusBar; + View view = dialog != null ? dialog.windowView : windowView; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - int flags = windowView.getSystemUiVisibility(); + int flags = view.getSystemUiVisibility(); if (lightStatusBar) { flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; } else { flags &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; } - windowView.setSystemUiVisibility(flags); + view.setSystemUiVisibility(flags); } } @@ -856,7 +896,7 @@ public void setDefaultFullsize(boolean fullsize) { this.defaultFullsize = fullsize; if (swipeContainer != null) { - swipeContainer.setFullSize(getFullSize()); + swipeContainer.setFullSize(isFullSize()); } } } @@ -871,99 +911,20 @@ public void setNeedsContext(boolean needsContext) { this.needsContext = needsContext; } - public boolean getFullSize() { + public boolean isFullSize() { return fullsize == null ? defaultFullsize : fullsize; } - public static class WebViewRequestProps { - - public int currentAccount; - public long peerId; - public long botId; - public String buttonText; - public String buttonUrl; - public @WebViewType int type; - public int replyToMsgId; - public boolean silent; - public TLRPC.BotApp app; - public boolean allowWrite; - public String startParam; - public TLRPC.User botUser; - public int flags; - public boolean compact; - - public TLObject response; - public long responseTime; - - public static WebViewRequestProps of( - int currentAccount, - long peerId, - long botId, - String buttonText, - String buttonUrl, - @WebViewType int type, - int replyToMsgId, - boolean silent, - TLRPC.BotApp app, - boolean allowWrite, - String startParam, - TLRPC.User botUser, - int flags, - boolean compact - ) { - WebViewRequestProps p = new WebViewRequestProps(); - p.currentAccount = currentAccount; - p.peerId = peerId; - p.botId = botId; - p.buttonText = buttonText; - p.buttonUrl = buttonUrl; - p.type = type; - p.replyToMsgId = replyToMsgId; - p.silent = silent; - p.app = app; - p.allowWrite = allowWrite; - p.startParam = startParam; - p.botUser = botUser; - p.flags = flags; - p.compact = compact; - if (!compact && !TextUtils.isEmpty(buttonUrl)) { - try { - Uri uri = Uri.parse(buttonUrl); - p.compact = TextUtils.equals(uri.getQueryParameter("mode"), "compact"); - } catch (Exception e) { - FileLog.e(e); - } - } - return p; - } - - public void applyResponse(TLObject response) { - this.response = response; - this.responseTime = System.currentTimeMillis(); - } + private BottomSheetTabDialog dialog; - @Override - public boolean equals(@Nullable Object obj) { - if (!(obj instanceof WebViewRequestProps)) - return false; - final WebViewRequestProps p = (WebViewRequestProps) obj; - return ( - currentAccount == p.currentAccount && - peerId == p.peerId && - botId == p.botId && - TextUtils.equals(buttonUrl, p.buttonUrl) && - type == p.type && - replyToMsgId == p.replyToMsgId && - silent == p.silent && - (app == null ? 0 : app.id) == (p.app == null ? 0 : p.app.id) && - allowWrite == p.allowWrite && - TextUtils.equals(startParam, p.startParam) && - (botUser == null ? 0 : botUser.id) == (p.botUser == null ? 0 : p.botUser.id) && - flags == p.flags - ); - } + @Override + public boolean setDialog(BottomSheetTabDialog dialog) { + this.dialog = dialog; + return true; } + Drawable verifiedDrawable; + public void requestWebView(BaseFragment fragment, WebViewRequestProps props) { this.requestProps = props; this.currentAccount = props.currentAccount; @@ -974,13 +935,52 @@ public void requestWebView(BaseFragment fragment, WebViewRequestProps props) { this.buttonText = props.buttonText; this.currentWebApp = props.app; - CharSequence title = UserObject.getUserName(MessagesController.getInstance(currentAccount).getUser(botId)); + TLRPC.User userbot = MessagesController.getInstance(currentAccount).getUser(botId); + CharSequence title = UserObject.getUserName(userbot); try { TextPaint tp = new TextPaint(); tp.setTextSize(dp(20)); title = Emoji.replaceEmoji(title, tp.getFontMetricsInt(), false); } catch (Exception ignore) {} actionBar.setTitle(title); + TLRPC.UserFull userInfo = MessagesController.getInstance(currentAccount).getUserFull(botId); + if (userbot != null && userbot.verified || userInfo != null && userInfo.user != null && userInfo.user.verified) { + verifiedDrawable = getContext().getResources().getDrawable(R.drawable.verified_profile).mutate(); + verifiedDrawable.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_featuredStickers_addButton), PorterDuff.Mode.SRC_IN)); + actionBar.getTitleTextView().setDrawablePadding(dp(2)); + actionBar.getTitleTextView().setRightDrawable(new Drawable() { + @Override + public void draw(@NonNull Canvas canvas) { + canvas.save(); + canvas.translate(0, dp(1)); + verifiedDrawable.setBounds(getBounds()); + verifiedDrawable.draw(canvas); + canvas.restore(); + } + @Override + public void setAlpha(int alpha) { + verifiedDrawable.setAlpha(alpha); + } + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) { + verifiedDrawable.setColorFilter(colorFilter); + } + @Override + public int getOpacity() { + return PixelFormat.TRANSPARENT; + } + + @Override + public int getIntrinsicHeight() { + return dp(20); + } + + @Override + public int getIntrinsicWidth() { + return dp(20); + } + }); + } ActionBarMenu menu = actionBar.createMenu(); menu.removeAllViews(); @@ -993,7 +993,7 @@ public void requestWebView(BaseFragment fragment, WebViewRequestProps props) { } menu.addItem(R.id.menu_collapse_bot, R.drawable.arrow_more); - ActionBarMenuItem otherItem = menu.addItem(0, R.drawable.ic_ab_other); + ActionBarMenuItem otherItem = optionsItem = menu.addItem(0, R.drawable.ic_ab_other); otherItem.addSubItem(R.id.menu_open_bot, R.drawable.msg_bot, LocaleController.getString(R.string.BotWebViewOpenBot)); settingsItem = otherItem.addSubItem(R.id.menu_settings, R.drawable.msg_settings, LocaleController.getString(R.string.BotWebViewSettings)); settingsItem.setVisibility(View.GONE); @@ -1001,10 +1001,20 @@ public void requestWebView(BaseFragment fragment, WebViewRequestProps props) { if (currentBot != null && MediaDataController.getInstance(currentAccount).canCreateAttachedMenuBotShortcut(currentBot.bot_id)) { otherItem.addSubItem(R.id.menu_add_to_home_screen_bot, R.drawable.msg_home, LocaleController.getString(R.string.AddShortcut)); } + otherItem.addSubItem(R.id.menu_share_bot, R.drawable.msg_share, LocaleController.getString(R.string.BotShare)); otherItem.addSubItem(R.id.menu_tos_bot, R.drawable.menu_intro, LocaleController.getString(R.string.BotWebViewToS)); + otherItem.addSubItem(R.id.menu_privacy, R.drawable.menu_privacy_policy, LocaleController.getString(R.string.BotPrivacyPolicy)); + otherItem.hideSubItem(R.id.menu_privacy); if (currentBot != null && (currentBot.show_in_side_menu || currentBot.show_in_attach_menu)) { otherItem.addSubItem(R.id.menu_delete_bot, R.drawable.msg_delete, LocaleController.getString(R.string.BotWebViewDeleteBot)); } + hasPrivacy(currentAccount, botId, has -> { + if (has) { + otherItem.showSubItem(R.id.menu_privacy); + } else { + otherItem.hideSubItem(R.id.menu_privacy); + } + }); actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { @Override @@ -1022,6 +1032,10 @@ public void onItemClick(int id) { dismiss(); } else if (id == R.id.menu_tos_bot) { Browser.openUrl(getContext(), LocaleController.getString(R.string.BotWebViewToSLink)); + } else if (id == R.id.menu_privacy) { + if (openPrivacy(currentAccount, botId)) { + dismiss(true); + } } else if (id == R.id.menu_reload_page) { if (webViewContainer.getWebView() != null) { webViewContainer.getWebView().animate().cancel(); @@ -1044,6 +1058,12 @@ public void onItemClick(int id) { } else if (id == R.id.menu_collapse_bot) { forceExpnaded = true; dismiss(true, null); + } else if (id == R.id.menu_share_bot) { + final TLRPC.User bot = MessagesController.getInstance(currentAccount).getUser(botId); + if (bot == null) return; + final String username = UserObject.getPublicUsername(bot); + final String link = "https://"+MessagesController.getInstance(currentAccount).linkPrefix+"/"+username+"?profile"; + new ShareAlert(getContext(), null, link, false, link, false, AndroidUtilities.computePerceivedBrightness(actionBarColor) > .721f ? null : new DarkThemeResourceProvider()).show(); } } }); @@ -1181,6 +1201,37 @@ public void onItemClick(int id) { loadFromResponse(false); } }), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors); + break; + } + case TYPE_WEB_VIEW_BOT_MAIN: { + TLRPC.TL_messages_requestMainWebView req = new TLRPC.TL_messages_requestMainWebView(); + + req.platform = "android"; + req.bot = MessagesController.getInstance(currentAccount).getInputUser(props.botId); + req.peer = fragment instanceof ChatActivity ? ((ChatActivity) fragment).getCurrentUser() != null ? MessagesController.getInputPeer(((ChatActivity) fragment).getCurrentUser()) : MessagesController.getInputPeer(((ChatActivity) fragment).getCurrentChat()) + : MessagesController.getInputPeer(props.botUser); + req.compact = props.compact; + + if (!TextUtils.isEmpty(props.startParam)) { + req.start_param = props.startParam; + req.flags |= 2; + } + + if (themeParams != null) { + req.theme_params = new TLRPC.TL_dataJSON(); + req.theme_params.data = themeParams.toString(); + req.flags |= 1; + } + + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response2, error2) -> AndroidUtilities.runOnUIThread(() -> { + if (error2 != null) { + + } else if (requestProps != null) { + requestProps.applyResponse(response2); + loadFromResponse(false); + } + }), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors); + break; } } } @@ -1206,11 +1257,12 @@ private void loadFromResponse(boolean fromTab) { url = resultUrl.url; } if (url != null && !fromTab) { + MediaDataController.getInstance(currentAccount).increaseWebappRating(requestProps.botId); webViewContainer.loadUrl(currentAccount, url); } AndroidUtilities.runOnUIThread(pollRunnable, pollTimeout); if (swipeContainer != null) { - swipeContainer.setFullSize(getFullSize()); + swipeContainer.setFullSize(isFullSize()); } } @@ -1297,7 +1349,7 @@ public void onLayoutChange(View v, int left, int top, int right, int bottom, int swipeContainer.setSwipeOffsetAnimationDisallowed(false); } - if (showExpanded || getFullSize()) { + if (showExpanded || isFullSize()) { if (instant) { swipeContainer.setSwipeOffsetY(-swipeContainer.getOffsetY() + swipeContainer.getTopActionBarOffsetY()); locker.unlock(); @@ -1373,15 +1425,21 @@ public int getNavigationBarColor(int color) { } @Override - public boolean onBackPressed() { + public boolean isAttachedLightStatusBar() { + if (overrideBackgroundColor) { + return !actionBarIsLight && actionBarAttached; + } else { + int color = Theme.getColor(Theme.key_windowBackgroundWhite, null, true); + return !AndroidUtilities.isTablet() && ColorUtils.calculateLuminance(color) >= 0.721f && actionBarAttached; + } + } + + @Override + public boolean onAttachedBackPressed() { if (webViewContainer.onBackPressed()) { return true; } -// if (can_minimize) { - dismiss(true, null); -// } else { -// onCheckDismissByUser(); -// } + dismiss(true, null); return true; } @@ -1447,7 +1505,7 @@ public void dismiss(boolean intoTabs, Runnable callback) { } else { webViewContainer.destroyWebView(); swipeContainer.setFullSize(false); - swipeContainer.stickTo(swipeContainer.getHeight() + windowView.measureKeyboardHeight() + (getFullSize() ? dp(200) : 0), () -> { + swipeContainer.stickTo(swipeContainer.getHeight() + windowView.measureKeyboardHeight() + (isFullSize() ? dp(200) : 0), () -> { release(); if (callback != null) { callback.run(); @@ -1458,6 +1516,8 @@ public void dismiss(boolean intoTabs, Runnable callback) { } }); } + + checkNavBarColor(); } @Override @@ -1485,7 +1545,9 @@ public static int navigationBarColor(int actionBarColor) { } public void checkNavBarColor() { - if (attachedToParent() && LaunchActivity.instance != null) { + if (dialog != null) { + dialog.updateNavigationBarColor(); + } else if (attachedToParent() && LaunchActivity.instance != null) { LaunchActivity.instance.checkSystemBarColors(true, true, true, false); //LaunchActivity.instance.setNavigationBarColor(fragment.getNavigationBarColor(), false); } @@ -1496,7 +1558,7 @@ public boolean isFullyVisible() { return false; } - public class WindowView extends SizeNotifierFrameLayout implements BaseFragment.AttachedSheetWindow { + public class WindowView extends SizeNotifierFrameLayout implements BaseFragment.AttachedSheetWindow, BottomSheetTabsOverlay.SheetView { public WindowView(Context context) { super(context); setWillNotDraw(false); @@ -1746,6 +1808,16 @@ public void onAnimationEnd(Animator animation) { windowView.invalidate(); } updateLightStatusBar(); + + if (optionsItem != null) { + final int backgroundColor = to; + final boolean dark = ColorUtils.calculateLuminance(backgroundColor) < 0.721f; + final int textColor = dark ? Color.WHITE : Color.BLACK; + optionsItem.setPopupItemsSelectorColor(Theme.multAlpha(textColor, dark ? .22f : .12f)); + optionsItem.setPopupItemsColor(Theme.multAlpha(textColor, .55f), true); + optionsItem.setPopupItemsColor(textColor, false); + optionsItem.redrawPopup(backgroundColor); + } } private MainButtonSettings mainButtonSettings; @@ -1797,4 +1869,62 @@ public void onAnimationEnd(Animator animation) { } } + public static void hasPrivacy(int currentAccount, long botId, Utilities.Callback<Boolean> whenDone) { + if (whenDone == null) return; + TLRPC.UserFull userFull = MessagesController.getInstance(currentAccount).getUserFull(botId); + if (userFull != null) { + whenDone.run(hasPrivacy(userFull)); + return; + } + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(botId); + if (user == null) { + whenDone.run(false); + return; + } + MessagesController.getInstance(currentAccount).loadFullUser(user, 0, true, (userFull2) -> { + whenDone.run(hasPrivacy(userFull2)); + }); + } + + public static boolean hasPrivacy(TLRPC.UserFull userFull) { + if (userFull == null) return false; + if (userFull.bot_info == null) return false; + return true; + } + + public static boolean hasPrivacyCommand(TLRPC.UserFull userFull) { + if (userFull == null) return false; + if (userFull.bot_info == null) return false; + if (userFull.bot_info.privacy_policy_url != null) return true; + for (TLRPC.TL_botCommand command : userFull.bot_info.commands) { + if ("privacy".equals(command.command)) { + return true; + } + } + return false; + } + + public static boolean openPrivacy(int currentAccount, long botId) { + TLRPC.UserFull userFull = MessagesController.getInstance(currentAccount).getUserFull(botId); + if (userFull == null) return false; + if (userFull.bot_info == null) return false; + String url = userFull.bot_info.privacy_policy_url; + if (url == null && !hasPrivacyCommand(userFull)) { + url = LocaleController.getString(R.string.BotDefaultPrivacyPolicy); + } + if (url != null) { + Browser.openUrl(ApplicationLoader.applicationContext, url); + return false; + } + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment == null) return false; + if (!(lastFragment instanceof ChatActivity && ((ChatActivity) lastFragment).getDialogId() == botId)) { + lastFragment.presentFragment(ChatActivity.of(botId)); + } + AndroidUtilities.runOnUIThread(() -> { + SendMessagesHelper.getInstance(currentAccount).sendMessage(SendMessagesHelper.SendMessageParams.of("/privacy", botId, null, null, null, false, null, null, null, true, 0, null, false)); + }, 150); + return true; + } + } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewMenuContainer.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewMenuContainer.java index 1e77f3413ed..3c4de5288f8 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewMenuContainer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewMenuContainer.java @@ -8,7 +8,6 @@ import android.animation.ValueAnimator; import android.annotation.SuppressLint; import android.content.Context; -import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; @@ -16,11 +15,9 @@ import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.RectF; -import android.graphics.RenderNode; import android.os.Build; import android.os.Bundle; import android.text.Editable; -import android.util.Log; import android.util.SparseIntArray; import android.view.Gravity; import android.view.MotionEvent; @@ -55,26 +52,28 @@ import org.telegram.ui.ActionBar.ActionBarMenuSubItem; import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.ActionBar.BottomSheetTabDialog; import org.telegram.ui.ActionBar.BottomSheetTabs; +import org.telegram.ui.ActionBar.BottomSheetTabsOverlay; import org.telegram.ui.ActionBar.INavigationLayout; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.ChatActivity; import org.telegram.ui.Components.ChatActivityEnterView; import org.telegram.ui.Components.ChatAvatarContainer; import org.telegram.ui.Components.CubicBezierInterpolator; -import org.telegram.ui.Components.HideViewAfterAnimation; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.SimpleFloatPropertyCompat; import org.telegram.ui.DialogsActivity; import org.telegram.ui.LaunchActivity; import org.telegram.ui.PaymentFormActivity; import org.telegram.ui.Stars.StarsController; +import org.telegram.ui.web.BotWebViewContainer; import java.util.List; import java.util.Locale; import java.util.Objects; -public class BotWebViewMenuContainer extends FrameLayout implements NotificationCenter.NotificationCenterDelegate { +public class BotWebViewMenuContainer extends FrameLayout implements NotificationCenter.NotificationCenterDelegate, BottomSheetTabsOverlay.Sheet, BottomSheetTabsOverlay.SheetView { private final static int POLL_PERIOD = 60000; private final static SimpleFloatPropertyCompat<BotWebViewMenuContainer> ACTION_BAR_TRANSITION_PROGRESS_VALUE = new SimpleFloatPropertyCompat<BotWebViewMenuContainer>("actionBarTransitionProgress", obj -> obj.actionBarTransitionProgress, (obj, value) -> { @@ -163,6 +162,15 @@ public class BotWebViewMenuContainer extends FrameLayout implements Notification private int lineColor; private boolean preserving; + public boolean isFullSize() { + return false; + } + + @Override + public boolean setDialog(BottomSheetTabDialog dialog) { + return false; + } + public BottomSheetTabs.WebTabData saveState() { preserving = true; BottomSheetTabs.WebTabData tab = new BottomSheetTabs.WebTabData(); @@ -172,7 +180,7 @@ public BottomSheetTabs.WebTabData saveState() { tab.overrideActionBarColor = overrideBackgroundColor; tab.backgroundColor = backgroundPaint.getColor(); - tab.props = new BotWebViewAttachedSheet.WebViewRequestProps(); + tab.props = new WebViewRequestProps(); tab.props.currentAccount = currentAccount; tab.props.botId = botId; tab.props.peerId = botId; @@ -194,10 +202,10 @@ public BottomSheetTabs.WebTabData saveState() { if (webView != null) { webViewContainer.preserveWebView(); tab.webView = webView; - tab.webViewProxy = webViewContainer == null ? null : webViewContainer.getProxy(); - tab.webViewWidth = webView.getWidth(); - tab.webViewScroll = webView.getScrollY(); - tab.webViewHeight = webView.getHeight(); + tab.proxy = webViewContainer == null ? null : webViewContainer.getBotProxy(); + tab.viewWidth = webView.getWidth(); + tab.viewScroll = webView.getScrollY(); + tab.viewHeight = webView.getHeight(); webView.onPause(); // webView.pauseTimers(); webView.setContainers(null, null); @@ -213,7 +221,7 @@ public boolean restoreState(BaseFragment fragment, BottomSheetTabs.WebTabData ta if (tab.webView != null) { // tab.webView.resumeTimers(); tab.webView.onResume(); - webViewContainer.replaceWebView(tab.webView, tab.webViewProxy); + webViewContainer.replaceWebView(tab.webView, tab.proxy); } else { tab.props.response = null; tab.props.responseTime = 0; @@ -268,7 +276,7 @@ public BotWebViewMenuContainer(@NonNull Context context, ChatActivityEnterView p ActionBar actionBar = chatActivity.getActionBar(); actionBarOnItemClick = actionBar.getActionBarMenuOnItemClick(); - webViewContainer = new BotWebViewContainer(context, parentEnterView.getParentFragment().getResourceProvider(), getColor(Theme.key_windowBackgroundWhite)) { + webViewContainer = new BotWebViewContainer(context, parentEnterView.getParentFragment().getResourceProvider(), getColor(Theme.key_windowBackgroundWhite), true) { @Override public void onWebViewCreated() { swipeContainer.setWebView(webViewContainer.getWebView()); @@ -286,6 +294,11 @@ public void onWebAppSetupClosingBehavior(boolean needConfirmation) { BotWebViewMenuContainer.this.needCloseConfirmation = needConfirmation; } + @Override + public void onWebAppSwipingBehavior(boolean allowSwiping) { + swipeContainer.setAllowSwipes(allowSwiping); + } + @Override public void onWebAppSetActionBarColor(int colorKey, int color, boolean isOverrideColor) { int from = overrideActionBarBackground; @@ -1036,6 +1049,10 @@ public void dismiss(boolean intoTabs, Runnable callback) { } } + public void release() { + onDismiss(); + } + /** * Called when menu is fully dismissed */ @@ -1057,7 +1074,7 @@ public void onDismiss() { webViewContainer.destroyWebView(); swipeContainer.removeView(webViewContainer); - webViewContainer = new BotWebViewContainer(getContext(), parentEnterView.getParentFragment().getResourceProvider(), getColor(Theme.key_windowBackgroundWhite)) { + webViewContainer = new BotWebViewContainer(getContext(), parentEnterView.getParentFragment().getResourceProvider(), getColor(Theme.key_windowBackgroundWhite), true) { @Override public void onWebViewCreated() { swipeContainer.setWebView(webViewContainer.getWebView()); @@ -1188,15 +1205,16 @@ public int getColor(int key) { public void updateActionBar(ActionBar actionBar, float progress) { this.progress = progress; actionBar.setTitleColor(getColor(Theme.key_windowBackgroundWhiteBlackText)); + actionBar.setSubtitleColor(Theme.multAlpha(getColor(Theme.key_windowBackgroundWhiteBlackText), .45f)); actionBar.setItemsColor(getColor(Theme.key_windowBackgroundWhiteBlackText), false); if (actionBar.backButtonImageView != null) { actionBar.backButtonImageView.setColorFilter(new PorterDuffColorFilter(getColor(Theme.key_windowBackgroundWhiteBlackText), PorterDuff.Mode.SRC_IN)); } actionBar.setItemsBackgroundColor(getColor(Theme.key_actionBarWhiteSelector), false); - actionBar.setPopupBackgroundColor(getColor(Theme.key_actionBarDefaultSubmenuBackground), false); - actionBar.setPopupItemsColor(getColor(Theme.key_actionBarDefaultSubmenuItem), false, false); - actionBar.setPopupItemsColor(getColor(Theme.key_actionBarDefaultSubmenuItemIcon), true, false); - actionBar.setPopupItemsSelectorColor(getColor(Theme.key_dialogButtonSelector), false); +// actionBar.setPopupBackgroundColor(getColor(Theme.key_actionBarDefaultSubmenuBackground), false); +// actionBar.setPopupItemsColor(getColor(Theme.key_actionBarDefaultSubmenuItem), false, false); +// actionBar.setPopupItemsColor(getColor(Theme.key_actionBarDefaultSubmenuItemIcon), true, false); +// actionBar.setPopupItemsSelectorColor(getColor(Theme.key_dialogButtonSelector), false); } } @@ -1209,6 +1227,15 @@ public void setDrawingFromOverlay(boolean drawingFromOverlay) { } } + public BottomSheetTabsOverlay.SheetView getWindowView() { + return this; + } + + @Override + public void show() { + show(currentAccount, botId, botUrl); + } + @Override protected void dispatchDraw(Canvas canvas) { if (drawingFromOverlay) return; @@ -1218,7 +1245,13 @@ protected void dispatchDraw(Canvas canvas) { private final RectF rect = new RectF(); private final Path clipPath = new Path(); - public float drawInto(Canvas canvas, RectF finalRect, float progress, RectF clipRect) { + @Override + public RectF getRect() { + rect.set(swipeContainer.getLeft(), swipeContainer.getTranslationY() + dp(24), swipeContainer.getRight(), getHeight()); + return rect; + } + + public float drawInto(Canvas canvas, RectF finalRect, float progress, RectF clipRect, float alpha, boolean opening) { rect.set(swipeContainer.getLeft(), swipeContainer.getTranslationY() + dp(24), swipeContainer.getRight(), getHeight()); AndroidUtilities.lerpCentered(rect, finalRect, progress, clipRect); @@ -1255,4 +1288,10 @@ public void setMainButton(BotWebViewAttachedSheet.MainButtonSettings s) { animateBotButton(s.isVisible); } } + + @Override + public int getNavigationBarColor(int color) { + return 0; + } + } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewSheet.java index 6132a7b38c4..c799fd1e390 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewSheet.java @@ -13,8 +13,12 @@ import android.content.ContextWrapper; import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.Path; +import android.graphics.PixelFormat; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.os.Build; @@ -33,6 +37,7 @@ import androidx.annotation.IntDef; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.core.graphics.ColorUtils; import androidx.core.math.MathUtils; @@ -66,7 +71,9 @@ import org.telegram.ui.ActionBar.ActionBarMenuSubItem; import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.ActionBar.BottomSheetTabDialog; import org.telegram.ui.ActionBar.BottomSheetTabs; +import org.telegram.ui.ActionBar.BottomSheetTabsOverlay; import org.telegram.ui.ActionBar.INavigationLayout; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.ChatActivity; @@ -84,6 +91,7 @@ import org.telegram.ui.LaunchActivity; import org.telegram.ui.PaymentFormActivity; import org.telegram.ui.Stars.StarsController; +import org.telegram.ui.web.BotWebViewContainer; import java.io.File; import java.lang.annotation.Retention; @@ -91,8 +99,8 @@ import java.util.List; import java.util.Locale; -public class BotWebViewSheet extends Dialog implements NotificationCenter.NotificationCenterDelegate { - public final static int TYPE_WEB_VIEW_BUTTON = 0, TYPE_SIMPLE_WEB_VIEW_BUTTON = 1, TYPE_BOT_MENU_BUTTON = 2, TYPE_WEB_VIEW_BOT_APP = 3; +public class BotWebViewSheet extends Dialog implements NotificationCenter.NotificationCenterDelegate, BottomSheetTabsOverlay.Sheet { + public final static int TYPE_WEB_VIEW_BUTTON = 0, TYPE_SIMPLE_WEB_VIEW_BUTTON = 1, TYPE_BOT_MENU_BUTTON = 2, TYPE_WEB_VIEW_BOT_APP = 3, TYPE_WEB_VIEW_BOT_MAIN = 4; public final static int FLAG_FROM_INLINE_SWITCH = 1; public final static int FLAG_FROM_SIDE_MENU = 2; @@ -131,7 +139,8 @@ public void showJustAddedBulletin() { TYPE_WEB_VIEW_BUTTON, TYPE_SIMPLE_WEB_VIEW_BUTTON, TYPE_BOT_MENU_BUTTON, - TYPE_WEB_VIEW_BOT_APP + TYPE_WEB_VIEW_BOT_APP, + TYPE_WEB_VIEW_BOT_MAIN }) public @interface WebViewType {} @@ -224,7 +233,7 @@ public void showJustAddedBulletin() { }; private int actionBarColorKey = -1; - private BotWebViewAttachedSheet.WebViewRequestProps requestProps; + private WebViewRequestProps requestProps; private boolean backButtonShown; private boolean forceExpnaded; @@ -242,21 +251,22 @@ public BottomSheetTabs.WebTabData saveState() { tab.ready = webViewContainer != null && webViewContainer.isPageLoaded(); tab.themeIsDark = Theme.isCurrentThemeDark(); tab.lastUrl = webViewContainer != null ? webViewContainer.getUrlLoaded() : null; - tab.expanded = swipeContainer != null && swipeContainer.getSwipeOffsetY() < 0 || forceExpnaded || getFullSize(); - tab.fullsize = getFullSize(); + tab.expanded = swipeContainer != null && swipeContainer.getSwipeOffsetY() < 0 || forceExpnaded || isFullSize(); + tab.fullsize = isFullSize(); tab.expandedOffset = swipeContainer != null ? swipeContainer.getOffsetY() : Float.MAX_VALUE; tab.needsContext = needsContext; tab.backButton = backButtonShown; tab.main = mainButtonSettings; tab.confirmDismiss = needCloseConfirmation; tab.settings = settingsItem != null && settingsItem.getVisibility() == View.VISIBLE; + tab.allowSwipes = swipeContainer == null || swipeContainer.isAllowedSwipes(); BotWebViewContainer.MyWebView webView = webViewContainer == null ? null : webViewContainer.getWebView(); if (webView != null) { webViewContainer.preserveWebView(); tab.webView = webView; - tab.webViewProxy = webViewContainer == null ? null : webViewContainer.getProxy(); - tab.webViewWidth = webView.getWidth(); - tab.webViewHeight = webView.getHeight(); + tab.proxy = webViewContainer == null ? null : webViewContainer.getBotProxy(); + tab.viewWidth = webView.getWidth(); + tab.viewHeight = webView.getHeight(); webView.onPause(); // webView.pauseTimers(); } @@ -275,6 +285,7 @@ public boolean restoreState(BaseFragment fragment, BottomSheetTabs.WebTabData ta showExpanded = tab.expanded; showOffsetY = tab.expandedOffset; webViewContainer.setIsBackButtonVisible(backButtonShown = tab.backButton); + swipeContainer.setAllowSwipes(tab.allowSwipes); AndroidUtilities.updateImageViewImageAnimated(actionBar.getBackButton(), backButtonShown ? R.drawable.ic_ab_back : R.drawable.ic_close_white); needCloseConfirmation = tab.confirmDismiss; fullsize = tab.fullsize; @@ -285,7 +296,7 @@ public boolean restoreState(BaseFragment fragment, BottomSheetTabs.WebTabData ta if (tab.webView != null) { // tab.webView.resumeTimers(); tab.webView.onResume(); - webViewContainer.replaceWebView(tab.webView, tab.webViewProxy); + webViewContainer.replaceWebView(tab.webView, tab.proxy); webViewContainer.setState(tab.ready || tab.webView.isPageLoaded(), tab.lastUrl); if (Theme.isCurrentThemeDark() != tab.themeIsDark) { // webViewContainer.notifyThemeChanged(); @@ -359,7 +370,9 @@ public void requestLayout() { super.requestLayout(); } }; - webViewContainer = new BotWebViewContainer(context, resourcesProvider, getColor(Theme.key_windowBackgroundWhite)) { + swipeContainer.setAllowFullSizeSwipe(true); + swipeContainer.setShouldWaitWebViewScroll(true); + webViewContainer = new BotWebViewContainer(context, resourcesProvider, getColor(Theme.key_windowBackgroundWhite), true) { @Override public void onWebViewCreated() { super.onWebViewCreated(); @@ -379,6 +392,11 @@ public void onWebAppSetupClosingBehavior(boolean needConfirmation) { BotWebViewSheet.this.needCloseConfirmation = needConfirmation; } + @Override + public void onWebAppSwipingBehavior(boolean allowSwiping) { + swipeContainer.setAllowSwipes(allowSwiping); + } + @Override public void onSendWebViewData(String data) { if (queryId != 0 || sentWebViewData) { @@ -868,7 +886,7 @@ public void setDefaultFullsize(boolean fullsize) { this.defaultFullsize = fullsize; if (swipeContainer != null) { - swipeContainer.setFullSize(getFullSize()); + swipeContainer.setFullSize(isFullSize()); } } } @@ -883,11 +901,18 @@ public void setNeedsContext(boolean needsContext) { this.needsContext = needsContext; } - public boolean getFullSize() { + public boolean isFullSize() { return fullsize == null ? defaultFullsize : fullsize; } - public void requestWebView(BaseFragment fragment, BotWebViewAttachedSheet.WebViewRequestProps props) { + @Override + public boolean setDialog(BottomSheetTabDialog dialog) { + return false; + } + + Drawable verifiedDrawable; + + public void requestWebView(BaseFragment fragment, WebViewRequestProps props) { this.requestProps = props; this.currentAccount = props.currentAccount; this.peerId = props.peerId; @@ -897,13 +922,52 @@ public void requestWebView(BaseFragment fragment, BotWebViewAttachedSheet.WebVie this.buttonText = props.buttonText; this.currentWebApp = props.app; - CharSequence title = UserObject.getUserName(MessagesController.getInstance(currentAccount).getUser(botId)); + TLRPC.User userbot = MessagesController.getInstance(currentAccount).getUser(botId); + CharSequence title = UserObject.getUserName(userbot); try { TextPaint tp = new TextPaint(); tp.setTextSize(dp(20)); title = Emoji.replaceEmoji(title, tp.getFontMetricsInt(), false); } catch (Exception ignore) {} actionBar.setTitle(title); + TLRPC.UserFull userInfo = MessagesController.getInstance(currentAccount).getUserFull(botId); + if (userbot != null && userbot.verified || userInfo != null && userInfo.user != null && userInfo.user.verified) { + verifiedDrawable = getContext().getResources().getDrawable(R.drawable.verified_profile).mutate(); + verifiedDrawable.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_featuredStickers_addButton), PorterDuff.Mode.SRC_IN)); + actionBar.getTitleTextView().setDrawablePadding(dp(2)); + actionBar.getTitleTextView().setRightDrawable(new Drawable() { + @Override + public void draw(@NonNull Canvas canvas) { + canvas.save(); + canvas.translate(0, dp(1)); + verifiedDrawable.setBounds(getBounds()); + verifiedDrawable.draw(canvas); + canvas.restore(); + } + @Override + public void setAlpha(int alpha) { + verifiedDrawable.setAlpha(alpha); + } + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) { + verifiedDrawable.setColorFilter(colorFilter); + } + @Override + public int getOpacity() { + return PixelFormat.TRANSPARENT; + } + + @Override + public int getIntrinsicHeight() { + return dp(20); + } + + @Override + public int getIntrinsicWidth() { + return dp(20); + } + }); + } ActionBarMenu menu = actionBar.createMenu(); menu.removeAllViews(); @@ -1104,6 +1168,37 @@ public void onItemClick(int id) { loadFromResponse(false); } }), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors); + break; + } + case TYPE_WEB_VIEW_BOT_MAIN: { + TLRPC.TL_messages_requestMainWebView req = new TLRPC.TL_messages_requestMainWebView(); + + req.bot = MessagesController.getInstance(currentAccount).getInputUser(props.botId); + req.platform = "android"; + req.peer = fragment instanceof ChatActivity ? ((ChatActivity) fragment).getCurrentUser() != null ? MessagesController.getInputPeer(((ChatActivity) fragment).getCurrentUser()) : MessagesController.getInputPeer(((ChatActivity) fragment).getCurrentChat()) + : MessagesController.getInputPeer(props.botUser); + req.compact = props.compact; + + if (!TextUtils.isEmpty(props.startParam)) { + req.start_param = props.startParam; + req.flags |= 2; + } + + if (themeParams != null) { + req.theme_params = new TLRPC.TL_dataJSON(); + req.theme_params.data = themeParams.toString(); + req.flags |= 1; + } + + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response2, error2) -> AndroidUtilities.runOnUIThread(() -> { + if (error2 != null) { + + } else if (requestProps != null) { + requestProps.applyResponse(response2); + loadFromResponse(false); + } + }), ConnectionsManager.RequestFlagInvokeAfter | ConnectionsManager.RequestFlagFailOnServerErrors); + break; } } } @@ -1129,11 +1224,12 @@ private void loadFromResponse(boolean fromTab) { url = resultUrl.url; } if (url != null && !fromTab) { + MediaDataController.getInstance(currentAccount).increaseWebappRating(requestProps.botId); webViewContainer.loadUrl(currentAccount, url); } AndroidUtilities.runOnUIThread(pollRunnable, pollTimeout); if (swipeContainer != null) { - swipeContainer.setFullSize(getFullSize()); + swipeContainer.setFullSize(isFullSize()); } } @@ -1213,7 +1309,7 @@ public void onLayoutChange(View v, int left, int top, int right, int bottom, int swipeContainer.setSwipeOffsetAnimationDisallowed(false); } - if (showExpanded || getFullSize()) { + if (showExpanded || isFullSize()) { swipeContainer.stickTo(-swipeContainer.getOffsetY() + swipeContainer.getTopActionBarOffsetY(), locker::unlock); } else { new SpringAnimation(swipeContainer, ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer.SWIPE_OFFSET_Y, 0) @@ -1230,6 +1326,11 @@ public void onLayoutChange(View v, int left, int top, int right, int bottom, int super.show(); } + @Override + public void dismiss(boolean tabs) { + dismiss(tabs, null); + } + public long getBotId() { return botId; } @@ -1306,7 +1407,7 @@ public void dismiss(boolean intoTabs, Runnable callback) { LaunchActivity.instance.getBottomSheetTabsOverlay().dismissSheet(this); } else { webViewContainer.destroyWebView(); - swipeContainer.stickTo(swipeContainer.getHeight() + windowView.measureKeyboardHeight() + (getFullSize() ? dp(200) : 0), () -> { + swipeContainer.stickTo(swipeContainer.getHeight() + windowView.measureKeyboardHeight() + (isFullSize() ? dp(200) : 0), () -> { super.dismiss(); if (callback != null) { callback.run(); @@ -1430,11 +1531,16 @@ public void checkNavBarColor() { } } + @Override + public int getNavigationBarColor(int color) { + return navBarColor; + } + public WindowView getWindowView() { return windowView; } - public class WindowView extends SizeNotifierFrameLayout { + public class WindowView extends SizeNotifierFrameLayout implements BottomSheetTabsOverlay.SheetView { public WindowView(Context context) { super(context); } @@ -1545,8 +1651,11 @@ public void setDrawingFromOverlay(boolean drawingFromOverlay) { private final RectF rect = new RectF(); private final Path clipPath = new Path(); - - public float drawInto(Canvas canvas, RectF finalRect, float progress, RectF clipRect) { + public RectF getRect() { + rect.set(swipeContainer.getLeft(), swipeContainer.getTranslationY() + dp(24), swipeContainer.getRight(), getHeight()); + return rect; + } + public float drawInto(Canvas canvas, RectF finalRect, float progress, RectF clipRect, float alpha, boolean opening) { rect.set(swipeContainer.getLeft(), swipeContainer.getTranslationY() + dp(24), swipeContainer.getRight(), getHeight()); AndroidUtilities.lerpCentered(rect, finalRect, progress, clipRect); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/ChatActivityBotWebViewButton.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/ChatActivityBotWebViewButton.java index 83e66d2152c..0596dd524d4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/bots/ChatActivityBotWebViewButton.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/ChatActivityBotWebViewButton.java @@ -18,6 +18,7 @@ import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.RadialProgressView; import org.telegram.ui.Components.SimpleFloatPropertyCompat; +import org.telegram.ui.web.BotWebViewContainer; public class ChatActivityBotWebViewButton extends FrameLayout { public final static SimpleFloatPropertyCompat<ChatActivityBotWebViewButton> PROGRESS_PROPERTY = new SimpleFloatPropertyCompat<>("progress", obj -> obj.progress, ChatActivityBotWebViewButton::setProgress) diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/ChatAttachAlertBotWebViewLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/ChatAttachAlertBotWebViewLayout.java index 0e42f84032e..4df5c85cd6a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/bots/ChatAttachAlertBotWebViewLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/ChatAttachAlertBotWebViewLayout.java @@ -18,7 +18,6 @@ import android.view.View; import android.view.ViewConfiguration; import android.view.WindowManager; -import android.webkit.WebView; import android.widget.FrameLayout; import android.widget.TextView; @@ -42,7 +41,6 @@ import org.telegram.messenger.R; import org.telegram.messenger.SendMessagesHelper; import org.telegram.messenger.UserObject; -import org.telegram.messenger.Utilities; import org.telegram.messenger.browser.Browser; import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.TLRPC; @@ -60,6 +58,7 @@ import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.SimpleFloatPropertyCompat; +import org.telegram.ui.web.BotWebViewContainer; public class ChatAttachAlertBotWebViewLayout extends ChatAttachAlert.AttachAlertLayout implements NotificationCenter.NotificationCenterDelegate { private final static int POLL_PERIOD = 60000; @@ -189,7 +188,7 @@ public ChatAttachAlertBotWebViewLayout(ChatAttachAlert alert, Context context, T otherItem.addSubItem(R.id.menu_tos_bot, R.drawable.menu_intro, LocaleController.getString(R.string.BotWebViewToS)); otherItem.addSubItem(R.id.menu_delete_bot, R.drawable.msg_delete, LocaleController.getString(R.string.BotWebViewDeleteBot)); - webViewContainer = new BotWebViewContainer(context, resourcesProvider, getThemedColor(Theme.key_dialogBackground)) { + webViewContainer = new BotWebViewContainer(context, resourcesProvider, getThemedColor(Theme.key_dialogBackground), true) { @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { @@ -254,6 +253,10 @@ public void setNeedCloseConfirmation(boolean needCloseConfirmation) { this.needCloseConfirmation = needCloseConfirmation; } + public void setAllowSwipes(boolean allowSwipes) { + swipeContainer.setAllowSwipes(allowSwipes); + } + @Override public boolean onDismissWithTouchOutside() { onCheckDismissByUser(); @@ -698,11 +701,11 @@ public static class WebViewSwipeContainer extends FrameLayout { public final static SimpleFloatPropertyCompat<WebViewSwipeContainer> SWIPE_OFFSET_Y = new SimpleFloatPropertyCompat<>("swipeOffsetY", WebViewSwipeContainer::getSwipeOffsetY, WebViewSwipeContainer::setSwipeOffsetY); private final GestureDetectorCompat gestureDetector; - private boolean isScrolling; + public boolean isScrolling; private boolean isSwipeDisallowed; - private float topActionBarOffsetY = ActionBar.getCurrentActionBarHeight(); - private float offsetY = 0; + public float topActionBarOffsetY = ActionBar.getCurrentActionBarHeight(); + public float offsetY = 0; private float pendingOffsetY = -1; private float pendingSwipeOffsetY = Integer.MIN_VALUE; private float swipeOffsetY; @@ -712,7 +715,7 @@ public static class WebViewSwipeContainer extends FrameLayout { private boolean flingInProgress; - private WebView webView; + private BotWebViewContainer.MyWebView webView; private Runnable scrollListener; private Runnable scrollEndListener; @@ -739,6 +742,35 @@ public void setFullSize(boolean fullsize) { } } + private boolean allowFullSizeSwipe; + public void setAllowFullSizeSwipe(boolean value) { + allowFullSizeSwipe = value; + } + + private boolean allowSwipes = true; + public void setAllowSwipes(boolean allowSwipes) { + if (this.allowSwipes != allowSwipes) { + this.allowSwipes = allowSwipes; + } + } + public boolean isAllowedSwipes() { + return allowSwipes; + } + + public boolean shouldWaitWebViewScroll; + public boolean allowedScrollX, allowedScrollY; + public void setShouldWaitWebViewScroll(boolean value) { + shouldWaitWebViewScroll = value; + } + public void allowThisScroll(boolean x, boolean y) { + allowedScrollX = x; + allowedScrollY = y; + } + + public boolean allowingScroll(boolean x) { + return webView == null || !webView.injectedJS || (x ? allowedScrollX : allowedScrollY); + } + public WebViewSwipeContainer(@NonNull Context context) { super(context); @@ -746,14 +778,16 @@ public WebViewSwipeContainer(@NonNull Context context) { gestureDetector = new GestureDetectorCompat(context, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { - if (isSwipeDisallowed || fullsize) { + if (isSwipeDisallowed || !allowSwipes || fullsize && !allowFullSizeSwipe || (shouldWaitWebViewScroll && !allowingScroll(false))) { return false; } if (velocityY >= 700 && (webView == null || webView.getScrollY() == 0)) { flingInProgress = true; - if (swipeOffsetY >= swipeStickyRange) { - if (delegate != null) { + if (swipeOffsetY >= swipeStickyRange || fullsize) { + if (fullsize && allowFullSizeSwipe && drawnSwipeOffsetY == -offsetY + topActionBarOffsetY) { + stickTo(-offsetY + topActionBarOffsetY); + } else if (delegate != null) { delegate.onDismiss(); } } else { @@ -770,7 +804,7 @@ public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float ve @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { - if (!isScrolling && !isSwipeDisallowed) { + if (!isScrolling && !isSwipeDisallowed && allowSwipes && (!shouldWaitWebViewScroll || swipeOffsetY != -offsetY + topActionBarOffsetY || allowingScroll(false))) { if (isKeyboardVisible.provide(null) && swipeOffsetY == -offsetY + topActionBarOffsetY) { isSwipeDisallowed = true; } else if (Math.abs(distanceY) >= touchSlop && Math.abs(distanceY) * 1.5f >= Math.abs(distanceX) && (swipeOffsetY != -offsetY + topActionBarOffsetY || webView == null || distanceY < 0 && webView.getScrollY() == 0)) { @@ -811,7 +845,7 @@ public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float d } swipeOffsetY = MathUtils.clamp(swipeOffsetY, -offsetY + topActionBarOffsetY, getHeight() - offsetY + topActionBarOffsetY); - if (fullsize) { + if (fullsize && !allowFullSizeSwipe) { swipeOffsetY = Math.min(swipeOffsetY, -offsetY + topActionBarOffsetY); } invalidateTranslation(); @@ -824,6 +858,8 @@ public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float d updateStickyRange(); } + private float drawnSwipeOffsetY; + public void setIsKeyboardVisible(GenericProvider<Void, Boolean> isKeyboardVisible) { this.isKeyboardVisible = isKeyboardVisible; } @@ -860,7 +896,7 @@ public void setScrollEndListener(Runnable scrollEndListener) { this.scrollEndListener = scrollEndListener; } - public void setWebView(WebView webView) { + public void setWebView(BotWebViewContainer.MyWebView webView) { this.webView = webView; } @@ -898,7 +934,7 @@ public void setOffsetY(float offsetY) { .addUpdateListener((animation, value, velocity) -> { this.offsetY = value; - float progress = (value - wasOffsetY) / deltaOffsetY; + float progress = deltaOffsetY == 0 ? 1f : (value - wasOffsetY) / deltaOffsetY; if (wasOnTop) { swipeOffsetY = MathUtils.clamp( @@ -937,8 +973,14 @@ public void setOffsetY(float offsetY) { } } + private void updateDrawn() { + drawnSwipeOffsetY = swipeOffsetY; + } + private void invalidateTranslation() { setTranslationY(Math.max(topActionBarOffsetY, offsetY + swipeOffsetY)); + AndroidUtilities.cancelRunOnUIThread(this::updateDrawn); + AndroidUtilities.runOnUIThread(this::updateDrawn); if (scrollListener != null) { scrollListener.run(); } @@ -965,11 +1007,19 @@ public void setDelegate(Delegate delegate) { this.delegate = delegate; } + public boolean stickToEdges = true; + @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (isScrolling && ev.getActionIndex() != 0) { return false; } + if (ev.getAction() == MotionEvent.ACTION_DOWN) { + if (shouldWaitWebViewScroll) { + allowedScrollX = false; + allowedScrollY = false; + } + } MotionEvent rawEvent = MotionEvent.obtain(ev); int index = ev.getActionIndex(); @@ -986,15 +1036,19 @@ public boolean dispatchTouchEvent(MotionEvent ev) { isSwipeDisallowed = false; isScrolling = false; - if (fullsize) { + if (fullsize && !allowFullSizeSwipe) { } else if (flingInProgress) { flingInProgress = false; - } else { + } else if (allowSwipes && (!shouldWaitWebViewScroll || swipeOffsetY != -offsetY + topActionBarOffsetY || allowingScroll(false))) { if (swipeOffsetY <= -swipeStickyRange) { - stickTo(-offsetY + topActionBarOffsetY); - } else if (swipeOffsetY > -swipeStickyRange && swipeOffsetY <= swipeStickyRange) { - stickTo(0); + if (stickToEdges) { + stickTo(-offsetY + topActionBarOffsetY); + } + } else if (swipeOffsetY > -swipeStickyRange && swipeOffsetY <= swipeStickyRange && !fullsize) { + if (stickToEdges) { + stickTo(0); + } } else { if (delegate != null) { delegate.onDismiss(); @@ -1007,6 +1061,7 @@ public boolean dispatchTouchEvent(MotionEvent ev) { if (!superTouch && !detector && ev.getAction() == MotionEvent.ACTION_DOWN) { return true; } + return superTouch || detector; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/WebViewRequestProps.java b/TMessagesProj/src/main/java/org/telegram/ui/bots/WebViewRequestProps.java new file mode 100644 index 00000000000..11edd8c7122 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/bots/WebViewRequestProps.java @@ -0,0 +1,101 @@ +package org.telegram.ui.bots; + + +import android.net.Uri; +import android.text.TextUtils; + +import androidx.annotation.Nullable; + +import org.telegram.messenger.FileLog; +import org.telegram.tgnet.TLObject; +import org.telegram.tgnet.TLRPC; + +public class WebViewRequestProps { + + public int currentAccount; + public long peerId; + public long botId; + public String buttonText; + public String buttonUrl; + public @BotWebViewAttachedSheet.WebViewType int type; + public int replyToMsgId; + public boolean silent; + public TLRPC.BotApp app; + public boolean allowWrite; + public String startParam; + public TLRPC.User botUser; + public int flags; + public boolean compact; + + public TLObject response; + public long responseTime; + + + public static WebViewRequestProps of( + int currentAccount, + long peerId, + long botId, + String buttonText, + String buttonUrl, + @BotWebViewAttachedSheet.WebViewType int type, + int replyToMsgId, + boolean silent, + TLRPC.BotApp app, + boolean allowWrite, + String startParam, + TLRPC.User botUser, + int flags, + boolean compact + ) { + WebViewRequestProps p = new WebViewRequestProps(); + p.currentAccount = currentAccount; + p.peerId = peerId; + p.botId = botId; + p.buttonText = buttonText; + p.buttonUrl = buttonUrl; + p.type = type; + p.replyToMsgId = replyToMsgId; + p.silent = silent; + p.app = app; + p.allowWrite = allowWrite; + p.startParam = startParam; + p.botUser = botUser; + p.flags = flags; + p.compact = compact; + if (!compact && !TextUtils.isEmpty(buttonUrl)) { + try { + Uri uri = Uri.parse(buttonUrl); + p.compact = TextUtils.equals(uri.getQueryParameter("mode"), "compact"); + } catch (Exception e) { + FileLog.e(e); + } + } + return p; + } + + public void applyResponse(TLObject response) { + this.response = response; + this.responseTime = System.currentTimeMillis(); + } + + @Override + public boolean equals(@Nullable Object obj) { + if (!(obj instanceof WebViewRequestProps)) + return false; + final WebViewRequestProps p = (WebViewRequestProps) obj; + return ( + currentAccount == p.currentAccount && + peerId == p.peerId && + botId == p.botId && + TextUtils.equals(buttonUrl, p.buttonUrl) && + type == p.type && + replyToMsgId == p.replyToMsgId && + silent == p.silent && + (app == null ? 0 : app.id) == (p.app == null ? 0 : p.app.id) && + allowWrite == p.allowWrite && + TextUtils.equals(startParam, p.startParam) && + (botUser == null ? 0 : botUser.id) == (p.botUser == null ? 0 : p.botUser.id) && + flags == p.flags + ); + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/AddressBarList.java b/TMessagesProj/src/main/java/org/telegram/ui/web/AddressBarList.java new file mode 100644 index 00000000000..90b0b3a9890 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/AddressBarList.java @@ -0,0 +1,1156 @@ +package org.telegram.ui.web; + +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.AndroidUtilities.lerp; +import static org.telegram.messenger.LocaleController.formatString; +import static org.telegram.messenger.LocaleController.getString; + +import android.app.Activity; +import android.content.Context; +import android.content.SharedPreferences; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.PixelFormat; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.AsyncTask; +import android.text.SpannableStringBuilder; +import android.text.TextUtils; +import android.text.style.URLSpan; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.graphics.ColorUtils; + +import com.google.android.gms.safetynet.SafeBrowsingThreat; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.Emoji; +import org.telegram.messenger.FileLoader; +import org.telegram.messenger.FileLog; +import org.telegram.messenger.ImageLocation; +import org.telegram.messenger.LocaleController; +import org.telegram.messenger.MediaDataController; +import org.telegram.messenger.MessageObject; +import org.telegram.messenger.NotificationCenter; +import org.telegram.messenger.R; +import org.telegram.messenger.UserConfig; +import org.telegram.messenger.Utilities; +import org.telegram.messenger.browser.Browser; +import org.telegram.tgnet.ConnectionsManager; +import org.telegram.tgnet.TLRPC; +import org.telegram.ui.ActionBar.AlertDialog; +import org.telegram.ui.ActionBar.BottomSheetTabs; +import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.Components.BackupImageView; +import org.telegram.ui.Components.CheckBox2; +import org.telegram.ui.Components.CombinedDrawable; +import org.telegram.ui.Components.FlickerLoadingView; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.ScaleStateListAnimator; +import org.telegram.ui.Components.Text; +import org.telegram.ui.Components.UItem; +import org.telegram.ui.Components.UniversalAdapter; +import org.telegram.ui.Components.UniversalRecyclerView; +import org.telegram.ui.WrappedResourceProvider; + +import java.net.IDN; +import java.net.URLDecoder; +import java.text.BreakIterator; +import java.util.ArrayList; +import java.util.Collections; + +public class AddressBarList extends FrameLayout { + + public static final int MAX_RECENTS = 20; + public final int currentAccount = UserConfig.selectedAccount; + + public final WrappedResourceProvider resourceProvider; + + public boolean hideCurrent; + private final Drawable currentViewBackground; + public final FrameLayout currentContainer; + public final FrameLayout currentView; + public final ImageView currentIconView; + public final Drawable currentCopyBackground; + public final ImageView currentCopyView; + public final LinearLayout currentTextContainer; + public final TextView currentTitleView, currentLinkView; + + public final View space; + + public UniversalRecyclerView listView; + + public final ArrayList<String> suggestions = new ArrayList<>(); + + private final BookmarksList bookmarksList; + + public AddressBarList(Context context) { + super(context); + + setWillNotDraw(false); + + listView = new UniversalRecyclerView(context, UserConfig.selectedAccount, 0, this::fillItems, this::itemClick, null, resourceProvider = new WrappedResourceProvider(null)) { + @Override + public void onScrolled(int dx, int dy) { + super.onScrolled(dx, dy); + if (!canScrollVertically(1) && bookmarksList != null && bookmarksList.attached) { + bookmarksList.load(); + } + } + }; + listView.adapter.setApplyBackground(false); + listView.setOverScrollMode(OVER_SCROLL_NEVER); + listView.setPadding(0, 0, 0, 0); + addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL)); + + currentContainer = new FrameLayout(context); + + currentView = new FrameLayout(context); + currentView.setBackground(currentViewBackground = Theme.createRadSelectorDrawable(grayBackgroundColor, rippleColor, 15, 15)); + ScaleStateListAnimator.apply(currentView, .04f, 1.25f); + currentContainer.addView(currentView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.FILL_HORIZONTAL, 12, 0, 12, 15)); + + currentIconView = new ImageView(context); + currentView.addView(currentIconView, LayoutHelper.createFrame(24, 24, Gravity.LEFT | Gravity.CENTER_VERTICAL, 16, 16, 16, 16)); + + currentCopyView = new ImageView(context); + ScaleStateListAnimator.apply(currentCopyView); + currentCopyView.setScaleType(ImageView.ScaleType.CENTER); + currentCopyView.setImageResource(R.drawable.msg_copy); + currentCopyView.setBackground(currentCopyBackground = Theme.createRadSelectorDrawable(0, 0, 6, 6)); + currentView.addView(currentCopyView, LayoutHelper.createFrame(32, 32, Gravity.TOP | Gravity.RIGHT, 14, 14, 14, 14)); + + currentTextContainer = new LinearLayout(context); + currentTextContainer.setOrientation(LinearLayout.VERTICAL); + currentView.addView(currentTextContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL, 54, 9, 54, 9)); + + currentTitleView = new TextView(context); + currentTitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + currentTitleView.setTypeface(AndroidUtilities.bold()); + currentTitleView.setMaxLines(4); + currentTitleView.setEllipsize(TextUtils.TruncateAt.END); + currentTextContainer.addView(currentTitleView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.FILL_HORIZONTAL | Gravity.TOP, 0, 0, 0, 2)); + + currentLinkView = new TextView(context); + currentLinkView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + currentLinkView.setMaxLines(3); + currentLinkView.setEllipsize(TextUtils.TruncateAt.MIDDLE); + currentTextContainer.addView(currentLinkView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.FILL_HORIZONTAL | Gravity.TOP, 0, 0, 0, 0)); + + bookmarksList = new BookmarksList(currentAccount, () -> listView.adapter.update(true)); + + space = new View(context) { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(dp(6), MeasureSpec.EXACTLY)); + } + }; + + setColors(Theme.getColor(Theme.key_iv_background), AndroidUtilities.computePerceivedBrightness(Theme.getColor(Theme.key_iv_background)) >= .721f ? Color.BLACK : Color.WHITE); + setOpenProgress(0f); + } + + private void clearRecentSearches(View view) { + new AlertDialog.Builder(getContext()) + .setTitle(getString(R.string.WebRecentClearTitle)) + .setMessage(getString(R.string.WebRecentClearText)) + .setPositiveButton(getString(R.string.OK), (di, w) -> { + AddressBarList.clearRecentSearches(getContext()); + listView.adapter.update(true); + }).setNegativeButton(getString(R.string.Cancel), null) + .show(); + } + + public void fillItems(ArrayList<UItem> items, UniversalAdapter adapter) { + if (!hideCurrent && suggestions.isEmpty()) { + items.add(UItem.asCustom(currentContainer)); + } + + final ArrayList<String> queries = getRecentSearches(getContext()); + final int count = suggestions.size() + queries.size(); + if (!suggestions.isEmpty()) { + items.add(UItem.asCustom(space)); + } + for (int i = 0; i < suggestions.size(); ++i) { + final String query = suggestions.get(i); + final boolean top = i == 0; + final boolean bottom = i == suggestions.size() - 1; + items.add(Address2View.Factory.as(1, query, v -> { + if (onQueryInsertClick != null) { + onQueryInsertClick.run(query); + } + }, top, bottom, this)); + } + if (!queries.isEmpty()) { + items.add(UItem.asGraySection(getString(R.string.WebSectionRecent), getString(R.string.WebRecentClear), this::clearRecentSearches)); + for (int i = 0; i < queries.size(); ++i) { + final String query = queries.get(i); + final boolean top = i == 0 ; + final boolean bottom = i == queries.size() - 1; + items.add(Address2View.Factory.as(0, query, v -> { + if (onQueryInsertClick != null) { + onQueryInsertClick.run(query); + } + }, top, bottom, this)); + } + } + if (bookmarksList != null && !bookmarksList.links.isEmpty()) { + items.add(UItem.asGraySection(getString(R.string.WebSectionBookmarks))); + for (int i = 0; i < bookmarksList.links.size(); ++i) { + final MessageObject msg = bookmarksList.links.get(i); + final String url = getLink(msg); + if (TextUtils.isEmpty(url)) continue; + items.add(BookmarkView.Factory.as(msg, true)); + } + if (!bookmarksList.endReached) { + items.add(UItem.asFlicker(items.size(), FlickerLoadingView.BROWSER_BOOKMARK)); + items.add(UItem.asFlicker(items.size(), FlickerLoadingView.BROWSER_BOOKMARK)); + items.add(UItem.asFlicker(items.size(), FlickerLoadingView.BROWSER_BOOKMARK)); + } + } +// items.add(UItem.asCustom(footer)); +// if (clearView != null) { +// clearView.setVisibility(count > 0 && !queries.isEmpty() ? View.VISIBLE : View.GONE); +// } +// if (poweredView != null) { +// poweredView.setVisibility(View.VISIBLE); +// poweredView.setText(formatString(R.string.WebPoweredBy, SearchEngine.getCurrent().name)); +// } + } + + public static String getLink(MessageObject msg) { + String url = null; + if (msg.messageOwner != null && msg.messageOwner.media instanceof TLRPC.TL_messageMediaWebPage) { + url = msg.messageOwner.media.webpage.url; + } else if (msg.messageText != null && msg.messageText.length() > 0) { + SpannableStringBuilder ssb = new SpannableStringBuilder(msg.messageText); + URLSpan[] links = ssb.getSpans(0, ssb.length(), URLSpan.class); + for (int i = 0; i < links.length; ++i) { + String this_url = links[i].getURL(); + if (this_url != null && !(this_url.startsWith("@") || this_url.startsWith("#") || this_url.startsWith("$"))) { + return this_url; + } + } + } + return url; + } + + public void itemClick(UItem item, View view, int position, float x, float y) { + if (item.instanceOf(Address2View.Factory.class)) { + String query = item.text.toString(); + if (onQueryClick != null) { + onQueryClick.run(query); + } + } else if (item.instanceOf(BookmarkView.Factory.class)) { + if (onURLClick != null) { + try { + onURLClick.run(getLink((MessageObject) item.object2)); + } catch (Exception e) { + FileLog.e(e); + } + } + } + } + + private int backgroundColor, listBackgroundColor, grayBackgroundColor, textColor, rippleColor; + + @Override + protected void dispatchDraw(Canvas canvas) { + canvas.save(); + canvas.clipRect(0, 0, getWidth(), getHeight() * openProgress); + canvas.drawColor(listBackgroundColor); + super.dispatchDraw(canvas); + canvas.restore(); + } + + private float openProgress = 0f; + public void setOpenProgress(float progress) { + if (Math.abs(openProgress - progress) > 0.0001f) { + this.openProgress = progress; +// for (int i = 0; i < listView.getChildCount(); ++i) { +// View child = listView.getChildAt(i); +// final float alpha = AndroidUtilities.cascade(openProgress, i, listView.getChildCount(), 3); +// child.setAlpha(alpha); +// child.setTranslationY(-dp(Math.min(48, 8 + 6 * i)) * (1 - alpha)); +// } + invalidate(); + } + } + + public boolean opened; + public void setOpened(boolean value) { + if (opened = value && bookmarksList != null) { + bookmarksList.attach(); + } + } + + private float[] hsv = new float[3]; + + public void setColors(int backgroundColor, int textColor) { + if (this.backgroundColor != backgroundColor) { + this.backgroundColor = backgroundColor; + invalidate(); + } + this.textColor = textColor; + + final float dark = AndroidUtilities.computePerceivedBrightness(backgroundColor) >= .721f ? 0f : 1f; + grayBackgroundColor = ColorUtils.blendARGB(backgroundColor, textColor, lerp(.05f, .12f, dark)); + listBackgroundColor = backgroundColor; + rippleColor = ColorUtils.blendARGB(backgroundColor, textColor, lerp(.12f, .22f, dark)); + + Theme.setSelectorDrawableColor(currentViewBackground, grayBackgroundColor, false); + Theme.setSelectorDrawableColor(currentViewBackground, rippleColor, true); + currentView.invalidate(); + currentTitleView.setTextColor(textColor); + currentLinkView.setTextColor(Theme.multAlpha(textColor, .6f)); + if (currentIconView.getColorFilter() != null) { + currentIconView.setColorFilter(new PorterDuffColorFilter(textColor, PorterDuff.Mode.SRC_IN)); + } + currentCopyView.setColorFilter(new PorterDuffColorFilter(textColor, PorterDuff.Mode.SRC_IN)); + Theme.setSelectorDrawableColor(currentCopyBackground, Theme.multAlpha(rippleColor, 1.5f), true); + + final int greySectionBackground = Theme.blendOver(backgroundColor, Theme.multAlpha(textColor, 0.05f)); + final int greySectionText = Theme.blendOver(backgroundColor, Theme.multAlpha(textColor, 0.55f)); + resourceProvider.sparseIntArray.put(Theme.key_windowBackgroundWhite, listBackgroundColor); + resourceProvider.sparseIntArray.put(Theme.key_windowBackgroundWhiteBlackText, textColor); + resourceProvider.sparseIntArray.put(Theme.key_graySection, greySectionBackground); + resourceProvider.sparseIntArray.put(Theme.key_graySectionText, greySectionText); + resourceProvider.sparseIntArray.put(Theme.key_actionBarDefaultSubmenuBackground, Theme.multAlpha(textColor, .2f)); + resourceProvider.sparseIntArray.put(Theme.key_listSelector, Theme.multAlpha(textColor, lerp(0.05f, 0.12f, dark))); + listView.invalidateViews(); + } + + private Runnable onCurrentClick; + private Utilities.Callback<String> onQueryClick; + private Utilities.Callback<String> onQueryInsertClick; + private Utilities.Callback<String> onURLClick; + + public void setCurrent( + Bitmap favicon, + String title, + String url, + Runnable onCurrentClick, + Utilities.Callback<String> onQueryClick, + Utilities.Callback<String> onQueryInsertClick, + Utilities.Callback<String> onURLClick, + View.OnClickListener onCopyClick + ) { + if (favicon == null) { + currentIconView.setImageResource(R.drawable.msg_language); + currentIconView.setColorFilter(new PorterDuffColorFilter(textColor, PorterDuff.Mode.SRC_IN)); + } else { + currentIconView.setImageDrawable(new BitmapDrawable(getContext().getResources(), favicon)); + currentIconView.setColorFilter(null); + } + currentTitleView.setText(Emoji.replaceEmoji(title, currentTitleView.getPaint().getFontMetricsInt(), false)); + + String formattedUrl = url; + try { + try { + Uri uri = Uri.parse(formattedUrl); + formattedUrl = Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null); + } catch (Exception e) { + FileLog.e(e, false); + } + formattedUrl = URLDecoder.decode(formattedUrl.replaceAll("\\+", "%2b"), "UTF-8"); + } catch (Exception e) { + FileLog.e(e); + } + currentLinkView.setText(Emoji.replaceEmoji(formattedUrl, currentLinkView.getPaint().getFontMetricsInt(), false)); + + this.onCurrentClick = onCurrentClick; + this.onQueryClick = onQueryClick; + this.onQueryInsertClick = onQueryInsertClick; + this.onURLClick = onURLClick; + currentView.setOnClickListener(v -> { + hideCurrent = true; + if (onCurrentClick != null) { + onCurrentClick.run(); + } + listView.adapter.update(true); + }); + currentCopyView.setOnClickListener(onCopyClick); + + hideCurrent = false; + setInput(null); + listView.adapter.update(true); + listView.scrollToPosition(0); + } + + private AsyncTask<String, Void, String> lastTask; + public void setInput(String input) { + if (lastTask != null) { + lastTask.cancel(true); + lastTask = null; + } + + final boolean hadSuggestions = !suggestions.isEmpty(); + + if (TextUtils.isEmpty(input)) { + suggestions.clear(); + listView.adapter.update(true); + if (hadSuggestions != !suggestions.isEmpty()) { + listView.layoutManager.scrollToPositionWithOffset(0, 0); + } + return; + } + + lastTask = new HttpGetTask(result -> AndroidUtilities.runOnUIThread(() -> { + suggestions.clear(); + suggestions.addAll(SearchEngine.getCurrent().extractSuggestions(result)); + listView.adapter.update(true); + if (hadSuggestions != !suggestions.isEmpty()) { + listView.layoutManager.scrollToPositionWithOffset(0, 0); + } + })).execute(SearchEngine.getCurrent().getAutocompleteURL(input)); + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if (openProgress < .3f) { + return false; + } + return super.dispatchTouchEvent(ev); + } + +// public static class AddressView extends FrameLayout { +// +// public final ImageView iconView; +// public final BackupImageView iconView2; +// public final TextView textView; +// public final ImageView insertView; +// +// public AddressView(Context context) { +// super(context); +// +// ScaleStateListAnimator.apply(this, .04f, 1.25f); +// +// iconView = new ImageView(context); +// iconView.setScaleType(ImageView.ScaleType.CENTER); +// iconView.setImageResource(R.drawable.msg_clear_recent); +// addView(iconView, LayoutHelper.createFrame(32, 32, Gravity.CENTER_VERTICAL | Gravity.LEFT, 10, 8, 8, 8)); +// +// iconView2 = new BackupImageView(context); +// iconView2.setVisibility(View.GONE); +// addView(iconView2, LayoutHelper.createFrame(32, 32, Gravity.CENTER_VERTICAL | Gravity.LEFT, 10, 8, 8, 8)); +// +// textView = new TextView(context); +// textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); +// addView(textView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL | Gravity.LEFT, 59, 8, 54, 8)); +// +// insertView = new ImageView(context); +// insertView.setScaleType(ImageView.ScaleType.CENTER); +// insertView.setImageResource(R.drawable.menu_browser_arrowup); +// addView(insertView, LayoutHelper.createFrame(32, 32, Gravity.CENTER_VERTICAL | Gravity.RIGHT, 8, 8, 8, 8)); +// } +// +// public void setTopBottom(int grayBackgroundColor, int rippleColor, boolean top, boolean bottom) { +// setBackground(Theme.createRadSelectorDrawable(grayBackgroundColor, rippleColor, top ? 15 : 1, bottom ? 15 : 1)); +// } +// +// public void setColors(int backgroundColor, int textColor) { +// textView.setTextColor(textColor); +// iconView.setColorFilter(new PorterDuffColorFilter(textColor, PorterDuff.Mode.SRC_IN)); +// insertView.setColorFilter(new PorterDuffColorFilter(textColor, PorterDuff.Mode.SRC_IN)); +// insertView.setBackground(Theme.createRadSelectorDrawable(0, Theme.multAlpha(textColor, .15f), dp(4), dp(4))); +// } +// +// public void set(int type, String query, View.OnClickListener onInsertClick, boolean top, boolean bottom, AddressBarList parent, boolean divider) { +// iconView.setVisibility(View.VISIBLE); +// iconView2.setVisibility(View.GONE); +// setColors(parent.listBackgroundColor, parent.textColor); +// iconView.setImageResource(type == 0 ? R.drawable.msg_clear_recent : R.drawable.msg_search); +// textView.setText(query); +// insertView.setOnClickListener(onInsertClick); +// setTopBottom(parent.grayBackgroundColor, parent.rippleColor, top, bottom); +// dividerPaint.setColor(parent.listBackgroundColor); +// setWillNotDraw(!(needDivider = divider)); +// } +// +// private final Paint dividerPaint = new Paint(Paint.ANTI_ALIAS_FLAG); +// private boolean needDivider; +// +// @Override +// protected void onDraw(Canvas canvas) { +// super.onDraw(canvas); +// if (needDivider) { +// canvas.drawRect(dp(59), getHeight() - Math.max(dp(.66f), 1), getWidth(), getHeight(), dividerPaint); +// } +// } +// +// @Override +// protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { +// super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), heightMeasureSpec); +// } +// +// public static class Factory extends UItem.UItemFactory<AddressView> { +// @Override +// public AddressView createView(Context context, int currentAccount, int classGuid, Theme.ResourcesProvider resourcesProvider) { +// return new AddressView(context); +// } +// +// @Override +// public void bindView(View view, UItem item, boolean divider) { +// ((AddressView) view).set(item.intValue, item.text.toString(), item.clickCallback, item.accent, item.red, (AddressBarList) item.object, divider); +// } +// +// public static UItem as(int type, String query, View.OnClickListener onInsertClick, boolean top, boolean bottom, AddressBarList parent) { +// UItem item = UItem.ofFactory(AddressView.Factory.class); +// item.intValue = type; +// item.text = query; +// item.clickCallback = onInsertClick; +// item.accent = top; +// item.red = bottom; +// item.object = parent; +// return item; +// } +// } +// +// } + + + public static class Address2View extends FrameLayout { + + public final ImageView iconView; + public final TextView textView; + public final ImageView insertView; + + public Address2View(Context context) { + super(context); + +// ScaleStateListAnimator.apply(this, .04f, 1.25f); + + iconView = new ImageView(context); + iconView.setScaleType(ImageView.ScaleType.CENTER); + iconView.setImageResource(R.drawable.menu_clear_recent); + addView(iconView, LayoutHelper.createFrame(32, 32, Gravity.CENTER_VERTICAL | Gravity.LEFT, 10, 8, 8, 8)); + + textView = new TextView(context); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + addView(textView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL | Gravity.LEFT, 64, 8, 64, 8)); + + insertView = new ImageView(context); + insertView.setScaleType(ImageView.ScaleType.CENTER); + insertView.setImageResource(R.drawable.menu_browser_arrowup); + addView(insertView, LayoutHelper.createFrame(32, 32, Gravity.CENTER_VERTICAL | Gravity.RIGHT, 8, 8, 10, 8)); + } + + public void setTopBottom(int grayBackgroundColor, int rippleColor, boolean top, boolean bottom) { +// setBackground(Theme.createRadSelectorDrawable(grayBackgroundColor, rippleColor, top ? 15 : 1, bottom ? 15 : 1)); + } + + public void setColors(int backgroundColor, int textColor) { + textView.setTextColor(textColor); + iconView.setColorFilter(new PorterDuffColorFilter(Theme.multAlpha(textColor, .6f), PorterDuff.Mode.SRC_IN)); + insertView.setColorFilter(new PorterDuffColorFilter(Theme.multAlpha(textColor, .6f), PorterDuff.Mode.SRC_IN)); + insertView.setBackground(Theme.createRadSelectorDrawable(0, Theme.multAlpha(textColor, .15f), dp(4), dp(4))); + } + + public void set(int type, String query, View.OnClickListener onInsertClick, boolean top, boolean bottom, AddressBarList parent, boolean divider) { + iconView.setVisibility(View.VISIBLE); + setColors(parent.listBackgroundColor, parent.textColor); + iconView.setImageResource(type == 0 ? R.drawable.msg_clear_recent : R.drawable.msg_search); + textView.setText(query); + insertView.setOnClickListener(onInsertClick); + setTopBottom(parent.grayBackgroundColor, parent.rippleColor, top, bottom); + dividerPaint.setColor(Theme.multAlpha(parent.textColor, .1f)); + setWillNotDraw(!(needDivider = divider)); + } + + public void setAsShowMore(AddressBarList parent) { + iconView.setImageResource(R.drawable.arrow_more); + iconView.setColorFilter(new PorterDuffColorFilter(parent.textColor, PorterDuff.Mode.SRC_IN)); + } + + private final Paint dividerPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private boolean needDivider; + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + if (needDivider) { + canvas.drawRect(dp(64), getHeight() - Math.max(dp(.66f), 1), getWidth(), getHeight(), dividerPaint); + } + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), heightMeasureSpec); + } + + public static class Factory extends UItem.UItemFactory<Address2View> { + @Override + public Address2View createView(Context context, int currentAccount, int classGuid, Theme.ResourcesProvider resourcesProvider) { + return new Address2View(context); + } + + @Override + public void bindView(View view, UItem item, boolean divider) { + Address2View cell = (Address2View) view; + if (item.object == null) { + cell.setAsShowMore((AddressBarList) item.object2); + } else { + cell.set(item.intValue, item.text.toString(), item.clickCallback, item.accent, item.red, (AddressBarList) item.object2, divider); + } + } + + public static UItem as(int type, String query, View.OnClickListener onInsertClick, boolean top, boolean bottom, AddressBarList parent) { + UItem item = UItem.ofFactory(Address2View.Factory.class); + item.intValue = type; + item.text = query; + item.clickCallback = onInsertClick; + item.accent = top; + item.red = bottom; + item.object = true; + item.object2 = parent; + return item; + } + + public static UItem asMore() { + UItem item = UItem.ofFactory(Address2View.Factory.class); + item.object = null; + return item; + } + } + + } + + + public static class BookmarkView extends FrameLayout implements Theme.Colorable { + + private final Theme.ResourcesProvider resourcesProvider; + + public final BackupImageView iconView; + public final LinearLayout textLayout; + public final FrameLayout.LayoutParams textLayoutParams; + public final TextView textView, subtextView, timeView; + public final ImageView insertView; + + public final CheckBox2 checkBox; + + public BookmarkView(Context context, Theme.ResourcesProvider resourcesProvider) { + super(context); + + this.resourcesProvider = resourcesProvider; + ScaleStateListAnimator.apply(this, .03f, 1.25f); + + iconView = new BackupImageView(context); + iconView.setRoundRadius(dp(6)); + addView(iconView, LayoutHelper.createFrame(32, 32, Gravity.CENTER_VERTICAL | Gravity.LEFT, 10, 8, 8, 8)); + + textLayout = new LinearLayout(context); + textLayout.setOrientation(LinearLayout.VERTICAL); + + textView = new TextView(context); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + textView.setMaxLines(1); + textView.setEllipsize(TextUtils.TruncateAt.END); + textLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.LEFT)); + + subtextView = new TextView(context); + subtextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + subtextView.setMaxLines(1); + subtextView.setEllipsize(TextUtils.TruncateAt.END); + textLayout.addView(subtextView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.LEFT, 0, 3, 0, 0)); + + addView(textLayout, textLayoutParams = LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL | Gravity.LEFT, 64, 0, 70, 0)); + + timeView = new TextView(context); + timeView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + timeView.setMaxLines(1); + timeView.setEllipsize(TextUtils.TruncateAt.END); + timeView.setGravity(Gravity.RIGHT); + timeView.setTextAlignment(TEXT_ALIGNMENT_VIEW_END); + addView(timeView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL | Gravity.RIGHT, 64, -10, 12, 0)); + + insertView = new ImageView(context); + insertView.setScaleType(ImageView.ScaleType.CENTER); + insertView.setImageResource(R.drawable.attach_arrow_right); + addView(insertView, LayoutHelper.createFrame(32, 32, Gravity.CENTER_VERTICAL | Gravity.RIGHT, 8, 8, 8, 8)); + + checkBox = new CheckBox2(getContext(), 21, resourcesProvider) { + @Override + public void invalidate() { + super.invalidate(); + BookmarkView.this.invalidate(); + } + }; + checkBox.setColor(-1, Theme.key_windowBackgroundWhite, Theme.key_checkboxCheck); + checkBox.setDrawUnchecked(false); + checkBox.setDrawBackgroundAsArc(3); + addView(checkBox, LayoutHelper.createFrame(24, 24, Gravity.CENTER_VERTICAL | Gravity.LEFT, 10 + 16, 12, 0, 0)); + } + + @Override + public void updateColors() { + final int backgroundColor = Theme.getColor(Theme.key_windowBackgroundWhite, resourcesProvider); + final int textColor = Theme.getColor(Theme.key_windowBackgroundWhiteBlackText, resourcesProvider); + + setColors(backgroundColor, textColor); + dividerPaint.setColor(Theme.multAlpha(textColor, .1f)); + iconView.invalidate(); + } + + private int textColor; + public void setColors(int backgroundColor, int textColor) { + this.textColor = textColor; + textView.setTextColor(textColor); + subtextView.setTextColor(Theme.blendOver(backgroundColor, Theme.multAlpha(textColor, .55f))); + timeView.setTextColor(Theme.multAlpha(textColor, .55f)); + insertView.setColorFilter(new PorterDuffColorFilter(Theme.multAlpha(textColor, .6f), PorterDuff.Mode.SRC_IN)); + } + + public void set(MessageObject messageObject, boolean withArrow, String query, boolean checked, boolean divider) { + updateColors(); + TLRPC.WebPage webPage = MessageObject.getMedia(messageObject) != null ? MessageObject.getMedia(messageObject).webpage : null; + final String url = webPage != null ? webPage.url : getLink(messageObject); + final String domain = AndroidUtilities.getHostAuthority(url, true); + final WebMetadataCache.WebMetadata meta = WebMetadataCache.getInstance().get(domain); + if (webPage != null && webPage.title != null) { + textView.setText(webPage.title); + } else if (webPage != null && webPage.site_name != null) { + textView.setText(webPage.site_name); + } else if (meta != null && !TextUtils.isEmpty(meta.title)) { + textView.setText(meta.title); + } else if (meta != null && !TextUtils.isEmpty(meta.sitename)) { + textView.setText(meta.sitename); + } else { + try { + String[] segments = Uri.parse(url).getHost().split("\\."); + String host = segments[segments.length - 2]; + textView.setText(host.substring(0, 1).toUpperCase() + host.substring(1)); + } catch (Exception e) { + textView.setText(""); + } + } + iconView.clearImage(); + if (meta != null && meta.favicon != null) { + iconView.setImageBitmap(meta.favicon); + } else if (webPage != null && webPage.photo != null) { + iconView.setImage( + ImageLocation.getForPhoto(FileLoader.getClosestPhotoSizeWithSize(webPage.photo.sizes, dp(32), true, null, true), webPage.photo), dp(32)+"_"+dp(32), + ImageLocation.getForPhoto(FileLoader.getClosestPhotoSizeWithSize(webPage.photo.sizes, dp(32), true, null, false), webPage.photo), dp(32)+"_"+dp(32), 0, messageObject); + } else { + final String s = textView.getText() == null ? "" : textView.getText().toString(); + final BreakIterator bi = BreakIterator.getCharacterInstance(); + bi.setText(s); + final String firstLetter = s.isEmpty() ? "" : s.substring(bi.first(), bi.next()); + CombinedDrawable drawable = new CombinedDrawable( + Theme.createRoundRectDrawable(dp(6), Theme.multAlpha(textColor, .1f)), + new Drawable() { + private final Text text = new Text(firstLetter, 14, AndroidUtilities.bold()); + @Override + public void draw(@NonNull Canvas canvas) { + text.draw(canvas, getBounds().centerX() - text.getCurrentWidth() / 2f, getBounds().centerY(), textColor, 1f); + } + @Override + public void setAlpha(int alpha) {} + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) {} + @Override + public int getOpacity() { + return PixelFormat.TRANSPARENT; + } + } + ); + drawable.setCustomSize(dp(28), dp(28)); + iconView.setImageDrawable(drawable); + } + timeView.setVisibility(View.GONE); + insertView.setVisibility(withArrow ? View.VISIBLE : View.GONE); + final String link = webPage != null ? webPage.url : getLink(messageObject); + String formattedUrl = link; + try { + try { + Uri uri = Uri.parse(formattedUrl); + formattedUrl = Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null); + } catch (Exception e) { + FileLog.e(e, false); + } + formattedUrl = URLDecoder.decode(formattedUrl.replaceAll("\\+", "%2b"), "UTF-8"); + formattedUrl = BottomSheetTabs.urlWithoutFragment(formattedUrl); + } catch (Exception e) { + FileLog.e(e); + } + subtextView.setText(formattedUrl); + if (!TextUtils.isEmpty(query)) { + textView.setText(AndroidUtilities.highlightText(textView.getText(), query, resourcesProvider)); + subtextView.setText(AndroidUtilities.highlightText(subtextView.getText(), query, resourcesProvider)); + } + textView.setText(Emoji.replaceEmoji(textView.getText(), textView.getPaint().getFontMetricsInt(), false)); + subtextView.setText(Emoji.replaceEmoji(subtextView.getText(), subtextView.getPaint().getFontMetricsInt(), false)); + checkBox.setChecked(checked, false); + textLayoutParams.rightMargin = dp(52); + textLayout.setLayoutParams(textLayoutParams); + setWillNotDraw(!(needDivider = divider)); + } + + + public void set(BrowserHistory.Entry entry, String query, boolean divider) { + updateColors(); + if (entry == null) return; + final String url = entry.url; + final WebMetadataCache.WebMetadata meta = entry.meta; + if (meta != null && !TextUtils.isEmpty(meta.title)) { + textView.setText(meta.title); + } else if (meta != null && !TextUtils.isEmpty(meta.sitename)) { + textView.setText(meta.sitename); + } else { + try { + String[] segments = Uri.parse(url).getHost().split("\\."); + String host = segments[segments.length - 2]; + textView.setText(host.substring(0, 1).toUpperCase() + host.substring(1)); + } catch (Exception e) { + textView.setText(""); + } + } + if (meta != null && meta.favicon != null) { + iconView.setImageBitmap(meta.favicon); + } else { + final String s = textView.getText() == null ? "" : textView.getText().toString(); + final BreakIterator bi = BreakIterator.getCharacterInstance(); + bi.setText(s); + final String firstLetter = s.isEmpty() ? "" : s.substring(bi.first(), bi.next()); + CombinedDrawable drawable = new CombinedDrawable( + Theme.createRoundRectDrawable(dp(6), Theme.multAlpha(textColor, .1f)), + new Drawable() { + private final Text text = new Text(firstLetter, 14, AndroidUtilities.bold()); + @Override + public void draw(@NonNull Canvas canvas) { + text.draw(canvas, getBounds().centerX() - text.getCurrentWidth() / 2f, getBounds().centerY(), textColor, 1f); + } + @Override + public void setAlpha(int alpha) {} + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) {} + @Override + public int getOpacity() { + return PixelFormat.TRANSPARENT; + } + } + ); + drawable.setCustomSize(dp(28), dp(28)); + iconView.setImageDrawable(drawable); + } + insertView.setVisibility(View.GONE); + String formattedUrl = url; + try { + try { + Uri uri = Uri.parse(formattedUrl); + formattedUrl = Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null); + } catch (Exception e) { + FileLog.e(e, false); + } + formattedUrl = URLDecoder.decode(formattedUrl.replaceAll("\\+", "%2b"), "UTF-8"); + } catch (Exception e) { + FileLog.e(e); + } + subtextView.setText(formattedUrl); + if (!TextUtils.isEmpty(query)) { + textView.setText(AndroidUtilities.highlightText(textView.getText(), query, resourcesProvider)); + subtextView.setText(AndroidUtilities.highlightText(subtextView.getText(), query, resourcesProvider)); + } + textView.setText(Emoji.replaceEmoji(textView.getText(), textView.getPaint().getFontMetricsInt(), false)); + subtextView.setText(Emoji.replaceEmoji(subtextView.getText(), subtextView.getPaint().getFontMetricsInt(), false)); + timeView.setText(LocaleController.getInstance().getFormatterDay().format(entry.time)); + checkBox.setChecked(false, false); + textLayoutParams.rightMargin = dp(70); + textLayout.setLayoutParams(textLayoutParams); + setWillNotDraw(!(needDivider = divider)); + } + + public void setChecked(boolean checked) { + checkBox.setChecked(checked, true); + } + + private final Paint dividerPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private boolean needDivider; + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + if (needDivider) { + canvas.drawRect(dp(59), getHeight() - Math.max(dp(.66f), 1), getWidth(), getHeight(), dividerPaint); + } + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure( + MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(dp(56), MeasureSpec.EXACTLY) + ); + } + + public static class Factory extends UItem.UItemFactory<BookmarkView> { + @Override + public BookmarkView createView(Context context, int currentAccount, int classGuid, Theme.ResourcesProvider resourcesProvider) { + return new BookmarkView(context, resourcesProvider); + } + + @Override + public void bindView(View view, UItem item, boolean divider) { + BookmarkView cell = (BookmarkView) view; + if (item.object2 instanceof MessageObject) { + cell.set((MessageObject) (item.object2), item.accent, item.subtext == null ? null : item.subtext.toString(), item.checked, divider); + } else if (item.object2 instanceof BrowserHistory.Entry) { + cell.set((BrowserHistory.Entry) (item.object2), item.subtext == null ? null : item.subtext.toString(), divider); + } + } + + public static UItem as(int type, String query, boolean withArrow) { + UItem item = UItem.ofFactory(BookmarkView.Factory.class); + item.intValue = type; + item.accent = withArrow; + item.subtext = query; + return item; + } + + public static UItem as(MessageObject msg, boolean withArrow) { + UItem item = UItem.ofFactory(BookmarkView.Factory.class); + item.intValue = 3; + item.accent = withArrow; + item.object2 = msg; + return item; + } + + public static UItem as(MessageObject msg, boolean withArrow, String query) { + UItem item = UItem.ofFactory(BookmarkView.Factory.class); + item.intValue = 3; + item.accent = withArrow; + item.object2 = msg; + item.subtext = query; + return item; + } + + public static UItem as(BrowserHistory.Entry historyEntry, String query) { + UItem item = UItem.ofFactory(BookmarkView.Factory.class); + item.intValue = 3; + item.accent = false; + item.object2 = historyEntry; + item.subtext = query; + return item; + } + + + @Override + public boolean equals(UItem a, UItem b) { + return a.object2 == b.object2 && TextUtils.isEmpty(a.subtext) == TextUtils.isEmpty(b.subtext); + } + + @Override + public boolean contentsEquals(UItem a, UItem b) { + return a.object2 == b.object2 && TextUtils.equals(a.subtext, b.subtext); + } + } + + } + + private static class QueryEntry { + public final String query; + public long lastUsage; + public double rank; + public QueryEntry(String query, long time) { + this.query = query; + this.lastUsage = time; + } + } + + public static ArrayList<String> getRecentSearches(Context context) { + final SharedPreferences pref = context.getSharedPreferences("webhistory", Activity.MODE_PRIVATE); + final ArrayList<String> queries = new ArrayList<>(); + final String json = pref.getString("queries_json", null); + if (json != null) { + try { + final ArrayList<QueryEntry> entries = new ArrayList<>(); + final JSONArray arr = new JSONArray(json); + for (int i = 0; i < arr.length(); ++i) { + final JSONObject obj = arr.getJSONObject(i); + final QueryEntry entry = new QueryEntry( + obj.optString("name"), + obj.optLong("usage", System.currentTimeMillis()) + ); + entry.rank = obj.optDouble("rank", 0.0); + entries.add(entry); + } + Collections.sort(entries, (a, b) -> (int) (b.rank - a.rank)); + for (QueryEntry e : entries) { + if (queries.size() >= MAX_RECENTS) break; + queries.add(e.query); + } + } catch (Exception e) {} + } + return queries; + } + + public static void pushRecentSearch(Context context, String query) { + final SharedPreferences pref = context.getSharedPreferences("webhistory", Activity.MODE_PRIVATE); + final String json = pref.getString("queries_json", null); + final ArrayList<QueryEntry> entries = new ArrayList<>(); + if (json != null) { + try { + final JSONArray arr = new JSONArray(json); + for (int i = 0; i < arr.length(); ++i) { + final JSONObject obj = arr.getJSONObject(i); + final QueryEntry entry = new QueryEntry( + obj.optString("name"), + obj.optLong("usage", System.currentTimeMillis()) + ); + entry.rank = obj.optDouble("rank", 0.0); + entries.add(entry); + } + Collections.sort(entries, (a, b) -> (int) (b.rank - a.rank)); + } catch (Exception e) { + FileLog.e(e); + } + } + try { + QueryEntry entry = null; + for (int j = 0; j < entries.size(); ++j) { + QueryEntry e = entries.get(j); + if (TextUtils.equals(e.query, query)) { + entry = e; + break; + } + } + final long now = System.currentTimeMillis(); + if (entry != null) { + entry.rank += Math.exp((now - entry.lastUsage) / 2419200.0); + } else { + entry = new QueryEntry(query, now); + entries.add(entry); + } + entry.lastUsage = now; + + JSONArray finalArray = new JSONArray(); + for (int i = 0; i < Math.min(entries.size(), MAX_RECENTS); ++i) { + QueryEntry e = entries.get(i); + JSONObject obj = new JSONObject(); + obj.put("name", e.query); + obj.put("rank", e.rank); + obj.put("usage", e.lastUsage); + finalArray.put(obj); + } + pref.edit().putString("queries_json", finalArray.toString()).apply(); + } catch (Exception e) { + FileLog.e(e); + } + } + + public static void clearRecentSearches(Context context) { + final SharedPreferences pref = context.getSharedPreferences("webhistory", Activity.MODE_PRIVATE); + pref.edit().remove("queries_json").apply(); + } + + public static class BookmarksList implements NotificationCenter.NotificationCenterDelegate { + + public final ArrayList<MessageObject> links = new ArrayList<MessageObject>(); + + private final int currentAccount; + private final Runnable whenUpdated; + private final String query; + private int guid = ConnectionsManager.generateClassGuid(); + + public BookmarksList(int currentAccount, Runnable whenUpdated) { + this(currentAccount, null, whenUpdated); + } + + public BookmarksList(int currentAccount, String query, Runnable whenUpdated) { + this.currentAccount = currentAccount; + this.query = query; + this.whenUpdated = whenUpdated; + } + + public boolean endReached; + private boolean attached; + public void attach() { + if (attached) return; + attached = true; + NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.mediaDidLoad); + NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.bookmarkAdded); + if (TextUtils.isEmpty(query)) { + load(); + } + } + + public void detach() { + if (!attached) return; + attached = false; + NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.mediaDidLoad); + NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.bookmarkAdded); + ConnectionsManager.getInstance(currentAccount).cancelRequestsForGuid(guid); + loading = false; + } + + public void delete(ArrayList<Integer> ids) { + for (int i = 0; i < links.size(); ++i) { + if (ids.contains(links.get(i).getId())) { + links.remove(i); + i--; + } + } + } + + private boolean loading; + public void load() { + if (loading || endReached) return; + loading = true; + final long selfId = UserConfig.getInstance(currentAccount).getClientUserId(); + int min_id = Integer.MAX_VALUE; + for (int i = 0; i < links.size(); ++i) { + min_id = Math.min(min_id, links.get(i).getId()); + } + MediaDataController.getInstance(currentAccount).loadMedia(selfId, links.isEmpty() ? 30 : 50, min_id == Integer.MAX_VALUE ? 0 : min_id, 0, MediaDataController.MEDIA_URL, 0, 1, guid, 0, null, query); + } + + @Override + public void didReceivedNotification(int id, int account, Object... args) { + if (id == NotificationCenter.mediaDidLoad) { + int guid = (Integer) args[3]; + if (guid == this.guid) { + loading = false; + final ArrayList<MessageObject> msgs = (ArrayList<MessageObject>) args[2]; + endReached = ((Boolean) args[5]); + links.addAll(msgs); + whenUpdated.run(); + } + } else if (id == NotificationCenter.bookmarkAdded) { + MessageObject msg = (MessageObject) args[0]; + links.add(0, msg); + } + } + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + if (bookmarksList != null && opened) { + bookmarksList.attach(); + } + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + if (bookmarksList != null) { + bookmarksList.detach(); + } + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/BookmarksFragment.java b/TMessagesProj/src/main/java/org/telegram/ui/web/BookmarksFragment.java new file mode 100644 index 00000000000..c496befc1ae --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/BookmarksFragment.java @@ -0,0 +1,436 @@ +package org.telegram.ui.web; + +import static org.telegram.messenger.LocaleController.formatPluralString; +import static org.telegram.messenger.LocaleController.getString; +import static org.telegram.ui.web.AddressBarList.getLink; + +import android.content.Context; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.FrameLayout; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.google.android.exoplayer2.util.Util; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.LocaleController; +import org.telegram.messenger.MessageObject; +import org.telegram.messenger.MessagesController; +import org.telegram.messenger.R; +import org.telegram.messenger.UserConfig; +import org.telegram.messenger.Utilities; +import org.telegram.tgnet.TLRPC; +import org.telegram.ui.ActionBar.ActionBar; +import org.telegram.ui.ActionBar.ActionBarMenu; +import org.telegram.ui.ActionBar.ActionBarMenuItem; +import org.telegram.ui.ActionBar.ActionBarMenuSubItem; +import org.telegram.ui.ActionBar.AlertDialog; +import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.ChatActivity; +import org.telegram.ui.Components.EditTextBoldCursor; +import org.telegram.ui.Components.FlickerLoadingView; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.NumberTextView; +import org.telegram.ui.Components.StickerEmptyView; +import org.telegram.ui.Components.UItem; +import org.telegram.ui.Components.UniversalAdapter; +import org.telegram.ui.Components.UniversalFragment; +import org.telegram.ui.LaunchActivity; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; + +public class BookmarksFragment extends UniversalFragment { + + private static HashMap<Integer, AddressBarList.BookmarksList> cachedLists; + public AddressBarList.BookmarksList list = new AddressBarList.BookmarksList(currentAccount, this::updateWithOffset); + public AddressBarList.BookmarksList searchList; + + private final Runnable closeToTabs; + private final Utilities.Callback<String> whenClicked; + + private ActionBarMenuItem searchItem; + private ActionBarMenuItem gotoItem; + private String query; + + private NumberTextView selectedCount; + public HashSet<Integer> selected = new HashSet<>(); + + public boolean isSelected(MessageObject msg) { + return msg != null && selected.contains(msg.getId()); + } + + public void setSelected(MessageObject msg, boolean select) { + if (msg == null) return; + if (select) { + selected.add(msg.getId()); + } else { + selected.remove(msg.getId()); + } + } + + public void deleteSelectedMessages() { + final HashSet<String> selectedLinks = new HashSet<>(); + final ArrayList<MessageObject> messageObjects = new ArrayList<MessageObject>(); + final HashSet<Integer> ids = new HashSet<>(); + for (int id : selected) { + MessageObject msg = null; + for (MessageObject m : list.links) { + if (m != null && m.getId() == id) { + msg = m; + break; + } + } + if (searchList != null && msg == null) { + for (MessageObject m : searchList.links) { + if (m != null && m.getId() == id) { + msg = m; + break; + } + } + } + if (msg != null) { + messageObjects.add(msg); + ids.add(msg.getId()); + selectedLinks.add(getLink(msg)); + } + } +// for (String link : selectedLinks) { +// for (MessageObject m : list.links) { +// if (m != null && !selected.contains(m.getId()) && TextUtils.equals(getLink(m), link)) { +// messageObjects.add(m); +// ids.add(m.getId()); +// } +// } +// if (searchList != null) { +// for (MessageObject m : searchList.links) { +// if (m != null && !selected.contains(m.getId()) && TextUtils.equals(getLink(m), link)) { +// messageObjects.add(m); +// ids.add(m.getId()); +// } +// } +// } +// } + new AlertDialog.Builder(getContext(), getResourceProvider()) + .setTitle(formatPluralString("DeleteOptionsTitle", ids.size())) + .setMessage(getString(ids.size() == 1 ? "AreYouSureUnsaveSingleMessage" : "AreYouSureUnsaveFewMessages")) + .setPositiveButton(getString(R.string.Delete), (di, w) -> { + final long selfId = UserConfig.getInstance(currentAccount).getClientUserId(); + MessagesController.getInstance(currentAccount).deleteMessages(new ArrayList<>(ids), null, null, selfId, 0, true, 0); + list.delete(new ArrayList<>(ids)); + if (searchList != null) { + searchList.delete(new ArrayList<>(ids)); + } + selected.clear(); + actionBar.hideActionMode(); + listView.adapter.update(true); + }) + .setNegativeButton(getString(R.string.Cancel), null) + .makeRed(AlertDialog.BUTTON_POSITIVE) + .show(); + } + + public void gotoMessage() { + if (selected.size() != 1) return; + final long selfId = UserConfig.getInstance(currentAccount).getClientUserId(); + final int id = selected.iterator().next(); + finishFragment(); + if (closeToTabs != null) { + closeToTabs.run(); + } + AndroidUtilities.runOnUIThread(() -> { + BaseFragment fragment = LaunchActivity.getSafeLastFragment(); + if (fragment != null) { + fragment.presentFragment(ChatActivity.of(selfId, id)); + } + }, 80); + } + + public BookmarksFragment(Runnable closeToTabs, Utilities.Callback<String> whenClicked) { + super(); + this.closeToTabs = closeToTabs; + this.whenClicked = whenClicked; + } + + @Override + public View createView(Context context) { + fragmentView = super.createView(context); + + actionBar.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); + actionBar.setActionModeColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + actionBar.setBackButtonImage(R.drawable.ic_ab_back); + actionBar.setTitleColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); + actionBar.setItemsBackgroundColor(getThemedColor(Theme.key_actionBarActionModeDefaultSelector), false); + actionBar.setItemsColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText), false); + actionBar.setItemsColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText), true); + actionBar.setCastShadows(true); + actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { + @Override + public void onItemClick(int id) { + if (id == -1) { + if (actionBar.isActionModeShowed()) { + actionBar.hideActionMode(); + selected.clear(); + AndroidUtilities.forEachViews(listView, child -> { + if (child instanceof AddressBarList.BookmarkView) { + ((AddressBarList.BookmarkView) child).setChecked(false); + } + }); + } else { + finishFragment(); + } + } else if (id == R.id.menu_delete) { + deleteSelectedMessages(); + } else if (id == R.id.menu_link) { + gotoMessage(); + } + } + }); + + final ActionBarMenu actionMode = actionBar.createActionMode(); + + selectedCount = new NumberTextView(actionMode.getContext()); + selectedCount.setTextSize(18); + selectedCount.setTypeface(AndroidUtilities.bold()); + selectedCount.setTextColor(getThemedColor(Theme.key_actionBarActionModeDefaultIcon)); + selectedCount.setOnTouchListener((v, event) -> true); + actionMode.addView(selectedCount, LayoutHelper.createLinear(0, LayoutHelper.MATCH_PARENT, 1.0f, 65, 0, 0, 0)); + + gotoItem = actionMode.addItemWithWidth(R.id.menu_link, R.drawable.msg_message, AndroidUtilities.dp(54), getString(R.string.AccDescrGoToMessage)); + actionMode.addItemWithWidth(R.id.menu_delete, R.drawable.msg_delete, AndroidUtilities.dp(54), getString(R.string.Delete)); + + searchItem = actionBar.createMenu().addItem(0, R.drawable.ic_ab_search, getResourceProvider()).setIsSearchField(true).setActionBarMenuItemSearchListener(new ActionBarMenuItem.ActionBarMenuItemSearchListener() { + @Override + public void onSearchExpand() {} + + @Override + public void onSearchCollapse() { + query = null; + AndroidUtilities.cancelRunOnUIThread(applySearch); + if (searchList != null) { + searchList.detach(); + searchList = null; + } + if (listView != null) { + listView.adapter.update(true); + listView.layoutManager.scrollToPositionWithOffset(0, 0); + } + } + + @Override + public void onTextChanged(EditText editText) { + final boolean hadQuery = !TextUtils.isEmpty(query); + final String query = editText.getText().toString(); + if (!TextUtils.equals(BookmarksFragment.this.query, query)) { + BookmarksFragment.this.query = query; + if (searchList != null) { + searchList.detach(); + } + searchList = new AddressBarList.BookmarksList(currentAccount, query, BookmarksFragment.this::updateWithOffset); + searchList.attach(); + scheduleSearch(); + } + if (listView != null) { + listView.adapter.update(true); + if (hadQuery != !TextUtils.isEmpty(query)) { + listView.layoutManager.scrollToPositionWithOffset(0, 0); + } + } + } + + private void scheduleSearch() { + AndroidUtilities.cancelRunOnUIThread(applySearch); + AndroidUtilities.runOnUIThread(applySearch, 500); + } + + private Runnable applySearch = () -> { + if (searchList != null) { + searchList.load(); + } + }; + }); + searchItem.setSearchFieldHint(getString(R.string.Search)); + searchItem.setContentDescription(getString(R.string.Search)); + EditTextBoldCursor editText = searchItem.getSearchField(); + editText.setTextColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); + editText.setHintTextColor(getThemedColor(Theme.key_player_time)); + editText.setCursorColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); + + listView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + if (!listView.canScrollVertically(1)) { + if (TextUtils.isEmpty(query)) { + list.load(); + } else if (searchList != null) { + searchList.load(); + } + } + if (listView.scrollingByUser) { + AndroidUtilities.hideKeyboard(fragmentView); + } + } + }); + + StickerEmptyView emptyView = new StickerEmptyView(context, null, StickerEmptyView.STICKER_TYPE_SEARCH); + emptyView.title.setText(getString(R.string.WebNoBookmarks)); + emptyView.subtitle.setVisibility(View.GONE); + emptyView.showProgress(false, false); + emptyView.setAnimateLayoutChange(true); + ((FrameLayout) fragmentView).addView(emptyView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + listView.setEmptyView(emptyView); + + return fragmentView; + } + + @Override + public boolean onFragmentCreate() { + list.attach(); + return super.onFragmentCreate(); + } + + @Override + public void onFragmentDestroy() { + super.onFragmentDestroy(); + list.detach(); + } + + @Override + protected CharSequence getTitle() { + return getString(R.string.WebBookmarks); + } + + private final HashSet<String> addedUrls = new HashSet<>(); + private int lastId; + + @Override + protected void fillItems(ArrayList<UItem> items, UniversalAdapter adapter) { + addedUrls.clear(); + if (TextUtils.isEmpty(query)) { + for (MessageObject msg : list.links) { + final String url = getLink(msg); + if (TextUtils.isEmpty(url)) continue; + if (url.startsWith("#") || url.startsWith("$") || url.startsWith("@")) continue; +// if (addedUrls.contains(url)) continue; + addedUrls.add(url); + items.add(AddressBarList.BookmarkView.Factory.as(msg, false).setChecked(isSelected(msg))); + } + if (!list.endReached) { + items.add(UItem.asFlicker(items.size(), FlickerLoadingView.BROWSER_BOOKMARK)); + items.add(UItem.asFlicker(items.size(), FlickerLoadingView.BROWSER_BOOKMARK)); + items.add(UItem.asFlicker(items.size(), FlickerLoadingView.BROWSER_BOOKMARK)); + } + } else { + for (MessageObject msg : list.links) { + final String url = getLink(msg); + if (TextUtils.isEmpty(url)) continue; + if (url.startsWith("#") || url.startsWith("$") || url.startsWith("@")) continue; +// if (addedUrls.contains(url)) continue; + addedUrls.add(url); + final String domain = AndroidUtilities.getHostAuthority(url, true); + final WebMetadataCache.WebMetadata meta = WebMetadataCache.getInstance().get(domain); + final TLRPC.WebPage webpage = msg != null && msg.messageOwner != null && msg.messageOwner.media != null ? msg.messageOwner.media.webpage : null; + final String sitename = webpage != null && !TextUtils.isEmpty(webpage.site_name) ? webpage.site_name : (meta == null || TextUtils.isEmpty(meta.sitename) ? null : meta.sitename); + final String title = webpage != null && !TextUtils.isEmpty(webpage.title) ? webpage.title : null; + if (!matches(domain, query) && !matches(sitename, query) && !matches(title, query)) { + continue; + } + items.add(AddressBarList.BookmarkView.Factory.as(msg, false, query).setChecked(isSelected(msg))); + } + for (MessageObject msg : searchList.links) { + final String url = getLink(msg); + if (TextUtils.isEmpty(url)) continue; + if (url.startsWith("#") || url.startsWith("$") || url.startsWith("@")) continue; +// if (addedUrls.contains(url)) continue; + addedUrls.add(url); + items.add(AddressBarList.BookmarkView.Factory.as(msg, false, query).setChecked(isSelected(msg))); + } + if (!searchList.endReached) { + items.add(UItem.asFlicker(items.size(), FlickerLoadingView.BROWSER_BOOKMARK)); + items.add(UItem.asFlicker(items.size(), FlickerLoadingView.BROWSER_BOOKMARK)); + items.add(UItem.asFlicker(items.size(), FlickerLoadingView.BROWSER_BOOKMARK)); + } + } + if (!items.isEmpty()) { + items.add(UItem.asShadow(null)); + } + } + + public static boolean matches(String src, String q) { + if (src == null || q == null) return false; + final String lsrc = src.toLowerCase(); + final String lq = q.toLowerCase(); + if (lsrc.startsWith(lq) || lsrc.contains(" " + lq) || lsrc.contains("." + lq)) return true; + final String tsrc = AndroidUtilities.translitSafe(lsrc); + final String tq = AndroidUtilities.translitSafe(lq); + return (tsrc.startsWith(tq) || tsrc.contains(" " + tq) || tsrc.contains("." + tq)); + } + + @Override + protected void onClick(UItem item, View view, int position, float x, float y) { + if (item.instanceOf(AddressBarList.BookmarkView.Factory.class)) { + if (actionBar.isActionModeShowed()) { + clickSelect(item, view); + } else { + finishFragment(); + whenClicked.run(getLink((MessageObject) item.object2)); + } + } + } + + public void clickSelect(UItem item, View view) { + AddressBarList.BookmarkView cell = (AddressBarList.BookmarkView) view; + MessageObject msg = (MessageObject) item.object2; + if (isSelected(msg)) { + setSelected(msg, false); + cell.setChecked(false); + } else { + setSelected(msg, true); + cell.setChecked(true); + } + selectedCount.setNumber(selected.size(), true); + if (selected.isEmpty()) { + actionBar.hideActionMode(); + } else { + actionBar.showActionMode(); + } + AndroidUtilities.updateViewShow(gotoItem, selected.size() == 1, true, true); + } + + @Override + protected boolean onLongClick(UItem item, View view, int position, float x, float y) { + if (item.instanceOf(AddressBarList.BookmarkView.Factory.class)) { + clickSelect(item, view); + return true; + } + return false; + } + + @Override + public boolean isLightStatusBar() { + return AndroidUtilities.computePerceivedBrightness(getThemedColor(Theme.key_windowBackgroundWhite)) > .721f; + } + + private void updateWithOffset() { + int position = -1, offset = 0; + for (int i = 0; i < listView.getChildCount(); ++i) { + View child = listView.getChildAt(i); + position = listView.getChildAdapterPosition(child); + if (position < 0) continue; + offset = child.getTop(); + break; + } + listView.adapter.update(true); + if (position >= 0) { + listView.layoutManager.scrollToPositionWithOffset(position, offset); + } else { + listView.layoutManager.scrollToPositionWithOffset(0, 0); + } + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewContainer.java b/TMessagesProj/src/main/java/org/telegram/ui/web/BotWebViewContainer.java similarity index 53% rename from TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewContainer.java rename to TMessagesProj/src/main/java/org/telegram/ui/web/BotWebViewContainer.java index 4cf055d8d8a..6b112a5ed2f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/bots/BotWebViewContainer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/BotWebViewContainer.java @@ -1,5 +1,6 @@ -package org.telegram.ui.bots; +package org.telegram.ui.web; +import static org.telegram.messenger.LocaleController.formatString; import static org.telegram.messenger.LocaleController.getString; import android.Manifest; @@ -11,8 +12,10 @@ import android.annotation.SuppressLint; import android.app.Activity; import android.app.Dialog; +import android.app.DownloadManager; import android.content.ClipboardManager; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Bitmap; @@ -24,19 +27,24 @@ import android.net.Uri; import android.net.http.SslError; import android.os.Build; +import android.os.Environment; import android.os.Message; import android.text.SpannableStringBuilder; import android.text.TextUtils; +import android.util.Pair; import android.util.TypedValue; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; -import android.view.inputmethod.InputMethodManager; +import android.webkit.CookieManager; +import android.webkit.DownloadListener; import android.webkit.GeolocationPermissions; import android.webkit.JavascriptInterface; import android.webkit.PermissionRequest; import android.webkit.RenderProcessGoneDetail; +import android.webkit.SafeBrowsingResponse; import android.webkit.SslErrorHandler; +import android.webkit.URLUtil; import android.webkit.ValueCallback; import android.webkit.WebChromeClient; import android.webkit.WebResourceError; @@ -51,9 +59,12 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; +import androidx.core.content.FileProvider; import androidx.core.graphics.ColorUtils; import androidx.core.util.Consumer; +import com.google.android.gms.safetynet.SafetyNet; + import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -61,6 +72,9 @@ import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ApplicationLoader; import org.telegram.messenger.BotWebViewVibrationEffect; +import org.telegram.messenger.BuildVars; +import org.telegram.messenger.DownloadController; +import org.telegram.messenger.FileLoader; import org.telegram.messenger.FileLog; import org.telegram.messenger.ImageLocation; import org.telegram.messenger.ImageReceiver; @@ -70,32 +84,57 @@ import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.R; import org.telegram.messenger.SendMessagesHelper; +import org.telegram.messenger.SharedConfig; import org.telegram.messenger.SvgHelper; import org.telegram.messenger.UserConfig; import org.telegram.messenger.UserObject; +import org.telegram.messenger.Utilities; +import org.telegram.messenger.VideoEditedInfo; import org.telegram.messenger.browser.Browser; import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; +import org.telegram.tgnet.tl.TL_bots; import org.telegram.ui.ActionBar.ActionBar; +import org.telegram.ui.ActionBar.ActionBarLayout; import org.telegram.ui.ActionBar.ActionBarMenuSubItem; import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.BottomSheet; import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.ArticleViewer; import org.telegram.ui.CameraScanActivity; import org.telegram.ui.Components.AlertsCreator; +import org.telegram.ui.Components.AnimatedFileDrawable; import org.telegram.ui.Components.BackupImageView; import org.telegram.ui.Components.Bulletin; import org.telegram.ui.Components.BulletinFactory; import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.Paint.Views.LinkPreview; +import org.telegram.ui.Components.Premium.PremiumFeatureBottomSheet; +import org.telegram.ui.Components.RLottieDrawable; import org.telegram.ui.Components.voip.CellFlickerDrawable; import org.telegram.ui.LaunchActivity; +import org.telegram.ui.PremiumPreviewFragment; +import org.telegram.ui.Stories.recorder.StoryEntry; +import org.telegram.ui.Stories.recorder.StoryRecorder; +import org.telegram.ui.WrappedResourceProvider; +import org.telegram.ui.bots.BotBiometry; +import org.telegram.ui.bots.BotBiometrySettings; +import org.telegram.ui.bots.BotWebViewSheet; +import org.telegram.ui.bots.ChatAttachAlertBotWebViewLayout; import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.IDN; +import java.net.URL; +import java.net.URLDecoder; import java.net.URLEncoder; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -133,6 +172,7 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific private boolean lastExpanded; private boolean isRequestingPageOpen; private long lastClickMs; + private long lastPostStoryMs; private boolean isBackButtonVisible; private boolean isSettingsButtonVisible; @@ -157,8 +197,20 @@ public abstract class BotWebViewContainer extends FrameLayout implements Notific private String lastQrText; private BotBiometry biometry; - public BotWebViewContainer(@NonNull Context context, Theme.ResourcesProvider resourcesProvider, int backgroundColor) { + public final boolean bot; + + public void showLinkCopiedBulletin() { + BulletinFactory.of(this, resourcesProvider).createCopyLinkBulletin().show(true); + } + + public BotWebViewContainer( + @NonNull Context context, + Theme.ResourcesProvider resourcesProvider, + int backgroundColor, + boolean isBot + ) { super(context); + this.bot = isBot; this.resourcesProvider = resourcesProvider; d("created new webview container"); @@ -215,12 +267,11 @@ protected void onDraw(Canvas canvas) { setFocusable(false); } - public void setViewPortByMeasureSuppressed(boolean viewPortByMeasureSuppressed) { isViewPortByMeasureSuppressed = viewPortByMeasureSuppressed; } - private void checkCreateWebView() { + public void checkCreateWebView() { if (webView == null && !webViewNotAvailable) { try { setupWebView(null); @@ -237,7 +288,7 @@ private void checkCreateWebView() { } } - public void replaceWebView(MyWebView webView, WebViewProxy proxy) { + public void replaceWebView(MyWebView webView, Object proxy) { setupWebView(webView, proxy); } @@ -245,13 +296,27 @@ private void setupWebView(MyWebView replaceWith) { setupWebView(replaceWith, null); } + private BotWebViewProxy botWebViewProxy; + public BotWebViewProxy getBotProxy() { + return botWebViewProxy; + } private WebViewProxy webViewProxy; public WebViewProxy getProxy() { return webViewProxy; } + public static boolean firstWebView = true; + + private MyWebView opener; + public void setOpener(MyWebView webView) { + this.opener = webView; + if (!bot && this.webView != null) { + this.webView.opener = webView; + } + } + @SuppressLint({"SetJavaScriptEnabled", "AddJavascriptInterface"}) - private void setupWebView(MyWebView replaceWith, WebViewProxy proxy) { + private void setupWebView(MyWebView replaceWith, Object proxy) { if (webView != null) { webView.destroy(); removeView(webView); @@ -259,15 +324,55 @@ private void setupWebView(MyWebView replaceWith, WebViewProxy proxy) { if (replaceWith != null) { AndroidUtilities.removeFromParent(replaceWith); } - webView = replaceWith == null ? new MyWebView(getContext()) : replaceWith; + webView = replaceWith == null ? new MyWebView(getContext(), bot) : replaceWith; + if (!bot) { + CookieManager cookieManager = CookieManager.getInstance(); + cookieManager.setAcceptCookie(true); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + cookieManager.setAcceptThirdPartyCookies(webView, true); + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + CookieManager.getInstance().flush(); + } + webView.opener = opener; + } else { + webView.setBackgroundColor(getColor(Theme.key_windowBackgroundWhite)); + } webView.setContainers(this, webViewScrollListener); - webView.setBackgroundColor(getColor(Theme.key_windowBackgroundWhite)); + webView.setCloseListener(onCloseListener); WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); settings.setGeolocationEnabled(true); settings.setDomStorageEnabled(true); settings.setDatabaseEnabled(true); settings.setSupportMultipleWindows(true); + settings.setAllowFileAccess(false); + settings.setAllowContentAccess(false); + settings.setAllowFileAccessFromFileURLs(false); + settings.setAllowUniversalAccessFromFileURLs(false); + if (!bot) { + settings.setRenderPriority(WebSettings.RenderPriority.HIGH); + settings.setCacheMode(WebSettings.LOAD_DEFAULT); + settings.setSaveFormData(true); + settings.setSavePassword(true); + settings.setSupportZoom(true); + settings.setBuiltInZoomControls(true); + settings.setDisplayZoomControls(false); + settings.setUseWideViewPort(true); + settings.setLoadWithOverviewMode(true); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + settings.setSafeBrowsingEnabled(true); + } + } + + try { + String useragent = settings.getUserAgentString(); + useragent = useragent.replace("; wv)", ")"); + useragent = useragent.replaceAll("\\(Linux; Android.+;[^)]+\\)", "(Linux; Android " + Build.VERSION.RELEASE + "; K)"); + settings.setUserAgentString(useragent); + } catch (Exception e) { + FileLog.e(e); + } // Hackfix text on some Xiaomi devices settings.setTextSize(WebSettings.TextSize.NORMAL); @@ -279,28 +384,44 @@ private void setupWebView(MyWebView replaceWith, WebViewProxy proxy) { GeolocationPermissions.getInstance().clearAll(); webView.setVerticalScrollBarEnabled(false); - if (replaceWith == null) { + if (replaceWith == null && bot) { webView.setAlpha(0f); } addView(webView); // We can't use javascript interface because of minSDK 16, it can be exploited because of reflection access if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - if (proxy != null) { - webViewProxy = proxy; - } - if (webViewProxy == null) { - webViewProxy = new WebViewProxy(this); - webView.addJavascriptInterface(webViewProxy, "TelegramWebviewProxy"); + if (bot) { + if (proxy instanceof BotWebViewProxy) { + botWebViewProxy = (BotWebViewProxy) proxy; + } + if (botWebViewProxy == null) { + botWebViewProxy = new BotWebViewProxy(this); + webView.addJavascriptInterface(botWebViewProxy, "TelegramWebviewProxy"); + } else if (replaceWith == null) { + webView.addJavascriptInterface(botWebViewProxy, "TelegramWebviewProxy"); + } + botWebViewProxy.setContainer(this); + } else { + if (proxy instanceof WebViewProxy) { + webViewProxy = (WebViewProxy) proxy; + } + if (webViewProxy == null) { + webViewProxy = new WebViewProxy(webView, this); + webView.addJavascriptInterface(webViewProxy, "TelegramWebview"); + } else if (replaceWith == null) { + webView.addJavascriptInterface(webViewProxy, "TelegramWebview"); + } + webViewProxy.setContainer(this); } - webViewProxy.setContainer(this); } onWebViewCreated(); + firstWebView = false; } private void onOpenUri(Uri uri) { - onOpenUri(uri, null, false, false); + onOpenUri(uri, null, !bot, false); } private void onOpenUri(Uri uri, String browser, boolean tryInstantView, boolean suppressPopup) { @@ -313,16 +434,41 @@ private void onOpenUri(Uri uri, String browser, boolean tryInstantView, boolean boolean internal = Browser.isInternalUri(uri, forceBrowser); if (internal && !forceBrowser[0] && delegate != null) { - setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS); - BotWebViewContainer.this.setFocusable(false); - webView.setFocusable(false); - webView.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS); - webView.clearFocus(); - InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); + setKeyboardFocusable(false); + } + + Browser.openUrl(getContext(), uri, true, tryInstantView, false, null, browser, false); + } + + private boolean keyboardFocusable; + private boolean wasFocusable; + private void updateKeyboardFocusable() { + final boolean focusable = keyboardFocusable && isPageLoaded && false; + if (wasFocusable != focusable) { + if (!focusable) { + setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS); + BotWebViewContainer.this.setFocusable(false); +// webView.setFocusable(false); + if (webView != null) { + webView.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS); + webView.clearFocus(); + } + AndroidUtilities.hideKeyboard(this); + } else { + setDescendantFocusability(FOCUS_BEFORE_DESCENDANTS); + BotWebViewContainer.this.setFocusable(true); +// webView.setFocusable(true); + if (webView != null) { + webView.setDescendantFocusability(FOCUS_BEFORE_DESCENDANTS); + } + } } + wasFocusable = focusable; + } - Browser.openUrl(getContext(), uri, true, tryInstantView, false, null, browser); + public void setKeyboardFocusable(boolean focusable) { + keyboardFocusable = focusable; + updateKeyboardFocusable(); } public static int getMainButtonRippleColor(int buttonColor) { @@ -337,6 +483,16 @@ public void updateFlickerBackgroundColor(int backgroundColor) { flickerDrawable.setColors(backgroundColor, 0x99, 0xCC); } + protected void onTitleChanged(String title) { + + } + protected void onFaviconChanged(Bitmap favicon) { + + } + protected void onURLChanged(String url, boolean first, boolean last) { + + } + /** * @return If this press was consumed */ @@ -351,9 +507,12 @@ public boolean onBackPressed() { return false; } - private void setPageLoaded(String url) { + private void setPageLoaded(String url, boolean animated) { + onURLChanged(webView != null && webView.dangerousUrl ? webView.urlFallback : url, !(webView != null && webView.canGoBack()), !(webView != null && webView.canGoForward())); + if (webView != null) { webView.isPageLoaded = true; + updateKeyboardFocusable(); } if (isPageLoaded) { @@ -361,29 +520,48 @@ private void setPageLoaded(String url) { return; } - AnimatorSet set = new AnimatorSet(); - set.playTogether( - ObjectAnimator.ofFloat(webView, View.ALPHA, 1f), - ObjectAnimator.ofFloat(flickerView, View.ALPHA, 0f) - ); - set.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { + if (animated && webView != null && flickerView != null) { + AnimatorSet set = new AnimatorSet(); + set.playTogether( + ObjectAnimator.ofFloat(webView, View.ALPHA, 1f), + ObjectAnimator.ofFloat(flickerView, View.ALPHA, 0f) + ); + set.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + flickerView.setVisibility(GONE); + } + }); + set.start(); + } else { + if (webView != null) { + webView.setAlpha(1f); + } + if (flickerView != null) { + flickerView.setAlpha(0f); flickerView.setVisibility(GONE); } - }); - set.start(); + } mUrl = url; d("setPageLoaded: isPageLoaded = true!"); isPageLoaded = true; - BotWebViewContainer.this.setFocusable(true); + updateKeyboardFocusable(); delegate.onWebAppReady(); } + protected void onErrorShown(boolean shown, int errorCode, String description) { + + } + + protected void onDangerousTriggered(DangerousWebWarning warning) { + + } + public void setState(boolean loaded, String url) { d("setState(" + loaded + ", " + url + ")"); isPageLoaded = loaded; mUrl = url; + updateKeyboardFocusable(); } public void setIsBackButtonVisible(boolean visible) { @@ -514,7 +692,7 @@ public void invalidateViewPortHeight(boolean isStable) { public void invalidateViewPortHeight(boolean isStable, boolean force) { invalidate(); - if (!isPageLoaded && !force) { + if (!isPageLoaded && !force || !bot) { return; } @@ -564,6 +742,9 @@ protected boolean drawChild(Canvas canvas, View child, long drawingTime) { canvas.restore(); return draw; } + if (child == webView && (AndroidUtilities.makingGlobalBlurBitmap || getLayerType() == LAYER_TYPE_HARDWARE && !canvas.isHardwareAccelerated())) { + return true; + } return super.drawChild(canvas, child, drawingTime); } @@ -669,6 +850,7 @@ public void reload() { webView.onResume(); webView.reload(); } + updateKeyboardFocusable(); }); } @@ -684,6 +866,7 @@ public void loadUrl(int currentAccount, String url) { webView.onResume(); webView.loadUrl(url); } + updateKeyboardFocusable(); }); } @@ -727,7 +910,7 @@ public void preserveWebView() { } public void destroyWebView() { - d("destroyWebView"); + d("destroyWebView preserving=" + preserving); if (webView != null) { if (webView.getParent() != null) { removeView(webView); @@ -736,9 +919,14 @@ public void destroyWebView() { webView.destroy(); } isPageLoaded = false; + updateKeyboardFocusable(); } } + public void resetWebView() { + webView = null; + } + public boolean isBackButtonVisible() { return isBackButtonVisible; } @@ -801,6 +989,14 @@ public void setWebViewScrollListener(WebViewScrollListener webViewScrollListener } } + private Runnable onCloseListener; + public void setOnCloseRequestedListener(Runnable listener) { + onCloseListener = listener; + if (webView != null) { + webView.setCloseListener(listener); + } + } + private boolean wasOpenedByLinkIntent; public void setWasOpenedByLinkIntent(boolean value) { wasOpenedByLinkIntent = value; @@ -810,13 +1006,85 @@ public void setDelegate(Delegate delegate) { this.delegate = delegate; } + private void onWebEventReceived(String type, String data) { + if (bot) return; + if (delegate == null) return; + d("onWebEventReceived " + type + " " + data); + switch (type) { + case "actionBarColor": + case "navigationBarColor": { + try { + final JSONArray jsonArray = new JSONArray(data); + final boolean isActionBarColor = TextUtils.equals(type, "actionBarColor"); + final int color = Color.argb( + (int) (Math.round(jsonArray.optDouble(3, 1) * 255)), + (int) (Math.round(jsonArray.optDouble(0))), + (int) (Math.round(jsonArray.optDouble(1))), + (int) (Math.round(jsonArray.optDouble(2))) + ); + if (webView != null) { + if (isActionBarColor) { + webView.lastActionBarColorGot = true; + webView.lastActionBarColor = color; + } else { + webView.lastBackgroundColorGot = true; + webView.lastBackgroundColor = color; + } + webView.saveHistory(); + } + delegate.onWebAppBackgroundChanged(isActionBarColor, color); + } catch (Exception e) {} + break; + } + case "allowScroll": { + boolean x = true, y = true; + try { + JSONArray jsonArray = new JSONArray(data); + x = jsonArray.optBoolean(0, true); + y = jsonArray.optBoolean(1, true); + } catch (Exception e) {} + d("allowScroll " + x + " " + y); + if (getParent() instanceof ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer) { + ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer swipeContainer = (ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer) getParent(); + swipeContainer.allowThisScroll(x, y); + } + break; + } + case "siteName": { + d("siteName " + data); + if (webView != null) { + webView.lastSiteName = data; + webView.saveHistory(); + } + break; + } + } + } + private void onEventReceived(String eventType, String eventData) { + if (!bot) { + return; + } if (webView == null || delegate == null) { d("onEventReceived " + eventType + ": no webview or delegate!"); return; } d("onEventReceived " + eventType); switch (eventType) { + case "web_app_allow_scroll": { + boolean x = true, y = true; + try { + JSONArray jsonArray = new JSONArray(eventData); + x = jsonArray.optBoolean(0, true); + y = jsonArray.optBoolean(1, true); + } catch (Exception e) {} + d("allowScroll " + x + " " + y); + if (getParent() instanceof ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer) { + ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer swipeContainer = (ChatAttachAlertBotWebViewLayout.WebViewSwipeContainer) getParent(); + swipeContainer.allowThisScroll(x, y); + } + break; + } case "web_app_close": { boolean return_back = false; try { @@ -870,7 +1138,7 @@ private void onEventReceived(String eventType, String eventData) { break; } case "web_app_close_scan_qr_popup": { - if (hasQRPending) { + if (hasQRPending && cameraBottomSheet != null) { cameraBottomSheet.dismiss(); } break; @@ -1039,6 +1307,15 @@ public void didReceivedNotification(int id, int account, Object... args) { } break; } + case "web_app_setup_swipe_behavior": { + try { + JSONObject jsonObject = new JSONObject(eventData); + delegate.onWebAppSwipingBehavior(jsonObject.optBoolean("allow_vertical_swipe")); + } catch (JSONException e) { + FileLog.e(e); + } + break; + } case "web_app_set_background_color": { try { JSONObject jsonObject = new JSONObject(eventData); @@ -1248,7 +1525,7 @@ public void didReceivedNotification(int id, int account, Object... args) { break; } case "web_app_ready": { - setPageLoaded(webView.getUrl()); + setPageLoaded(webView.getUrl(), true); break; } case "web_app_setup_main_button": { @@ -1283,7 +1560,7 @@ public void didReceivedNotification(int id, int account, Object... args) { } return; } - TLRPC.TL_bots_canSendMessage req = new TLRPC.TL_bots_canSendMessage(); + TL_bots.canSendMessage req = new TL_bots.canSendMessage(); req.bot = MessagesController.getInstance(currentAccount).getInputUser(botUser); ConnectionsManager.getInstance(currentAccount).sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { if (res instanceof TLRPC.TL_boolTrue) { @@ -1305,7 +1582,7 @@ public void didReceivedNotification(int id, int account, Object... args) { .setTitle(getString(R.string.BotWebViewRequestWriteTitle)) .setMessage(getString(R.string.BotWebViewRequestWriteMessage)) .setPositiveButton(getString(R.string.BotWebViewRequestAllow), (di, w) -> { - TLRPC.TL_bots_allowSendMessage req2 = new TLRPC.TL_bots_allowSendMessage(); + TL_bots.allowSendMessage req2 = new TL_bots.allowSendMessage(); req2.bot = MessagesController.getInstance(currentAccount).getInputUser(botUser); ConnectionsManager.getInstance(currentAccount).sendRequest(req2, (res2, err2) -> AndroidUtilities.runOnUIThread(() -> { if (res2 != null) { @@ -1355,7 +1632,7 @@ public void didReceivedNotification(int id, int account, Object... args) { return; } - TLRPC.TL_bots_invokeWebViewCustomMethod req = new TLRPC.TL_bots_invokeWebViewCustomMethod(); + TL_bots.invokeWebViewCustomMethod req = new TL_bots.invokeWebViewCustomMethod(); req.bot = MessagesController.getInstance(currentAccount).getInputUser(botUser); req.custom_method = method; req.params = new TLRPC.TL_dataJSON(); @@ -1396,7 +1673,7 @@ public void didReceivedNotification(int id, int account, Object... args) { SpannableStringBuilder message = new SpannableStringBuilder(); String botName = UserObject.getUserName(botUser); if (!TextUtils.isEmpty(botName)) { - message.append(AndroidUtilities.replaceTags(LocaleController.formatString(R.string.AreYouSureShareMyContactInfoWebapp, botName))); + message.append(AndroidUtilities.replaceTags(formatString(R.string.AreYouSureShareMyContactInfoWebapp, botName))); } else { message.append(AndroidUtilities.replaceTags(getString(R.string.AreYouSureShareMyContactInfoBot))); } @@ -1466,7 +1743,7 @@ public void didReceivedNotification(int id, int account, Object... args) { if (biometry == null) { return; } - if (biometry.access_requested && biometry.disabled) { + if (biometry.access_requested) { notifyBiometryReceived(); return; } @@ -1479,9 +1756,9 @@ public void didReceivedNotification(int id, int account, Object... args) { AlertDialog.Builder alert = new AlertDialog.Builder(getContext(), resourcesProvider); if (TextUtils.isEmpty(reason)) { alert.setTitle(getString(R.string.BotAllowBiometryTitle)); - alert.setMessage(AndroidUtilities.replaceTags(LocaleController.formatString(R.string.BotAllowBiometryMessage, UserObject.getUserName(botUser)))); + alert.setMessage(AndroidUtilities.replaceTags(formatString(R.string.BotAllowBiometryMessage, UserObject.getUserName(botUser)))); } else { - alert.setTitle(AndroidUtilities.replaceTags(LocaleController.formatString(R.string.BotAllowBiometryMessage, UserObject.getUserName(botUser)))); + alert.setTitle(AndroidUtilities.replaceTags(formatString(R.string.BotAllowBiometryMessage, UserObject.getUserName(botUser)))); alert.setMessage(reason); } alert.setPositiveButton(getString(R.string.Allow), (di, w) -> { @@ -1617,6 +1894,139 @@ public void didReceivedNotification(int id, int account, Object... args) { break; } + case "web_app_share_to_story": { + if (isRequestingPageOpen || System.currentTimeMillis() - lastClickMs > 1000 || System.currentTimeMillis() - lastPostStoryMs < 2000) { + return; + } + lastClickMs = 0; + lastPostStoryMs = System.currentTimeMillis(); + String media_url = null; + String text = null; + String widget_link = null; + String widget_link_name = null; + try { + JSONObject jsonObject = new JSONObject(eventData); + media_url = jsonObject.optString("media_url"); + text = jsonObject.optString("text"); + JSONObject link = jsonObject.optJSONObject("widget_link"); + if (link != null) { + widget_link = link.optString("url"); + widget_link_name = link.optString("name"); + } + } catch (Exception e) { + FileLog.e(e); + } + if (media_url == null) return; + final String finalText = text; + final String finalLink = widget_link; + final String finalLinkName = widget_link_name; + + if (!MessagesController.getInstance(currentAccount).storiesEnabled()) { + new PremiumFeatureBottomSheet(new BaseFragment() { + { this.currentAccount = BotWebViewContainer.this.currentAccount; } + @Override + public Dialog showDialog(Dialog dialog) { + dialog.show(); + return dialog; + } + @Override + public Activity getParentActivity() { + return BotWebViewContainer.this.parentActivity; + } + @Override + public Theme.ResourcesProvider getResourceProvider() { + return new WrappedResourceProvider(resourcesProvider) { + @Override + public void appendColors() { + sparseIntArray.append(Theme.key_dialogBackground, 0xFF1E1E1E); + sparseIntArray.append(Theme.key_windowBackgroundGray, 0xFF000000); + } + }; + } + @Override + public boolean isLightStatusBar() { + return false; + } + }, PremiumPreviewFragment.PREMIUM_FEATURE_STORIES, true).show(); + return; + } + + AlertDialog progressDialog = new AlertDialog(parentActivity, AlertDialog.ALERT_TYPE_SPINNER); + new HttpGetFileTask(file -> { + AndroidUtilities.runOnUIThread(() -> { + if (file == null) { + progressDialog.dismissUnless(500); + return; + } + final int[] params = new int[AnimatedFileDrawable.PARAM_NUM_COUNT]; + Runnable open = () -> { + StoryEntry entry; + final boolean isVideo = params[AnimatedFileDrawable.PARAM_NUM_DURATION] > 0; + if (isVideo) { + final int width = params[AnimatedFileDrawable.PARAM_NUM_WIDTH]; + final int height = params[AnimatedFileDrawable.PARAM_NUM_HEIGHT]; + int twidth = width, theight = height; + if (twidth > AndroidUtilities.getPhotoSize()) { + twidth = AndroidUtilities.getPhotoSize(); + } + if (theight > AndroidUtilities.getPhotoSize()) { + theight = AndroidUtilities.getPhotoSize(); + } + File thumb = StoryEntry.makeCacheFile(UserConfig.selectedAccount, "jpg"); + AnimatedFileDrawable drawable = new AnimatedFileDrawable(file, true, 0, 0, null, null, null, 0, UserConfig.selectedAccount, true, twidth, theight, null); + Bitmap thumbBitmap = drawable.getFirstFrame(null); + drawable.recycle(); + if (thumbBitmap != null) { + try { + thumbBitmap.compress(Bitmap.CompressFormat.JPEG, 80, new FileOutputStream(thumb)); + } catch (Exception e) { + FileLog.e(e); + thumb = null; + } + } + entry = StoryEntry.fromVideoShoot(file, thumb == null ? null : thumb.getAbsolutePath(), params[AnimatedFileDrawable.PARAM_NUM_DURATION]); + entry.width = width; + entry.height = height; + entry.setupMatrix(); + } else { + Pair<Integer, Integer> orientation = AndroidUtilities.getImageOrientation(file); + entry = StoryEntry.fromPhotoShoot(file, orientation.first); + } + if (entry.width <= 0 || entry.height <= 0) { + progressDialog.dismissUnless(500); + return; + } + if (finalText != null) { + entry.caption = finalText; + } + if (!TextUtils.isEmpty(finalLink) && UserConfig.getInstance(currentAccount).isPremium()) { + if (entry.mediaEntities == null) entry.mediaEntities = new ArrayList<>(); + VideoEditedInfo.MediaEntity entity = new VideoEditedInfo.MediaEntity(); + entity.type = VideoEditedInfo.MediaEntity.TYPE_LINK; + entity.subType = -1; + entity.color = 0xFFFFFFFF; + entity.linkSettings = new LinkPreview.WebPagePreview(); + entity.linkSettings.url = finalLink; + if (finalLinkName != null) { + entity.linkSettings.flags |= 2; + entity.linkSettings.name = finalLinkName; + } + entry.mediaEntities.add(entity); + } + StoryRecorder.getInstance(parentActivity, UserConfig.selectedAccount) + .openRepost(null, entry); + progressDialog.dismissUnless(500); + }; + Utilities.globalQueue.postRunnable(() -> { + AnimatedFileDrawable.getVideoInfo(file.getAbsolutePath(), params); + AndroidUtilities.runOnUIThread(open); + }); + }); + }).execute(media_url); + progressDialog.showDelayed(250); + + break; + } default: { FileLog.d("unknown webapp event " + eventType); break; @@ -1769,9 +2179,9 @@ public void onWebViewCreated() { } - public static class WebViewProxy { + public static class BotWebViewProxy { public BotWebViewContainer container; - public WebViewProxy(BotWebViewContainer container) { + public BotWebViewProxy(BotWebViewContainer container) { this.container = container; } public void setContainer(BotWebViewContainer container) { @@ -1783,7 +2193,123 @@ public void postEvent(String eventType, String eventData) { FileLog.d("webviewproxy.postEvent: no container"); return; } - AndroidUtilities.runOnUIThread(() -> container.onEventReceived(eventType, eventData)); + AndroidUtilities.runOnUIThread(() -> { + if (container == null) return; + container.onEventReceived(eventType, eventData); + }); + } + } + + public static class WebViewProxy { + + public BotWebViewContainer container; + public final MyWebView webView; + + public WebViewProxy(MyWebView webView, BotWebViewContainer container) { + this.webView = webView; + this.container = container; + } + public void setContainer(BotWebViewContainer container) { + this.container = container; + } + + @JavascriptInterface + public void post(String type, String data) { + if (container == null) return; + AndroidUtilities.runOnUIThread(() -> { + if (container == null) return; + container.onWebEventReceived(type, data); + }); + } + + @JavascriptInterface + public void resolveShare(String json, byte[] file, String fileName, String fileMimeType) { + AndroidUtilities.runOnUIThread(() -> { + if (container == null) return; + if (System.currentTimeMillis() - container.lastClickMs > 1000) { + webView.evaluateJS("window.navigator.__share__receive(\"security\")"); + return; + } + container.lastClickMs = 0; + final Context context = webView.getContext(); + Activity activity = AndroidUtilities.findActivity(context); + if (activity == null && LaunchActivity.instance != null) { + activity = LaunchActivity.instance; + } + if (context == null || activity == null || !(activity instanceof LaunchActivity) || activity.isFinishing() || !webView.isAttachedToWindow()) { + webView.evaluateJS("window.navigator.__share__receive(\"security\")"); + return; + } + final LaunchActivity launchActivity = (LaunchActivity) activity; + String url = null, title = null, text = null; + try { + JSONObject object = new JSONObject(json); + url = object.optString("url", null); + text = object.optString("text", null); + title = object.optString("title", null); + } catch (Exception e) { + FileLog.e(e); + } + StringBuilder totalText = new StringBuilder(); + if (title != null) { + totalText.append(title); + } + if (text != null) { + if (totalText.length() > 0) + totalText.append("\n"); + totalText.append(text); + } + if (url != null) { + if (totalText.length() > 0) + totalText.append("\n"); + totalText.append(url); + } + Intent intent = new Intent(Intent.ACTION_SEND); + intent.putExtra(Intent.EXTRA_TEXT, totalText.toString()); + if (file != null) { + File finalFile = null; + int i = 0; + while (finalFile == null || finalFile.exists()) { + finalFile = new File(FileLoader.getDirectory(FileLoader.MEDIA_DIR_CACHE), FileLoader.fixFileName(fileName == null ? "file" : fileName) + (i > 0 ? " (" + i + ")" : "")); + i++; + } + try { + FileOutputStream fos = new FileOutputStream(finalFile); + fos.write(file); + fos.close(); + } catch (Exception e) { + FileLog.e(e); + } + try { + if (fileMimeType == null) { + intent.setType("text/plain"); + } else { + intent.setType(fileMimeType); + } + if (fileName != null) { + intent.putExtra(Intent.EXTRA_TITLE, fileName); + } + if (Build.VERSION.SDK_INT >= 24) { + try { + intent.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(launchActivity, ApplicationLoader.getApplicationId() + ".provider", finalFile)); + intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + } catch (Exception ignore) { + intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(finalFile)); + } + } else { + intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(finalFile)); + } + } catch (Exception e) { + FileLog.e(e); + } + } else { + intent.setType("text/plain"); + } + launchActivity.whenWebviewShareAPIDone(success -> { + webView.evaluateJS("window.navigator.__share__receive("+(success?"":"'abort'")+")"); + }); + launchActivity.startActivityForResult(Intent.createChooser(intent, getString(R.string.ShareFile)), LaunchActivity.WEBVIEW_SHARE_API_REQUEST_CODE); + }); } } @@ -1804,6 +2330,9 @@ public interface Delegate { */ void onCloseRequested(@Nullable Runnable callback); + default void onInstantClose() { onCloseRequested(null); }; + default void onCloseToTabs() { onCloseRequested(null); }; + /** * Called when WebView requests to change closing behavior * @@ -1811,6 +2340,8 @@ public interface Delegate { */ void onWebAppSetupClosingBehavior(boolean needConfirmation); + void onWebAppSwipingBehavior(boolean allowSwiping); + /** * Called when WebView requests to send custom data * @@ -1827,6 +2358,8 @@ default void onSendWebViewData(String data) {} */ void onWebAppSetActionBarColor(int colorKey, int color, boolean isOverrideColor); + default void onWebAppBackgroundChanged(boolean actionBarColor, int color) {}; + /** * Called when WebView requests to set background color * @@ -1929,46 +2462,385 @@ public PopupButton(JSONObject obj) throws JSONException { private static int tags = 0; + public static boolean isTonsite(String url) { + return url != null && isTonsite(Uri.parse(url)); + } + + public static boolean isTonsite(Uri uri) { + if ("tonsite".equals(uri.getScheme())) { + return true; + } + String host = uri.getAuthority(); + if (host == null && uri.getScheme() == null) { + host = Uri.parse("http://" + uri.toString()).getAuthority(); + } + return host != null && (host.endsWith(".ton") || host.endsWith(".adnl")); + } + + public static WebResourceResponse proxyTON(WebResourceRequest req) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + return proxyTON(req.getMethod(), req.getUrl().toString(), req.getRequestHeaders()); + } + return null; + } + + public static String rotateTONHost(String hostname) { + try { + hostname = IDN.toASCII(hostname, IDN.ALLOW_UNASSIGNED); + } catch (Exception e) { + FileLog.e(e); + } + final String[] parts = hostname.split("\\."); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < parts.length; ++i) { + if (i > 0) { + sb.append("-d"); + } + sb.append(parts[i].replaceAll("\\-", "-h")); + } + sb.append(".").append(MessagesController.getInstance(UserConfig.selectedAccount).tonProxyAddress); + return sb.toString(); + } + + public static WebResourceResponse proxyTON(String method, String url, Map<String, String> headers) { + try { + url = Browser.replaceHostname(Uri.parse(url), rotateTONHost(AndroidUtilities.getHostAuthority(url)), "https"); + URL urlObj = new URL(url); + HttpURLConnection urlConnection = (HttpURLConnection) urlObj.openConnection(); + urlConnection.setRequestMethod(method); + if (headers != null) { + for (Map.Entry<String, String> e : headers.entrySet()) { + urlConnection.addRequestProperty(e.getKey(), e.getValue()); + } + } + urlConnection.connect(); + InputStream inputStream = urlConnection.getInputStream(); + final String contentType = urlConnection.getContentType(); + final String mimeType = contentType.split(";", 2)[0]; + return new WebResourceResponse(mimeType, urlConnection.getContentEncoding(), inputStream); + } catch (Exception e) { + FileLog.e(e); + } + return null; + } + + public static class DangerousWebWarning { + public final String url; + public final String threatType; + public final Runnable back, proceed; + public DangerousWebWarning( + String url, + String type, + Runnable back, + Runnable proceed + ) { + this.url = url; + this.threatType = type; + this.back = back; + this.proceed = proceed; + } + } + public static class MyWebView extends WebView { private final int tag = tags++; private boolean isPageLoaded; + private Runnable whenPageLoaded; + public final boolean bot; + + private String openedByUrl; + private String currentUrl; + private BrowserHistory.Entry currentHistoryEntry; + + public MyWebView opener; + public boolean errorShown; + public String errorShownAt; + + public String lastSiteName; + public boolean lastActionBarColorGot, lastBackgroundColorGot; + public int lastActionBarColor, lastBackgroundColor; + public String urlFallback = "about:blank"; + public boolean dangerousUrl; + + public DangerousWebWarning currentWarning; public boolean isPageLoaded() { return isPageLoaded; } + public void whenPageLoaded(Runnable runnable, long maxDelay) { + this.whenPageLoaded = runnable; + AndroidUtilities.runOnUIThread(() -> { + if (this.whenPageLoaded != null) { + Runnable callback = this.whenPageLoaded; + this.whenPageLoaded = null; + callback.run(); + } + }, maxDelay); + } + public void d(String s) { FileLog.d("[webview] #" + tag + " " + s); } - public MyWebView(Context context) { + public MyWebView(Context context, boolean bot) { super(context); - d("created new webview"); - - setWebViewClient(new WebViewClient() { - - @Nullable - @Override - public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { - d("shouldInterceptRequest " + (request == null ? null : request.getUrl())); - return super.shouldInterceptRequest(view, request); - } + this.bot = bot; + d("created new webview " + this); - @Nullable + setOnLongClickListener(new View.OnLongClickListener() { @Override - public WebResourceResponse shouldInterceptRequest(WebView view, String url) { - d("shouldInterceptRequest " + url); - return super.shouldInterceptRequest(view, url); - } + public boolean onLongClick(View v) { + WebView.HitTestResult result = getHitTestResult(); + if (result.getType() == WebView.HitTestResult.SRC_ANCHOR_TYPE) { + String url = result.getExtra(); - @Override - public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) { - d("onRenderProcessGone priority=" + (detail == null ? null : detail.rendererPriorityAtExit()) + " didCrash=" + (detail == null ? null : detail.didCrash())); - if (!AndroidUtilities.isSafeToShow(getContext())) { - return true; - } - new AlertDialog.Builder(getContext(), botWebViewContainer == null ? null : botWebViewContainer.resourcesProvider) - .setTitle(getString(R.string.ChromeCrashTitle)) + BottomSheet.Builder builder = new BottomSheet.Builder(getContext(), false, null); + String formattedUrl = url; + try { + try { + Uri uri = Uri.parse(formattedUrl); + formattedUrl = Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null); + } catch (Exception e) { + FileLog.e(e, false); + } + formattedUrl = URLDecoder.decode(formattedUrl.replaceAll("\\+", "%2b"), "UTF-8"); + } catch (Exception e) { + FileLog.e(e); + } + builder.setTitleMultipleLines(true); + builder.setTitle(formattedUrl); + builder.setItems(new CharSequence[]{ + LocaleController.getString(R.string.OpenInTelegramBrowser), + LocaleController.getString(R.string.OpenInSystemBrowser), + LocaleController.getString(R.string.Copy) + }, (dialog, which) -> { + if (which == 0) { + loadUrl(url); + } else if (which == 1) { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + intent.putExtra(android.provider.Browser.EXTRA_CREATE_NEW_TAB, true); + intent.putExtra(android.provider.Browser.EXTRA_APPLICATION_ID, getContext().getPackageName()); + getContext().startActivity(intent); + } else if (which == 2) { + AndroidUtilities.addToClipboard(url); + if (botWebViewContainer != null) { + botWebViewContainer.showLinkCopiedBulletin(); + } + } + }); + builder.show(); + + return true; + } else if (result.getType() == HitTestResult.IMAGE_TYPE) { + String imageUrl = result.getExtra(); + + BottomSheet.Builder builder = new BottomSheet.Builder(getContext(), false, null); + String formattedUrl = imageUrl; + try { + try { + Uri uri = Uri.parse(formattedUrl); + formattedUrl = Browser.replaceHostname(uri, Browser.IDN_toUnicode(uri.getHost()), null); + } catch (Exception e) { + FileLog.e(e, false); + } + formattedUrl = URLDecoder.decode(formattedUrl.replaceAll("\\+", "%2b"), "UTF-8"); + } catch (Exception e) { + FileLog.e(e); + } + builder.setTitleMultipleLines(true); + builder.setTitle(formattedUrl); + builder.setItems(new CharSequence[]{ + LocaleController.getString(R.string.OpenInSystemBrowser), + LocaleController.getString(R.string.AccActionDownload), + LocaleController.getString(R.string.CopyLink) + }, (dialog, which) -> { + if (which == 0) { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(imageUrl)); + intent.putExtra(android.provider.Browser.EXTRA_CREATE_NEW_TAB, true); + intent.putExtra(android.provider.Browser.EXTRA_APPLICATION_ID, getContext().getPackageName()); + getContext().startActivity(intent); + } else if (which == 1) { + try { + String filename = URLUtil.guessFileName(imageUrl, null, "image/*"); + if (filename == null) { + filename = "image.png"; + } + + DownloadManager.Request request = new DownloadManager.Request(Uri.parse(imageUrl)); + request.setMimeType("image/*"); + request.setDescription(getString(R.string.WebDownloading)); + request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); + request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename); + DownloadManager downloadManager = (DownloadManager) getContext().getSystemService(Context.DOWNLOAD_SERVICE); + if (downloadManager != null) { + downloadManager.enqueue(request); + } + + if (botWebViewContainer != null) { + BulletinFactory.of(botWebViewContainer, botWebViewContainer.resourcesProvider) + .createSimpleBulletin(R.raw.ic_download, AndroidUtilities.replaceTags(formatString(R.string.WebDownloadingFile, filename))) + .show(true); + } + } catch (Exception e2) { + FileLog.e(e2); + } + } else if (which == 2) { + AndroidUtilities.addToClipboard(imageUrl); + if (botWebViewContainer != null) { + botWebViewContainer.showLinkCopiedBulletin(); + } + } + }); + builder.show(); + + return true; + } + return false; + } + }); + + setWebViewClient(new WebViewClient() { + + private boolean firstRequest = true; + @Nullable + @Override + public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + d("shouldInterceptRequest " + (request == null ? null : request.getUrl())); + if (request != null && isTonsite(request.getUrl())) { + d("proxying ton"); + firstRequest = false; + return proxyTON(request); + } + if (!bot && opener != null && firstRequest) { + HttpURLConnection connection = null; + try { + URL connectionUrl = new URL(request.getUrl().toString()); + connection = (HttpURLConnection) connectionUrl.openConnection(); + connection.setRequestMethod(request.getMethod()); + if (request.getRequestHeaders() != null) { + for (Map.Entry<String, String> e: request.getRequestHeaders().entrySet()) { + connection.setRequestProperty(e.getKey(), e.getValue()); + } + } + connection.connect(); + HashMap<String, String> headers = new HashMap<>(); + for (Map.Entry<String, List<String>> e: connection.getHeaderFields().entrySet()) { + final String key = e.getKey(); + if (key == null) continue; + headers.put(key, TextUtils.join(", ", e.getValue())); + if (!dangerousUrl && ( + "cross-origin-resource-policy".equals(key.toLowerCase()) || + "cross-origin-embedder-policy".equals(key.toLowerCase()) + )) { + for (String val : e.getValue()) { + if (val == null) continue; + if (!("unsafe-none".equals(val.toLowerCase()) || "same-site".equals(val.toLowerCase()))) { + d("<!> dangerous header CORS policy: " + key + ": " + val + " from " + request.getMethod() + " " + request.getUrl()); + dangerousUrl = true; + AndroidUtilities.runOnUIThread(() -> { + if (botWebViewContainer != null) { + botWebViewContainer.onURLChanged(urlFallback, !canGoBack(), !canGoForward()); + } + }); + break; + } + } + } + } + String contentType = connection.getContentType(); + String encoding = connection.getContentEncoding(); + if (contentType.indexOf("; ") >= 0) { + String[] parts = contentType.split("; "); + if (!TextUtils.isEmpty(parts[0])) { + contentType = parts[0]; + } + for (int i = 1; i < parts.length; ++i) { + if (parts[i].startsWith("charset=")) { + encoding = parts[i].substring(8); + } + } + } + firstRequest = false; + return new WebResourceResponse( + contentType, + encoding, + connection.getResponseCode(), + connection.getResponseMessage(), + headers, + connection.getInputStream() + ); + } catch (Exception e) { + FileLog.e(e); + if (connection != null) { + connection.disconnect(); + } + } + } + } + firstRequest = false; + return super.shouldInterceptRequest(view, request); + } + + @Override + public void onPageCommitVisible(WebView view, String url) { + if (MyWebView.this.whenPageLoaded != null) { + Runnable callback = MyWebView.this.whenPageLoaded; + MyWebView.this.whenPageLoaded = null; + callback.run(); + } + d("onPageCommitVisible " + url); + if (!bot) { + injectedJS = true; + evaluateJS(RLottieDrawable.readRes(null, R.raw.webview_ext).replace("$DEBUG$", "" + BuildVars.DEBUG_VERSION)); + evaluateJS(RLottieDrawable.readRes(null, R.raw.webview_share)); + } else { + injectedJS = true; + evaluateJS(RLottieDrawable.readRes(null, R.raw.webview_app_ext).replace("$DEBUG$", "" + BuildVars.DEBUG_VERSION)); + } + super.onPageCommitVisible(view, url); + } + + @Override + public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) { + if (!bot && (currentHistoryEntry == null || !TextUtils.equals(currentHistoryEntry.url, url))) { + currentHistoryEntry = new BrowserHistory.Entry(); + currentHistoryEntry.id = Utilities.fastRandom.nextLong(); + currentHistoryEntry.time = System.currentTimeMillis(); + currentHistoryEntry.url = magic2tonsite(getUrl()); + currentHistoryEntry.meta = WebMetadataCache.WebMetadata.from(MyWebView.this); + BrowserHistory.pushHistory(currentHistoryEntry); + } + d("doUpdateVisitedHistory " + url + " " + isReload); + if (botWebViewContainer != null) { + botWebViewContainer.onURLChanged(dangerousUrl ? urlFallback : url, !canGoBack(), !canGoForward()); + } + super.doUpdateVisitedHistory(view, url, isReload); + } + + @Nullable + @Override + public WebResourceResponse shouldInterceptRequest(WebView view, String url) { + d("shouldInterceptRequest " + url); + if (isTonsite(url)) { + d("proxying ton"); + return proxyTON("GET", url, null); + } + return super.shouldInterceptRequest(view, url); + } + + @Override + public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + d("onRenderProcessGone priority=" + (detail == null ? null : detail.rendererPriorityAtExit()) + " didCrash=" + (detail == null ? null : detail.didCrash())); + } else { + d("onRenderProcessGone"); + } + if (!AndroidUtilities.isSafeToShow(getContext())) { + return true; + } + new AlertDialog.Builder(getContext(), botWebViewContainer == null ? null : botWebViewContainer.resourcesProvider) + .setTitle(getString(R.string.ChromeCrashTitle)) .setMessage(AndroidUtilities.replaceSingleTag(getString(R.string.ChromeCrashMessage), () -> Browser.openUrl(getContext(), "https://play.google.com/store/apps/details?id=com.google.android.webview"))) .setPositiveButton(getString(R.string.OK), null) .setOnDismissListener(d -> { @@ -1982,99 +2854,302 @@ public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { + if (url == null) return false; Uri uriNew = Uri.parse(url); + if (!bot && Browser.openInExternalApp(context, url, true)) { + d("shouldOverrideUrlLoading("+url+") = true (openInExternalBrowser)"); + if (!isPageLoaded && !canGoBack()) { + if (botWebViewContainer.delegate != null) { + botWebViewContainer.delegate.onInstantClose(); + } else if (onCloseListener != null) { + onCloseListener.run(); + onCloseListener = null; + } + } + return true; + } + if (!bot && uriNew != null && uriNew.getScheme() != null && !("https".equals(uriNew.getScheme()) || "http".equals(uriNew.getScheme()) || "tonsite".equals(uriNew.getScheme()))) { + d("shouldOverrideUrlLoading("+url+") = true (browser open)"); + Browser.openUrl(getContext(), uriNew); + return true; + } if (botWebViewContainer != null && Browser.isInternalUri(uriNew, null)) { + if (!bot && "1".equals(uriNew.getQueryParameter("embed")) && "t.me".equals(uriNew.getAuthority())) { + return false; + } if (MessagesController.getInstance(botWebViewContainer.currentAccount).webAppAllowedProtocols != null && MessagesController.getInstance(botWebViewContainer.currentAccount).webAppAllowedProtocols.contains(uriNew.getScheme())) { + if (opener != null) { + if (botWebViewContainer.delegate != null) { + botWebViewContainer.delegate.onInstantClose(); + } else if (onCloseListener != null) { + onCloseListener.run(); + onCloseListener = null; + } + if (opener.botWebViewContainer != null && opener.botWebViewContainer.delegate != null) { + opener.botWebViewContainer.delegate.onCloseToTabs(); + } + } botWebViewContainer.onOpenUri(uriNew); } d("shouldOverrideUrlLoading("+url+") = true"); return true; } + if (uriNew != null) { + currentUrl = uriNew.toString(); + } d("shouldOverrideUrlLoading("+url+") = false"); return false; } + private final Runnable resetErrorRunnable = () -> { + if (botWebViewContainer != null) { + botWebViewContainer.onErrorShown(errorShown = false, 0, null); + } + }; + @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { + currentHistoryEntry = null; + currentUrl = url; + lastSiteName = null; + lastActionBarColorGot = false; + lastBackgroundColorGot = false; + lastFaviconGot = false; d("onPageStarted " + url); + if (botWebViewContainer != null && errorShown && (errorShownAt == null || !TextUtils.equals(errorShownAt, url))) { + AndroidUtilities.runOnUIThread(resetErrorRunnable, 40); + } + if (botWebViewContainer != null) { + botWebViewContainer.onURLChanged(dangerousUrl ? urlFallback : url, !canGoBack(), !canGoForward()); + } super.onPageStarted(view, url, favicon); + injectedJS = false; } @Override public void onPageFinished(WebView view, String url) { isPageLoaded = true; + boolean animated = true; + if (MyWebView.this.whenPageLoaded != null) { + Runnable callback = MyWebView.this.whenPageLoaded; + MyWebView.this.whenPageLoaded = null; + callback.run(); + animated = false; + } d("onPageFinished"); if (botWebViewContainer != null) { - botWebViewContainer.setPageLoaded(url); + botWebViewContainer.setPageLoaded(url, animated); } else { d("onPageFinished: no container"); } + if (!bot) { + injectedJS = true; + evaluateJS(RLottieDrawable.readRes(null, R.raw.webview_ext).replace("$DEBUG$", "" + BuildVars.DEBUG_VERSION)); + evaluateJS(RLottieDrawable.readRes(null, R.raw.webview_share)); + } else { + injectedJS = true; + evaluateJS(RLottieDrawable.readRes(null, R.raw.webview_app_ext).replace("$DEBUG$", "" + BuildVars.DEBUG_VERSION)); + } + saveHistory(); + if (botWebViewContainer != null) { + botWebViewContainer.onURLChanged(dangerousUrl ? urlFallback : getUrl(), !canGoBack(), !canGoForward()); + } +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { +// CookieManager.getInstance().flush(); +// } } @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { - d("onReceivedError: " + error.getErrorCode() + " " + error.getDescription()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + d("onReceivedError: " + error.getErrorCode() + " " + error.getDescription()); + if (botWebViewContainer != null && (request == null || request.isForMainFrame())) { + AndroidUtilities.cancelRunOnUIThread(resetErrorRunnable); + lastSiteName = null; + lastActionBarColorGot = false; + lastBackgroundColorGot = false; + lastFaviconGot = false; + lastTitleGot = false; + errorShownAt = request == null || request.getUrl() == null ? getUrl() : request.getUrl().toString(); + botWebViewContainer.onTitleChanged(lastTitle = null); + botWebViewContainer.onFaviconChanged(lastFavicon = null); + botWebViewContainer.onErrorShown(errorShown = true, error.getErrorCode(), error.getDescription() == null ? null : error.getDescription().toString()); + } + } super.onReceivedError(view, request, error); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { d("onReceivedError: " + errorCode + " " + description + " url=" + failingUrl); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { + if (botWebViewContainer != null) { + AndroidUtilities.cancelRunOnUIThread(resetErrorRunnable); + lastSiteName = null; + lastActionBarColorGot = false; + lastBackgroundColorGot = false; + lastFaviconGot = false; + lastTitleGot = false; + errorShownAt = getUrl(); + botWebViewContainer.onTitleChanged(lastTitle = null); + botWebViewContainer.onFaviconChanged(lastFavicon = null); + botWebViewContainer.onErrorShown(errorShown = true, errorCode, description); + } + } super.onReceivedError(view, errorCode, description, failingUrl); } @Override public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) { - d("onReceivedHttpError: statusCode=" + (errorResponse == null ? null : errorResponse.getStatusCode()) + " request=" + (request == null ? null : request.getUrl())); super.onReceivedHttpError(view, request, errorResponse); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + d("onReceivedHttpError: statusCode=" + (errorResponse == null ? null : errorResponse.getStatusCode()) + " request=" + (request == null ? null : request.getUrl())); + if (botWebViewContainer != null && (request == null || request.isForMainFrame()) && errorResponse != null && TextUtils.isEmpty(errorResponse.getMimeType())) { + AndroidUtilities.cancelRunOnUIThread(resetErrorRunnable); + lastSiteName = null; + lastActionBarColorGot = false; + lastBackgroundColorGot = false; + lastFaviconGot = false; + lastTitleGot = false; + errorShownAt = request == null || request.getUrl() == null ? getUrl() : request.getUrl().toString(); + botWebViewContainer.onTitleChanged(lastTitle = null); + botWebViewContainer.onFaviconChanged(lastFavicon = null); + botWebViewContainer.onErrorShown(errorShown = true, errorResponse.getStatusCode(), errorResponse.getReasonPhrase()); + } + } } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { d("onReceivedSslError: error="+error+" url=" + (error == null ? null : error.getUrl())); + handler.cancel(); super.onReceivedSslError(view, handler, error); } }); setWebChromeClient(new WebChromeClient() { private Dialog lastPermissionsDialog; + @Override + public void onReceivedIcon(WebView view, Bitmap icon) { + d("onReceivedIcon favicon=" + (icon == null ? "null" : icon.getWidth() + "x" + icon.getHeight())); + if (icon != null && (!TextUtils.equals(getUrl(), lastFaviconUrl) || lastFavicon == null || icon.getWidth() > lastFavicon.getWidth())) { + lastFavicon = icon; + lastFaviconUrl = getUrl(); + lastFaviconGot = true; + saveHistory(); + } + Bitmap lastFav = lastFavicons.get(getUrl()); + if (icon != null && (lastFav == null || lastFav.getWidth() < icon.getWidth())) { + lastFavicons.put(getUrl(), icon); + } + if (botWebViewContainer != null) { + botWebViewContainer.onFaviconChanged(icon); + } + super.onReceivedIcon(view, icon); + } + + @Override + public void onReceivedTitle(WebView view, String title) { + d("onReceivedTitle title=" + title); + if (!errorShown) { + lastTitleGot = true; + lastTitle = title; + } + if (botWebViewContainer != null) { + botWebViewContainer.onTitleChanged(title); + } + super.onReceivedTitle(view, title); + } + + @Override + public void onReceivedTouchIconUrl(WebView view, String url, boolean precomposed) { + d("onReceivedTouchIconUrl url=" + url + " precomposed=" + precomposed); + super.onReceivedTouchIconUrl(view, url, precomposed); + } + @Override public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { d("onCreateWindow isDialog=" + isDialog + " isUserGesture=" + isUserGesture + " resultMsg=" + resultMsg); - WebView newWebView = new WebView(view.getContext()); - newWebView.setWebViewClient(new WebViewClient() { - @Override - public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) { - d("newWebView.onRenderProcessGone priority=" + (detail == null ? null : detail.rendererPriorityAtExit()) + " didCrash=" + (detail == null ? null : detail.didCrash())); - if (!AndroidUtilities.isSafeToShow(getContext())) { - return true; - } - new AlertDialog.Builder(getContext(), botWebViewContainer == null ? null : botWebViewContainer.resourcesProvider) - .setTitle(getString(R.string.ChromeCrashTitle)) - .setMessage(AndroidUtilities.replaceSingleTag(getString(R.string.ChromeCrashMessage), () -> Browser.openUrl(getContext(), "https://play.google.com/store/apps/details?id=com.google.android.webview"))) - .setPositiveButton(getString(R.string.OK), null) - .setOnDismissListener(d -> { - if (botWebViewContainer.delegate != null) { - botWebViewContainer.delegate.onCloseRequested(null); - } - }) - .show(); - return true; + final String fromUrl = getUrl(); + if (SharedConfig.inappBrowser) { + if (botWebViewContainer == null) return false; + BaseFragment lastFragment = LaunchActivity.getSafeLastFragment(); + if (lastFragment == null) return false; + if (lastFragment.getParentLayout() instanceof ActionBarLayout) { + lastFragment = ((ActionBarLayout) lastFragment.getParentLayout()).getSheetFragment(); } + ArticleViewer articleViewer = lastFragment.createArticleViewer(true); + articleViewer.setOpener(MyWebView.this); + articleViewer.open((String) null); + + MyWebView newWebView = articleViewer.getLastWebView(); + if (!TextUtils.isEmpty(fromUrl)) { + newWebView.urlFallback = fromUrl; + } + d("onCreateWindow: newWebView=" + newWebView); + if (newWebView != null) { + WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; + transport.setWebView(newWebView); + resultMsg.sendToTarget(); - @Override - public boolean shouldOverrideUrlLoading(WebView view, String url) { - if (botWebViewContainer != null) { - botWebViewContainer.onOpenUri(Uri.parse(url)); - } return true; + } else { + articleViewer.close(true, true); + return false; } - }); - WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; - transport.setWebView(newWebView); - resultMsg.sendToTarget(); - return true; + } else { + WebView newWebView = new WebView(view.getContext()); + newWebView.setWebViewClient(new WebViewClient() { + @Override + public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + d("newWebView.onRenderProcessGone priority=" + (detail == null ? null : detail.rendererPriorityAtExit()) + " didCrash=" + (detail == null ? null : detail.didCrash())); + } else { + d("newWebView.onRenderProcessGone"); + } + if (!AndroidUtilities.isSafeToShow(getContext())) { + return true; + } + new AlertDialog.Builder(getContext(), botWebViewContainer == null ? null : botWebViewContainer.resourcesProvider) + .setTitle(getString(R.string.ChromeCrashTitle)) + .setMessage(AndroidUtilities.replaceSingleTag(getString(R.string.ChromeCrashMessage), () -> Browser.openUrl(getContext(), "https://play.google.com/store/apps/details?id=com.google.android.webview"))) + .setPositiveButton(getString(R.string.OK), null) + .setOnDismissListener(d -> { + if (botWebViewContainer.delegate != null) { + botWebViewContainer.delegate.onCloseRequested(null); + } + }) + .show(); + return true; + } + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + if (botWebViewContainer != null) { + botWebViewContainer.onOpenUri(Uri.parse(url)); + newWebView.destroy(); + } + return true; + } + }); + WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; + transport.setWebView(newWebView); + resultMsg.sendToTarget(); + return true; + } + } + + @Override + public void onCloseWindow(WebView window) { + d("onCloseWindow " + window); + if (botWebViewContainer != null && botWebViewContainer.delegate != null) { + botWebViewContainer.delegate.onCloseRequested(null); + } else if (onCloseListener != null) { + onCloseListener.run(); + onCloseListener = null; + } + super.onCloseWindow(window); } @Override @@ -2125,22 +3200,31 @@ public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermiss return; } d("onGeolocationPermissionsShowPrompt " + origin); - lastPermissionsDialog = AlertsCreator.createWebViewPermissionsRequestDialog(botWebViewContainer.parentActivity, botWebViewContainer.resourcesProvider, new String[] {Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, R.raw.permission_request_location, LocaleController.formatString(R.string.BotWebViewRequestGeolocationPermission, UserObject.getUserName(botWebViewContainer.botUser)), LocaleController.formatString(R.string.BotWebViewRequestGeolocationPermissionWithHint, UserObject.getUserName(botWebViewContainer.botUser)), allow -> { - if (lastPermissionsDialog != null) { - lastPermissionsDialog = null; - - if (allow) { - botWebViewContainer.runWithPermissions(new String[] {Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, allowSystem -> { - callback.invoke(origin, allowSystem, false); - if (allowSystem) { - botWebViewContainer.hasUserPermissions = true; - } - }); - } else { - callback.invoke(origin, false, false); + final String name = bot ? UserObject.getUserName(botWebViewContainer.botUser) : AndroidUtilities.getHostAuthority(getUrl()); + lastPermissionsDialog = AlertsCreator.createWebViewPermissionsRequestDialog( + botWebViewContainer.parentActivity, + botWebViewContainer.resourcesProvider, + new String[] {Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, + R.raw.permission_request_location, + formatString(bot ? R.string.BotWebViewRequestGeolocationPermission : R.string.WebViewRequestGeolocationPermission, name), + formatString(bot ? R.string.BotWebViewRequestGeolocationPermissionWithHint : R.string.BotWebViewRequestGeolocationPermissionWithHint, name), + allow -> { + if (lastPermissionsDialog != null) { + lastPermissionsDialog = null; + + if (allow) { + botWebViewContainer.runWithPermissions(new String[] {Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, allowSystem -> { + callback.invoke(origin, allowSystem, false); + if (allowSystem) { + botWebViewContainer.hasUserPermissions = true; + } + }); + } else { + callback.invoke(origin, false, false); + } } } - }); + ); lastPermissionsDialog.show(); } @@ -2169,6 +3253,7 @@ public void onPermissionRequest(PermissionRequest request) { } d("onPermissionRequest " + request); + final String name = bot ? UserObject.getUserName(botWebViewContainer.botUser) : AndroidUtilities.getHostAuthority(getUrl()); String[] resources = request.getResources(); if (resources.length == 1) { String resource = resources[0]; @@ -2180,46 +3265,62 @@ public void onPermissionRequest(PermissionRequest request) { switch (resource) { case PermissionRequest.RESOURCE_AUDIO_CAPTURE: { - lastPermissionsDialog = AlertsCreator.createWebViewPermissionsRequestDialog(botWebViewContainer.parentActivity, botWebViewContainer.resourcesProvider, new String[] {Manifest.permission.RECORD_AUDIO}, R.raw.permission_request_microphone, LocaleController.formatString(R.string.BotWebViewRequestMicrophonePermission, UserObject.getUserName(botWebViewContainer.botUser)), LocaleController.formatString(R.string.BotWebViewRequestMicrophonePermissionWithHint, UserObject.getUserName(botWebViewContainer.botUser)), allow -> { - if (lastPermissionsDialog != null) { - lastPermissionsDialog = null; - - if (allow) { - botWebViewContainer.runWithPermissions(new String[] {Manifest.permission.RECORD_AUDIO}, allowSystem -> { - if (allowSystem) { - request.grant(new String[] {resource}); - botWebViewContainer.hasUserPermissions = true; - } else { - request.deny(); - } - }); - } else { - request.deny(); + lastPermissionsDialog = AlertsCreator.createWebViewPermissionsRequestDialog( + botWebViewContainer.parentActivity, + botWebViewContainer.resourcesProvider, + new String[] {Manifest.permission.RECORD_AUDIO}, + R.raw.permission_request_microphone, + formatString(bot ? R.string.BotWebViewRequestMicrophonePermission : R.string.WebViewRequestMicrophonePermission, name), + formatString(bot ? R.string.BotWebViewRequestMicrophonePermissionWithHint : R.string.WebViewRequestMicrophonePermissionWithHint, name), + allow -> { + if (lastPermissionsDialog != null) { + lastPermissionsDialog = null; + + if (allow) { + botWebViewContainer.runWithPermissions(new String[] {Manifest.permission.RECORD_AUDIO}, allowSystem -> { + if (allowSystem) { + request.grant(new String[] {resource}); + botWebViewContainer.hasUserPermissions = true; + } else { + request.deny(); + } + }); + } else { + request.deny(); + } } } - }); + ); lastPermissionsDialog.show(); break; } case PermissionRequest.RESOURCE_VIDEO_CAPTURE: { - lastPermissionsDialog = AlertsCreator.createWebViewPermissionsRequestDialog(botWebViewContainer.parentActivity, botWebViewContainer.resourcesProvider, new String[] {Manifest.permission.CAMERA}, R.raw.permission_request_camera, LocaleController.formatString(R.string.BotWebViewRequestCameraPermission, UserObject.getUserName(botWebViewContainer.botUser)), LocaleController.formatString(R.string.BotWebViewRequestCameraPermissionWithHint, UserObject.getUserName(botWebViewContainer.botUser)), allow -> { - if (lastPermissionsDialog != null) { - lastPermissionsDialog = null; - - if (allow) { - botWebViewContainer.runWithPermissions(new String[] {Manifest.permission.CAMERA}, allowSystem -> { - if (allowSystem) { - request.grant(new String[] {resource}); - botWebViewContainer.hasUserPermissions = true; - } else { - request.deny(); - } - }); - } else { - request.deny(); + lastPermissionsDialog = AlertsCreator.createWebViewPermissionsRequestDialog( + botWebViewContainer.parentActivity, + botWebViewContainer.resourcesProvider, + new String[] {Manifest.permission.CAMERA}, + R.raw.permission_request_camera, + formatString(bot ? R.string.BotWebViewRequestCameraPermission : R.string.WebViewRequestCameraPermission, name), + formatString(bot ? R.string.BotWebViewRequestCameraPermissionWithHint : R.string.WebViewRequestCameraPermissionWithHint, name), + allow -> { + if (lastPermissionsDialog != null) { + lastPermissionsDialog = null; + + if (allow) { + botWebViewContainer.runWithPermissions(new String[] {Manifest.permission.CAMERA}, allowSystem -> { + if (allowSystem) { + request.grant(new String[] {resource}); + botWebViewContainer.hasUserPermissions = true; + } else { + request.deny(); + } + }); + } else { + request.deny(); + } } } - }); + ); lastPermissionsDialog.show(); break; } @@ -2229,24 +3330,32 @@ public void onPermissionRequest(PermissionRequest request) { (PermissionRequest.RESOURCE_AUDIO_CAPTURE.equals(resources[0]) || PermissionRequest.RESOURCE_VIDEO_CAPTURE.equals(resources[0])) && (PermissionRequest.RESOURCE_AUDIO_CAPTURE.equals(resources[1]) || PermissionRequest.RESOURCE_VIDEO_CAPTURE.equals(resources[1])) ) { - lastPermissionsDialog = AlertsCreator.createWebViewPermissionsRequestDialog(botWebViewContainer.parentActivity, botWebViewContainer.resourcesProvider, new String[] {Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO}, R.raw.permission_request_camera, LocaleController.formatString(R.string.BotWebViewRequestCameraMicPermission, UserObject.getUserName(botWebViewContainer.botUser)), LocaleController.formatString(R.string.BotWebViewRequestCameraMicPermissionWithHint, UserObject.getUserName(botWebViewContainer.botUser)), allow -> { - if (lastPermissionsDialog != null) { - lastPermissionsDialog = null; - - if (allow) { - botWebViewContainer.runWithPermissions(new String[] {Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO}, allowSystem -> { - if (allowSystem) { - request.grant(new String[] {resources[0], resources[1]}); - botWebViewContainer.hasUserPermissions = true; - } else { - request.deny(); - } - }); - } else { - request.deny(); + lastPermissionsDialog = AlertsCreator.createWebViewPermissionsRequestDialog( + botWebViewContainer.parentActivity, + botWebViewContainer.resourcesProvider, + new String[] {Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO}, + R.raw.permission_request_camera, + formatString(bot ? R.string.BotWebViewRequestCameraMicPermission : R.string.WebViewRequestCameraMicPermission, name), + formatString(bot ? R.string.BotWebViewRequestCameraMicPermissionWithHint : R.string.WebViewRequestCameraMicPermissionWithHint, name), + allow -> { + if (lastPermissionsDialog != null) { + lastPermissionsDialog = null; + + if (allow) { + botWebViewContainer.runWithPermissions(new String[] {Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO}, allowSystem -> { + if (allowSystem) { + request.grant(new String[] {resources[0], resources[1]}); + botWebViewContainer.hasUserPermissions = true; + } else { + request.deny(); + } + }); + } else { + request.deny(); + } } } - }); + ); lastPermissionsDialog.show(); } } @@ -2262,16 +3371,197 @@ public void onPermissionRequestCanceled(PermissionRequest request) { d("onPermissionRequestCanceled: no dialog"); } } + + @Nullable + @Override + public Bitmap getDefaultVideoPoster() { + return Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888); + } + }); + setFindListener(new FindListener() { + @Override + public void onFindResultReceived(int activeMatchOrdinal, int numberOfMatches, boolean isDoneCounting) { + searchIndex = activeMatchOrdinal; + searchCount = numberOfMatches; + searchLoading = !isDoneCounting; + if (searchListener != null) { + searchListener.run(); + } + } }); + if (!bot) { + setDownloadListener(new DownloadListener() { + private String getFilename(String url, String contentDisposition, String mimeType) { + try { + List<String> segments = Uri.parse(url).getPathSegments(); + String lastSegment = segments.get(segments.size() - 1); + int index = lastSegment.lastIndexOf("."); + if (index > 0) { + String ext = lastSegment.substring(index + 1); + if (!TextUtils.isEmpty(ext)) + return lastSegment; + } + } catch (Exception e) {} + return URLUtil.guessFileName(url, contentDisposition, mimeType); + } + + @Override + public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimeType, long contentLength) { + d("onDownloadStart " + url + " " + userAgent + " " + contentDisposition + " " + mimeType + " " + contentLength); + try { + if (url.startsWith("blob:")) { + // we can't get blob binary from webview :( + return; + } else { + final String filename = getFilename(url, contentDisposition, mimeType); + + final Runnable download = () -> { + try { + DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); + request.setMimeType(mimeType); + request.addRequestHeader("User-Agent", userAgent); + request.setDescription(getString(R.string.WebDownloading)); + request.setTitle(filename); + request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); + request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename); + DownloadManager downloadManager = (DownloadManager) getContext().getSystemService(Context.DOWNLOAD_SERVICE); + if (downloadManager != null) { + downloadManager.enqueue(request); + } + + if (botWebViewContainer != null) { + BulletinFactory.of(botWebViewContainer, botWebViewContainer.resourcesProvider) + .createSimpleBulletin(R.raw.ic_download, AndroidUtilities.replaceTags(formatString(R.string.WebDownloadingFile, filename))) + .show(true); + } + } catch (Exception e2) { + FileLog.e(e2); + } + }; + if (!DownloadController.getInstance(UserConfig.selectedAccount).canDownloadMedia(DownloadController.AUTODOWNLOAD_TYPE_DOCUMENT, contentLength)) { + AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + builder.setTitle(getString(R.string.WebDownloadAlertTitle)); + builder.setMessage(AndroidUtilities.replaceTags(contentLength > 0 ? formatString(R.string.WebDownloadAlertInfoWithSize, filename, AndroidUtilities.formatFileSize(contentLength)) : formatString(R.string.WebDownloadAlertInfo, filename))); + builder.setPositiveButton(getString(R.string.WebDownloadAlertYes), (di, w) -> download.run()); + builder.setNegativeButton(getString(R.string.Cancel), null); + AlertDialog alertDialog = builder.show(); + TextView button = (TextView) alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE); + if (button != null) { + button.setTextColor(Theme.getColor(Theme.key_text_RedBold)); + } + } else { + download.run(); + } + } + } catch(Exception e){ + FileLog.e(e); + } + } + }); + } + } + + private void saveHistory() { + if (bot) return; + WebMetadataCache.WebMetadata meta = WebMetadataCache.WebMetadata.from(MyWebView.this); + WebMetadataCache.getInstance().save(meta); + if (currentHistoryEntry != null && meta != null) { + currentHistoryEntry.meta = meta; + BrowserHistory.pushHistory(currentHistoryEntry); + } + } + + private int searchIndex; + private int searchCount; + private boolean searchLoading; + private Runnable searchListener; + + public void search(String text, Runnable listener) { + searchLoading = true; + this.searchListener = listener; + findAllAsync(text); + } + + public int getSearchIndex() { + return searchIndex; + } + + public int getSearchCount() { + return searchCount; + } + + public boolean lastTitleGot; + public String lastTitle; + private String lastFaviconUrl; + public boolean lastFaviconGot; + public boolean injectedJS; + public Bitmap lastFavicon; + private String lastUrl; + private HashMap<String, Bitmap> lastFavicons = new HashMap<>(); + private boolean loading; + + public String getTitle() { + if (currentWarning != null) return ""; + return lastTitle; + } + public void setTitle(String title) { + lastTitle = title; + } + + public String getOpenURL() { + return openedByUrl; + } + + @Nullable + @Override + public String getUrl() { + if (currentWarning != null) return currentWarning.url; + if (dangerousUrl) return urlFallback; +// if (errorShown) return lastUrl; + return lastUrl = super.getUrl(); + } + + public boolean isUrlDangerous() { + return dangerousUrl || currentWarning != null; + } + + public Bitmap getFavicon() { + if (errorShown) return null; + return lastFavicon; + } + + public Bitmap getFavicon(String url) { + return lastFavicons.get(url); } private BotWebViewContainer botWebViewContainer; private WebViewScrollListener webViewScrollListener; + private Runnable onCloseListener; public void setContainers(BotWebViewContainer botWebViewContainer, WebViewScrollListener webViewScrollListener) { d("setContainers(" + botWebViewContainer + ", " + webViewScrollListener + ")"); + final boolean attachedAgain = this.botWebViewContainer == null && botWebViewContainer != null; this.botWebViewContainer = botWebViewContainer; this.webViewScrollListener = webViewScrollListener; + if (attachedAgain) { + evaluateJS("window.__tg__postBackgroundChange()"); + } + } + + public void setCloseListener(Runnable closeListener) { + onCloseListener = closeListener; + } + + public void evaluateJS(String script) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + evaluateJavascript(script, value -> {}); + } else { + try { + loadUrl("javascript:" + URLEncoder.encode(script, "UTF-8")); + } catch (UnsupportedEncodingException e) { + loadUrl("javascript:" + URLEncoder.encode(script)); + } + } } private int prevScrollX, prevScrollY; @@ -2288,6 +3578,18 @@ protected void onScrollChanged(int l, int t, int oldl, int oldt) { prevScrollY = getScrollY(); } + public float getScrollProgress() { + final float scrollHeight = Math.max(1, computeVerticalScrollRange() - computeVerticalScrollExtent()); + if (scrollHeight <= getHeight()) { + return 0f; + } + return Utilities.clamp01((float) getScrollY() / scrollHeight); + } + + public void setScrollProgress(float progress) { + setScrollY((int) (progress * Math.max(1, computeVerticalScrollRange() - computeVerticalScrollExtent()))); + } + @Override public void setScrollX(int value) { super.setScrollX(value); @@ -2347,30 +3649,110 @@ public void destroy() { @Override public void loadUrl(@NonNull String url) { + final String ourl = url; + checkCachedMetaProperties(url); + openedByUrl = url; +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { +// CookieManager.getInstance().flush(); +// } + url = tonsite2magic(url); + currentUrl = url; d("loadUrl " + url); super.loadUrl(url); + if (botWebViewContainer != null) { + botWebViewContainer.onURLChanged(dangerousUrl ? urlFallback : url, !canGoBack(), !canGoForward()); + } } @Override public void loadUrl(@NonNull String url, @NonNull Map<String, String> additionalHttpHeaders) { + final String ourl = url; + checkCachedMetaProperties(url); + openedByUrl = url; + url = tonsite2magic(url); + currentUrl = url; d("loadUrl " + url + " " + additionalHttpHeaders); super.loadUrl(url, additionalHttpHeaders); + if (botWebViewContainer != null) { + botWebViewContainer.onURLChanged(dangerousUrl ? urlFallback : url, !canGoBack(), !canGoForward()); + } + } + + public void loadUrl(String url, WebMetadataCache.WebMetadata meta) { + final String ourl = url; + applyCachedMeta(meta); + openedByUrl = url; + url = tonsite2magic(url); + currentUrl = url; + d("loadUrl " + url + " with cached meta"); + super.loadUrl(url); + if (botWebViewContainer != null) { + botWebViewContainer.onURLChanged(dangerousUrl ? urlFallback : url, !canGoBack(), !canGoForward()); + } + } + + public void checkCachedMetaProperties(String url) { + if (bot) return; + String domain = AndroidUtilities.getHostAuthority(url, true); + WebMetadataCache.WebMetadata meta = WebMetadataCache.getInstance().get(domain); + applyCachedMeta(meta); + } + + public boolean applyCachedMeta(WebMetadataCache.WebMetadata meta) { + if (meta == null) return false; + boolean foundTitle = false; + int backgroundColor = 0xFFFFFFFF; + if (botWebViewContainer != null && botWebViewContainer.delegate != null) { + if (meta.actionBarColor != 0) { + botWebViewContainer.delegate.onWebAppBackgroundChanged(true, meta.actionBarColor); + lastActionBarColorGot = true; + } + if (meta.backgroundColor != 0) { + backgroundColor = meta.backgroundColor; + botWebViewContainer.delegate.onWebAppBackgroundChanged(false, meta.backgroundColor); + lastBackgroundColorGot = true; + } + if (meta.favicon != null) { + botWebViewContainer.onFaviconChanged(lastFavicon = meta.favicon); + lastFaviconGot = true; + } + if (!TextUtils.isEmpty(meta.sitename)) { + foundTitle = true; + lastSiteName = meta.sitename; + botWebViewContainer.onTitleChanged(lastTitle = meta.sitename); + } + if (SharedConfig.adaptableColorInBrowser) { + setBackgroundColor(backgroundColor); + } + } + if (!foundTitle) { + setTitle(null); + if (botWebViewContainer != null) { + botWebViewContainer.onTitleChanged(null); + } + } + return true; } @Override public void reload() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + CookieManager.getInstance().flush(); + } d("reload"); super.reload(); } @Override public void loadData(@NonNull String data, @Nullable String mimeType, @Nullable String encoding) { + openedByUrl = null; d("loadData " + data + " " + mimeType + " " + encoding); super.loadData(data, mimeType, encoding); } @Override public void loadDataWithBaseURL(@Nullable String baseUrl, @NonNull String data, @Nullable String mimeType, @Nullable String encoding, @Nullable String historyUrl) { + openedByUrl = null; d("loadDataWithBaseURL " + baseUrl + " " + data + " " + mimeType + " " + encoding + " " + historyUrl); super.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, historyUrl); } @@ -2416,10 +3798,111 @@ public void resumeTimers() { d("resumeTimers"); super.resumeTimers(); } + + @Override + public boolean canGoBack() { + return currentWarning != null || super.canGoBack(); + } + + @Override + public void goBack() { + d("goBack"); + if (currentWarning != null) { + currentWarning.back.run(); + return; + } + super.goBack(); + } + + @Override + public void goForward() { + d("goForward"); + super.goForward(); + } + + @Override + public void clearHistory() { + d("clearHistory"); + super.clearHistory(); + } + + @Override + public void setFocusable(int focusable) { + d("setFocusable " + focusable); + super.setFocusable(focusable); + } + + @Override + public void setFocusable(boolean focusable) { + d("setFocusable " + focusable); + super.setFocusable(focusable); + } + + @Override + public void setFocusableInTouchMode(boolean focusableInTouchMode) { + d("setFocusableInTouchMode " + focusableInTouchMode); + super.setFocusableInTouchMode(focusableInTouchMode); + } + + @Override + public void setFocusedByDefault(boolean isFocusedByDefault) { + d("setFocusedByDefault " + isFocusedByDefault); + super.setFocusedByDefault(isFocusedByDefault); + } + + @Override + protected boolean drawChild(Canvas canvas, View child, long drawingTime) { + return super.drawChild(canvas, child, drawingTime); + } + + @Override + protected void dispatchDraw(Canvas canvas) { + super.dispatchDraw(canvas); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + } + + @Override + public void draw(Canvas canvas) { + super.draw(canvas); + } } private final int tag = tags++; public void d(String s) { FileLog.d("[webviewcontainer] #" + tag + " " + s); } + + private static HashMap<String, String> rotatedTONHosts; + + private static String tonsite2magic(String url) { + if (url == null) return url; + final Uri uri = Uri.parse(url); + if (isTonsite(uri)) { + String tonsite_host = AndroidUtilities.getHostAuthority(url); + try { + tonsite_host = IDN.toASCII(tonsite_host, IDN.ALLOW_UNASSIGNED); + } catch (Exception e) {} + String magic_host = rotateTONHost(tonsite_host); + if (rotatedTONHosts == null) rotatedTONHosts = new HashMap<>(); + rotatedTONHosts.put(magic_host, tonsite_host); + url = Browser.replaceHostname(Uri.parse(url), magic_host, "https"); + } + return url; + } + + public static String magic2tonsite(String url) { + if (rotatedTONHosts == null) return url; + if (url == null) return url; + String host = AndroidUtilities.getHostAuthority(url); + if (host == null || !host.endsWith("." + MessagesController.getInstance(UserConfig.selectedAccount).tonProxyAddress)) { + return url; + } + String tonsite_host = rotatedTONHosts.get(host); + if (tonsite_host == null) return url; + return Browser.replace(Uri.parse(url), "tonsite", tonsite_host, null); + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/BrowserHistory.java b/TMessagesProj/src/main/java/org/telegram/ui/web/BrowserHistory.java new file mode 100644 index 00000000000..8b2a3ba4148 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/BrowserHistory.java @@ -0,0 +1,181 @@ +package org.telegram.ui.web; + +import android.util.LongSparseArray; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.FileLoader; +import org.telegram.messenger.FileLog; +import org.telegram.messenger.Utilities; +import org.telegram.tgnet.AbstractSerializedData; +import org.telegram.tgnet.SerializedData; +import org.telegram.tgnet.TLObject; + +import java.io.File; +import java.io.FileOutputStream; +import java.util.ArrayList; + +public class BrowserHistory { + + public static class Entry extends TLObject { + public long id; + public long time; + public String url; + public WebMetadataCache.WebMetadata meta; + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt64(id); + stream.writeInt64(time); + stream.writeString(url == null ? "" : url); + meta.serializeToStream(stream); + } + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + id = stream.readInt64(exception); + time = stream.readInt64(exception); + url = stream.readString(exception); + meta = new WebMetadataCache.WebMetadata(); + meta.readParams(stream, exception); + } + } + + public static boolean historyLoading, historyLoaded; + private static ArrayList<BrowserHistory.Entry> history; + private static LongSparseArray<BrowserHistory.Entry> historyById; + private static ArrayList<Utilities.Callback<ArrayList<BrowserHistory.Entry>>> callbacks; + + public static File getHistoryFile() { + return new File(FileLoader.getDirectory(FileLoader.MEDIA_DIR_CACHE), "webhistory.dat"); + } + + public static void preloadHistory() { + if (historyLoading || historyLoaded) { + return; + } + historyLoading = true; + history = new ArrayList<>(); + historyById = new LongSparseArray<>(); + Utilities.globalQueue.postRunnable(() -> { + final ArrayList<Entry> history = new ArrayList<>(); + final LongSparseArray<Entry> historyById = new LongSparseArray<>(); + + try { + final File file = getHistoryFile(); + if (file.exists()) { + final SerializedData stream = new SerializedData(file); + final long count = stream.readInt64(true); + for (long i = 0; i < count; ++i) { + final BrowserHistory.Entry entry = new BrowserHistory.Entry(); + entry.readParams(stream, true); + history.add(entry); + historyById.put(entry.id, entry); + } + } + } catch (Exception e) { + FileLog.e(e); + } + + AndroidUtilities.runOnUIThread(() -> { + BrowserHistory.history.addAll(0, history); + for (int i = 0; i < historyById.size(); ++i) { + BrowserHistory.historyById.put(historyById.keyAt(i), historyById.valueAt(i)); + } + historyLoaded = true; + historyLoading = false; + if (callbacks != null) { + for (Utilities.Callback<ArrayList<BrowserHistory.Entry>> callback : callbacks) { + callback.run(history); + } + callbacks = null; + } + }); + }); + } + + public static ArrayList<BrowserHistory.Entry> getHistory() { + return getHistory(null); + } + + public static ArrayList<BrowserHistory.Entry> getHistory(Utilities.Callback<ArrayList<BrowserHistory.Entry>> loaded) { + boolean addedCallback = false; + if (loaded != null && !historyLoaded) { + if (callbacks == null) { + callbacks = new ArrayList<>(); + } + callbacks.add(loaded); + addedCallback = true; + } + preloadHistory(); + if (addedCallback) { + return null; + } + return history; + } + + public static void pushHistory(BrowserHistory.Entry entry) { + if (entry == null || entry.meta == null) return; + preloadHistory(); + BrowserHistory.Entry existingEntry = historyById.get(entry.id); + if (existingEntry != null) { + existingEntry.meta = entry.meta; + } else { + history.add(entry); + historyById.put(entry.id, entry); + } + scheduleHistorySave(); + } + + private static void scheduleHistorySave() { + AndroidUtilities.cancelRunOnUIThread(BrowserHistory::saveHistory); + AndroidUtilities.runOnUIThread(BrowserHistory::saveHistory, 1_000); + } + + private static void saveHistory() { + Utilities.globalQueue.postRunnable(() -> { + try { + final File file = getHistoryFile(); + if (!file.exists()) { + file.createNewFile(); + } + + final long count = history.size(); + SerializedData astream = new SerializedData(true); + astream.writeInt64(count); + for (BrowserHistory.Entry e : history) { + e.serializeToStream(astream); + } + + final SerializedData stream = new SerializedData(astream.length()); + stream.writeInt64(count); + for (BrowserHistory.Entry e : history) { + e.serializeToStream(stream); + } + + try { + FileOutputStream os = new FileOutputStream(file); + os.write(stream.toByteArray()); + os.close(); + } catch (Exception e) { + FileLog.e(e); + } + } catch (Exception e) { + FileLog.e(e); + } + }); + } + + public static void clearHistory() { + try { + history.clear(); + historyById.clear(); + final File file = getHistoryFile(); + if (file.exists()) { + file.delete(); + } + } catch (Exception e) { + FileLog.e(e); + } + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/HistoryFragment.java b/TMessagesProj/src/main/java/org/telegram/ui/web/HistoryFragment.java new file mode 100644 index 00000000000..4002200d34d --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/HistoryFragment.java @@ -0,0 +1,360 @@ +package org.telegram.ui.web; + +import static org.telegram.messenger.LocaleController.formatPluralString; +import static org.telegram.messenger.LocaleController.getString; +import static org.telegram.ui.web.AddressBarList.getLink; + +import android.content.Context; +import android.text.TextUtils; +import android.util.LongSparseArray; +import android.view.View; +import android.widget.EditText; +import android.widget.FrameLayout; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.google.android.exoplayer2.util.Util; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.FileLoader; +import org.telegram.messenger.FileLog; +import org.telegram.messenger.LocaleController; +import org.telegram.messenger.MessageObject; +import org.telegram.messenger.MessagesController; +import org.telegram.messenger.R; +import org.telegram.messenger.UserConfig; +import org.telegram.messenger.Utilities; +import org.telegram.tgnet.AbstractSerializedData; +import org.telegram.tgnet.SerializedData; +import org.telegram.tgnet.TLObject; +import org.telegram.tgnet.TLRPC; +import org.telegram.ui.ActionBar.ActionBar; +import org.telegram.ui.ActionBar.ActionBarMenu; +import org.telegram.ui.ActionBar.ActionBarMenuItem; +import org.telegram.ui.ActionBar.ActionBarMenuSubItem; +import org.telegram.ui.ActionBar.AlertDialog; +import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.ChatActivity; +import org.telegram.ui.Components.EditTextBoldCursor; +import org.telegram.ui.Components.FlickerLoadingView; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.NumberTextView; +import org.telegram.ui.Components.StickerEmptyView; +import org.telegram.ui.Components.UItem; +import org.telegram.ui.Components.UniversalAdapter; +import org.telegram.ui.Components.UniversalFragment; +import org.telegram.ui.LaunchActivity; + +import java.io.File; +import java.io.FileOutputStream; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.HashMap; +import java.util.HashSet; +import java.util.TimeZone; + +public class HistoryFragment extends UniversalFragment { + + private final Runnable closeToTabs; + private final Utilities.Callback<BrowserHistory.Entry> whenClicked; + + private ArrayList<BrowserHistory.Entry> history = BrowserHistory.getHistory(loadedHistory -> { + history = loadedHistory; + if (listView.isAttachedToWindow()) { + listView.adapter.update(true); + } + }); + private final ArrayList<BrowserHistory.Entry> searchResults = new ArrayList<>(); + private boolean searchLoading; + + private String query; + + private NumberTextView selectedCount; + public HashSet<Integer> selected = new HashSet<>(); + + private ActionBarMenuItem searchItem; + private StickerEmptyView emptyView; + + public boolean isSelected(MessageObject msg) { + return msg != null && selected.contains(msg.getId()); + } + + public void setSelected(MessageObject msg, boolean select) { + if (msg == null) return; + if (select) { + selected.add(msg.getId()); + } else { + selected.remove(msg.getId()); + } + } + + public HistoryFragment(Runnable closeToTabs, Utilities.Callback<BrowserHistory.Entry> whenClicked) { + super(); + this.closeToTabs = closeToTabs; + this.whenClicked = whenClicked; + } + + @Override + public View createView(Context context) { + fragmentView = super.createView(context); + + actionBar.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); + actionBar.setActionModeColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + actionBar.setBackButtonImage(R.drawable.ic_ab_back); + actionBar.setTitleColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); + actionBar.setItemsBackgroundColor(getThemedColor(Theme.key_actionBarActionModeDefaultSelector), false); + actionBar.setItemsColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText), false); + actionBar.setItemsColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText), true); + actionBar.setCastShadows(true); + actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { + @Override + public void onItemClick(int id) { + if (id == -1) { + if (actionBar.isActionModeShowed()) { + actionBar.hideActionMode(); + selected.clear(); + AndroidUtilities.forEachViews(listView, child -> { + if (child instanceof AddressBarList.BookmarkView) { + ((AddressBarList.BookmarkView) child).setChecked(false); + } + }); + } else { + finishFragment(); + } + } + } + }); + + final ActionBarMenu actionMode = actionBar.createActionMode(); + + selectedCount = new NumberTextView(actionMode.getContext()); + selectedCount.setTextSize(18); + selectedCount.setTypeface(AndroidUtilities.bold()); + selectedCount.setTextColor(getThemedColor(Theme.key_actionBarActionModeDefaultIcon)); + selectedCount.setOnTouchListener((v, event) -> true); + actionMode.addView(selectedCount, LayoutHelper.createLinear(0, LayoutHelper.MATCH_PARENT, 1.0f, 65, 0, 0, 0)); + + searchItem = actionBar.createMenu().addItem(0, R.drawable.ic_ab_search, getResourceProvider()).setIsSearchField(true).setActionBarMenuItemSearchListener(new ActionBarMenuItem.ActionBarMenuItemSearchListener() { + @Override + public void onSearchExpand() {} + + @Override + public void onSearchCollapse() { + query = null; + searchLoading = false; + AndroidUtilities.cancelRunOnUIThread(applySearch); + + if (listView != null) { + listView.adapter.update(true); + listView.layoutManager.scrollToPositionWithOffset(0, 0); + } + + emptyView.title.setText(getString(TextUtils.isEmpty(query) ? R.string.WebNoHistory : R.string.WebNoSearchedHistory)); + } + + @Override + public void onTextChanged(EditText editText) { + final boolean hadQuery = !TextUtils.isEmpty(query); + final String query = editText.getText().toString(); + if (!TextUtils.equals(HistoryFragment.this.query, query)) { + HistoryFragment.this.query = query; + scheduleSearch(); + emptyView.title.setText(getString(TextUtils.isEmpty(query) ? R.string.WebNoHistory : R.string.WebNoSearchedHistory)); + } + if (listView != null) { + listView.adapter.update(true); + if (hadQuery != !TextUtils.isEmpty(query)) { + listView.layoutManager.scrollToPositionWithOffset(0, 0); + } + } + } + + private void scheduleSearch() { + searchLoading = true; + AndroidUtilities.cancelRunOnUIThread(applySearch); + AndroidUtilities.runOnUIThread(applySearch, 500); + } + + private Runnable applySearch = () -> { + final ArrayList<BrowserHistory.Entry> history = new ArrayList<>(HistoryFragment.this.history); + final String query = HistoryFragment.this.query; + Utilities.searchQueue.postRunnable(() -> { + final ArrayList<BrowserHistory.Entry> entries = new ArrayList<>(); + + for (int i = 0; i < history.size(); ++i) { + BrowserHistory.Entry e = history.get(i); + if (matches(e.url, query) || e.meta != null && (matches(e.meta.title, query) || matches(e.meta.sitename, query))) { + entries.add(e); + } + } + + AndroidUtilities.runOnUIThread(() -> { + searchResults.clear(); + searchResults.addAll(entries); + searchLoading = false; + + if (listView != null) { + listView.adapter.update(true); + } + }); + }); + }; + + public boolean matches(String src, String q) { + if (src == null || q == null) return false; + final String lsrc = src.toLowerCase(); + final String lq = q.toLowerCase(); + if (lsrc.startsWith(lq) || lsrc.contains(" " + lq) || lsrc.contains("." + lq)) return true; + final String tsrc = AndroidUtilities.translitSafe(lsrc); + final String tq = AndroidUtilities.translitSafe(lq); + return (tsrc.startsWith(tq) || tsrc.contains(" " + tq) || tsrc.contains("." + tq)); + } + }); + searchItem.setSearchFieldHint(getString(R.string.Search)); + searchItem.setContentDescription(getString(R.string.Search)); + EditTextBoldCursor editText = searchItem.getSearchField(); + editText.setTextColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); + editText.setHintTextColor(getThemedColor(Theme.key_player_time)); + editText.setCursorColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); + + emptyView = new StickerEmptyView(context, null, StickerEmptyView.STICKER_TYPE_SEARCH); + emptyView.title.setText(getString(TextUtils.isEmpty(query) ? R.string.WebNoHistory : R.string.WebNoSearchedHistory)); + emptyView.subtitle.setVisibility(View.GONE); + emptyView.showProgress(false, false); + emptyView.setAnimateLayoutChange(true); + ((FrameLayout) fragmentView).addView(emptyView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + listView.setEmptyView(emptyView); + + listView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + if (listView.scrollingByUser) { + AndroidUtilities.hideKeyboard(fragmentView); + } + } + }); + + return fragmentView; + } + + @Override + protected CharSequence getTitle() { + return getString(R.string.WebHistory); + } + + + @Override + protected void fillItems(ArrayList<UItem> items, UniversalAdapter adapter) { + + int lastDateKey = 0; + Calendar calendar = Calendar.getInstance(); + calendar.setTimeZone(TimeZone.getDefault()); + if (TextUtils.isEmpty(query)) { + if (history != null) { + for (int i = history.size() - 1; i >= 0; --i) { + BrowserHistory.Entry entry = history.get(i); + calendar.setTimeInMillis(entry.time); + int dateKey = calendar.get(Calendar.YEAR) * 1_00_00 + calendar.get(Calendar.MONTH) * 1_00 + calendar.get(Calendar.DAY_OF_MONTH); + if (lastDateKey != dateKey) { + lastDateKey = dateKey; + items.add(UItem.asGraySection(LocaleController.formatDateChat(entry.time / 1000L))); + } + items.add(AddressBarList.BookmarkView.Factory.as(entry, query)); + } + } + } else { + for (int i = searchResults.size() - 1; i >= 0; --i) { + BrowserHistory.Entry entry = searchResults.get(i); + calendar.setTimeInMillis(entry.time); + int dateKey = calendar.get(Calendar.YEAR) * 1_00_00 + calendar.get(Calendar.MONTH) * 1_00 + calendar.get(Calendar.DAY_OF_MONTH); + if (lastDateKey != dateKey) { + lastDateKey = dateKey; + items.add(UItem.asGraySection(LocaleController.formatDateChat(entry.time / 1000L))); + } + items.add(AddressBarList.BookmarkView.Factory.as(entry, query)); + } + if (searchLoading) { + items.add(UItem.asFlicker(FlickerLoadingView.BROWSER_BOOKMARK)); + items.add(UItem.asFlicker(FlickerLoadingView.BROWSER_BOOKMARK)); + items.add(UItem.asFlicker(FlickerLoadingView.BROWSER_BOOKMARK)); + } + } + if (!items.isEmpty()) { + items.add(UItem.asShadow(null)); + } + } + + public static boolean matches(String src, String q) { + if (src == null || q == null) return false; + final String lsrc = src.toLowerCase(); + final String lq = q.toLowerCase(); + if (lsrc.startsWith(lq) || lsrc.contains(" " + lq) || lsrc.contains("." + lq)) return true; + final String tsrc = AndroidUtilities.translitSafe(lsrc); + final String tq = AndroidUtilities.translitSafe(lq); + return (tsrc.startsWith(tq) || tsrc.contains(" " + tq) || tsrc.contains("." + tq)); + } + + @Override + protected void onClick(UItem item, View view, int position, float x, float y) { + if (item.instanceOf(AddressBarList.BookmarkView.Factory.class)) { + if (actionBar.isActionModeShowed()) { + clickSelect(item, view); + } else { + finishFragment(); + whenClicked.run((BrowserHistory.Entry) item.object2); + } + } + } + + public void clickSelect(UItem item, View view) { +// AddressBarList.BookmarkView cell = (AddressBarList.BookmarkView) view; +// MessageObject msg = (MessageObject) item.object2; +// if (isSelected(msg)) { +// setSelected(msg, false); +// cell.setChecked(false); +// } else { +// setSelected(msg, true); +// cell.setChecked(true); +// } +// selectedCount.setNumber(selected.size(), true); +// if (selected.isEmpty()) { +// actionBar.hideActionMode(); +// } else { +// actionBar.showActionMode(); +// } + } + + @Override + protected boolean onLongClick(UItem item, View view, int position, float x, float y) { +// if (item.instanceOf(AddressBarList.BookmarkView.Factory.class)) { +// clickSelect(item, view); +// return true; +// } + return false; + } + + @Override + public boolean isLightStatusBar() { + return AndroidUtilities.computePerceivedBrightness(getThemedColor(Theme.key_windowBackgroundWhite)) > .721f; + } + + private void updateWithOffset() { + int position = -1, offset = 0; + for (int i = 0; i < listView.getChildCount(); ++i) { + View child = listView.getChildAt(i); + position = listView.getChildAdapterPosition(child); + if (position < 0) continue; + offset = child.getTop(); + break; + } + listView.adapter.update(true); + if (position >= 0) { + listView.layoutManager.scrollToPositionWithOffset(position, offset); + } else { + listView.layoutManager.scrollToPositionWithOffset(0, 0); + } + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/HttpGetFileTask.java b/TMessagesProj/src/main/java/org/telegram/ui/web/HttpGetFileTask.java new file mode 100644 index 00000000000..36dcae69a9f --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/HttpGetFileTask.java @@ -0,0 +1,83 @@ +package org.telegram.ui.web; + + +import android.content.ContentResolver; +import android.os.AsyncTask; +import android.webkit.MimeTypeMap; +import android.webkit.URLUtil; + +import com.google.android.exoplayer2.util.MimeTypes; + +import org.telegram.messenger.UserConfig; +import org.telegram.messenger.Utilities; +import org.telegram.ui.Stories.recorder.StoryEntry; + +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; + +public class HttpGetFileTask extends AsyncTask<String, Void, File> { + + private Utilities.Callback<File> callback; + private Exception exception; + + public HttpGetFileTask(Utilities.Callback<File> callback) { + this.callback = callback; + } + + @Override + protected File doInBackground(String... params) { + String urlString = params[0]; + + try { + URL url = new URL(urlString); + HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); + urlConnection.setRequestMethod("GET"); + urlConnection.setDoInput(true); + + int statusCode = urlConnection.getResponseCode(); + InputStream in; + if (statusCode >= 200 && statusCode < 300) { + in = urlConnection.getInputStream(); + } else { + in = urlConnection.getErrorStream(); + } + + String ext = MimeTypeMap.getSingleton().getExtensionFromMimeType(urlConnection.getContentType()); + File file = StoryEntry.makeCacheFile(UserConfig.selectedAccount, ext); + + BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file)); + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = in.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + + outputStream.flush(); + outputStream.close(); + in.close(); + + return file; + + } catch (Exception e) { + this.exception = e; + return null; + } + } + + @Override + protected void onPostExecute(File file) { + if (callback != null) { + if (exception == null) { + callback.run(file); + } else { + callback.run(null); + } + } + } +} \ No newline at end of file diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/HttpGetTask.java b/TMessagesProj/src/main/java/org/telegram/ui/web/HttpGetTask.java new file mode 100644 index 00000000000..dfe5154c5d4 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/HttpGetTask.java @@ -0,0 +1,77 @@ +package org.telegram.ui.web; + + +import android.os.AsyncTask; + +import org.telegram.messenger.Utilities; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; + +public class HttpGetTask extends AsyncTask<String, Void, String> { + + private final HashMap<String, String> headers = new HashMap<>(); + private final Utilities.Callback<String> callback; + private Exception exception; + + public HttpGetTask(Utilities.Callback<String> callback) { + this.callback = callback; + } + + public HttpGetTask setHeader(String key, String value) { + headers.put(key, value); + return this; + } + + @Override + protected String doInBackground(String... params) { + String urlString = params[0]; + + try { + URL url = new URL(urlString); + HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); + for (Map.Entry<String, String> e : headers.entrySet()) { + if (e.getKey() == null || e.getValue() == null) continue; + urlConnection.setRequestProperty(e.getKey(), e.getValue()); + } + urlConnection.setRequestMethod("GET"); + urlConnection.setDoInput(true); + + int statusCode = urlConnection.getResponseCode(); + BufferedReader in; + if (statusCode >= 200 && statusCode < 300) { + in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); + } else { + in = new BufferedReader(new InputStreamReader(urlConnection.getErrorStream())); + } + + StringBuilder response = new StringBuilder(); + String line; + while ((line = in.readLine()) != null) { + response.append(line); + } + in.close(); + + return response.toString(); + + } catch (Exception e) { + this.exception = e; + return null; + } + } + + @Override + protected void onPostExecute(String result) { + if (callback != null) { + if (exception == null) { + callback.run(result); + } else { + callback.run(null); + } + } + } +} \ No newline at end of file diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/HttpPostTask.java b/TMessagesProj/src/main/java/org/telegram/ui/web/HttpPostTask.java new file mode 100644 index 00000000000..e01ec11b78f --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/HttpPostTask.java @@ -0,0 +1,92 @@ +package org.telegram.ui.web; + + +import android.os.AsyncTask; + +import org.telegram.messenger.Utilities; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; + +public class HttpPostTask extends AsyncTask<String, Void, String> { + + private final String dataMime; + private final String data; + private final Utilities.Callback<String> callback; + private final HashMap<String, String> headers = new HashMap<>(); + + private Exception exception; + + public HttpPostTask( + String mime, String data, + Utilities.Callback<String> callback + ) { + this.dataMime = mime; + this.data = data; + this.callback = callback; + } + + public HttpPostTask setHeader(String key, String value) { + headers.put(key, value); + return this; + } + + @Override + protected String doInBackground(String... params) { + String urlString = params[0]; + + try { + URL url = new URL(urlString); + HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); + urlConnection.setRequestMethod("POST"); + for (Map.Entry<String, String> e : headers.entrySet()) { + if (e.getKey() == null || e.getValue() == null) continue; + urlConnection.setRequestProperty(e.getKey(), e.getValue()); + } + urlConnection.setDoOutput(true); + + urlConnection.setRequestProperty("Content-Type", dataMime); + try (OutputStream os = urlConnection.getOutputStream()) { + byte[] input = data.getBytes("utf-8"); + os.write(input, 0, input.length); + } + + int statusCode = urlConnection.getResponseCode(); + BufferedReader in; + if (statusCode >= 200 && statusCode < 300) { + in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); + } else { + in = new BufferedReader(new InputStreamReader(urlConnection.getErrorStream())); + } + + StringBuilder response = new StringBuilder(); + String line; + while ((line = in.readLine()) != null) { + response.append(line); + } + in.close(); + + return response.toString(); + + } catch (Exception e) { + this.exception = e; + return null; + } + } + + @Override + protected void onPostExecute(String result) { + if (callback != null) { + if (exception == null) { + callback.run(result); + } else { + callback.run(null); + } + } + } +} \ No newline at end of file diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/RestrictedDomainsList.java b/TMessagesProj/src/main/java/org/telegram/ui/web/RestrictedDomainsList.java new file mode 100644 index 00000000000..19733471bf2 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/RestrictedDomainsList.java @@ -0,0 +1,154 @@ +package org.telegram.ui.web; + +import android.content.SharedPreferences; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.FileLog; +import org.telegram.messenger.MessagesController; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; + +public class RestrictedDomainsList { + + private static RestrictedDomainsList instance; + public static RestrictedDomainsList getInstance() { + if (instance == null) { + instance = new RestrictedDomainsList(); + } + return instance; + } + + public final HashMap<String, Integer> openedDomains = new HashMap<>(); + public final HashSet<String> restrictedDomainsSet = new HashSet<>(); + public final ArrayList<ArrayList<String>> restrictedDomains = new ArrayList<>(); + + private boolean loaded; + public void load() { + if (loaded) { + return; + } + SharedPreferences prefs = MessagesController.getGlobalMainSettings(); + try { + JSONObject o = new JSONObject(prefs.getString("web_opened_domains", "{}")); + Iterator<String> i = o.keys(); + while (i.hasNext()) { + String key = i.next(); + openedDomains.put(key, o.getInt(key)); + } + } catch (Exception e) { + FileLog.e(e); + } + try { + JSONArray o = new JSONArray(prefs.getString("web_restricted_domains2", "[]")); + for (int i = 0; i < o.length(); ++i) { + final JSONArray array = o.getJSONArray(i); + final ArrayList<String> domains = new ArrayList<>(); + for (int j = 0; j < array.length(); ++j) { + final String domain = array.getString(j); + restrictedDomainsSet.add(domain); + domains.add(domain); + } + restrictedDomains.add(domains); + } + } catch (Exception e) { + FileLog.e(e); + } + loaded = true; + } + + public int incrementOpen(String domain) { + load(); + Integer count = openedDomains.get(domain); + if (count == null) count = 0; + count++; + openedDomains.put(domain, count); + scheduleSave(); + return count; + } + + public boolean isRestricted(String ...domains) { + load(); + for (String domain : domains) { + if (restrictedDomainsSet.contains(domain)) + return true; + } + return false; + } + + public boolean isRestricted(String domain) { + load(); + return restrictedDomainsSet.contains(domain); + } + + public void setRestricted(boolean restricted, String ...domains) { + load(); + int index = -1; + for (int i = 0; i < restrictedDomains.size(); ++i) { + for (int j = 0; j < domains.length; ++j) { + if (domains[j] != null && restrictedDomains.get(i).contains(domains[j])) { + index = i; + break; + } + } + if (index >= 0) break; + } + final boolean wasRestricted = isRestricted(domains); + if (restricted != wasRestricted) { + if (restricted) { + final ArrayList<String> newList = new ArrayList<>(); + for (int j = 0; j < domains.length; ++j) { + if (domains[j] != null) { + newList.add(domains[j]); + } + } + restrictedDomainsSet.addAll(newList); + restrictedDomains.add(newList); + } else { + restrictedDomainsSet.removeAll( + restrictedDomains.remove(index) + ); + } + scheduleSave(); + } + } + + public void scheduleSave() { + AndroidUtilities.cancelRunOnUIThread(this::save); + AndroidUtilities.runOnUIThread(this::save, 1_000); + } + + public void save() { + SharedPreferences prefs = MessagesController.getGlobalMainSettings(); + SharedPreferences.Editor edit = prefs.edit(); + try { + JSONObject o = new JSONObject(); + for (Map.Entry<String, Integer> e : openedDomains.entrySet()) { + o.put(e.getKey(), e.getValue()); + } + edit.putString("web_opened_domains", o.toString()); + } catch (Exception e) { + FileLog.e(e); + } + try { + JSONArray o = new JSONArray(); + for (ArrayList<String> domains : restrictedDomains) { + JSONArray array = new JSONArray(); + for (String domain : domains) { + array.put(domain); + } + o.put(array); + } + edit.putString("web_restricted_domains2", o.toString()); + } catch (Exception e) { + FileLog.e(e); + } + edit.apply(); + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/SearchEngine.java b/TMessagesProj/src/main/java/org/telegram/ui/web/SearchEngine.java new file mode 100644 index 00000000000..39315e484ae --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/SearchEngine.java @@ -0,0 +1,124 @@ +package org.telegram.ui.web; + +import static org.telegram.messenger.LocaleController.getString; + +import android.text.TextUtils; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.telegram.messenger.FileLog; +import org.telegram.messenger.SharedConfig; +import org.telegram.messenger.Utilities; + +import java.net.URLEncoder; +import java.util.ArrayList; + +/* + * You can add your own search engines of preference with extending custom langpack with such keys: + * - SearchEngine6Name — name of your search engine + * - SearchEngine6SearchURL — url of search, query would be put at the end of the url + * - SearchEngine6AutocompleteURL — url of autocomplete, query would be put at the end of the url + * - SearchEngine6PrivacyPolicyURL — privacy policy url to show in a dialog + * */ +public class SearchEngine { + + @NonNull + public final String name; + @Nullable + public final String search_url; + @Nullable + public final String autocomplete_url; + @Nullable + public final String privacy_policy_url; + + public SearchEngine( + @NonNull String name, + @Nullable String search_url, + @Nullable String autocomplete_url, + @Nullable String privacy_policy_url + ) { + this.name = name; + this.search_url = search_url; + this.autocomplete_url = autocomplete_url; + this.privacy_policy_url = privacy_policy_url; + } + + public String getSearchURL(String query) { + if (search_url == null) return null; + return search_url + URLEncoder.encode(query); + } + + public String getAutocompleteURL(String query) { + if (autocomplete_url == null) return null; + return autocomplete_url + URLEncoder.encode(query); + } + + public String getPrivacyPolicyURL() { + return privacy_policy_url; + } + + public ArrayList<String> extractSuggestions(String json) { + final ArrayList<String> array = new ArrayList<>(); + try { + JSONArray arr = new JSONArray(json); + JSONArray suggs = arr.getJSONArray(1); + for (int i = 0; i < suggs.length(); ++i) { + array.add(suggs.getString(i)); + } + } catch (Exception e) { + FileLog.e(e, false); + try { + JSONObject obj = new JSONObject(json); + JSONArray arr = obj.getJSONObject("gossip").getJSONArray("results"); + for (int i = 0; i < arr.length(); ++i) { + array.add(arr.getJSONObject(i).getString("key")); + } + } catch (Exception e2) { + FileLog.e(e2, false); + try { + JSONArray arr = new JSONArray(json); + for (int i = 0; i < arr.length(); ++i) { + String phrase = arr.getJSONObject(i).getString("phrase"); + if (!TextUtils.isEmpty(phrase)) { + array.add(phrase); + } + } + } catch (Exception e3) { + FileLog.e(e3, false); + } + } + } + return array; + } + + private static ArrayList<SearchEngine> searchEngines; + public static ArrayList<SearchEngine> getSearchEngines() { + if (searchEngines == null) { + searchEngines = new ArrayList<>(); + for (int i = 1; true; ++i) { + final String name = nullable(getString("SearchEngine" + i + "Name")); + if (name == null) break; + final String search_url = nullable(getString("SearchEngine" + i + "SearchURL")); + final String autocomplete_url = nullable(getString("SearchEngine" + i + "AutocompleteURL")); + final String privacy_policy_url = nullable(getString("SearchEngine" + i + "PrivacyPolicyURL")); + searchEngines.add(new SearchEngine(name, search_url, autocomplete_url, privacy_policy_url)); + } + } + return searchEngines; + } + + private static String nullable(String s) { + if (s == null || s.startsWith("LOC_ERR") || "reserved".equals(s)) return null; + return s; + } + + public static SearchEngine getCurrent() { + final ArrayList<SearchEngine> searchEngines = getSearchEngines(); + final int index = Utilities.clamp(SharedConfig.searchEngineType, searchEngines.size() - 1, 0); + return searchEngines.get(index); + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/WebActionBar.java b/TMessagesProj/src/main/java/org/telegram/ui/web/WebActionBar.java new file mode 100644 index 00000000000..437ebdd56cd --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/WebActionBar.java @@ -0,0 +1,1067 @@ +package org.telegram.ui.web; + +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.AndroidUtilities.lerp; +import static org.telegram.messenger.LocaleController.formatString; +import static org.telegram.messenger.LocaleController.getString; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PixelFormat; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; +import android.graphics.RectF; +import android.graphics.drawable.Drawable; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.HapticFeedbackConstants; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.ViewConfiguration; +import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.graphics.ColorUtils; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.Emoji; +import org.telegram.messenger.LocaleController; +import org.telegram.messenger.R; +import org.telegram.messenger.SharedConfig; +import org.telegram.messenger.Utilities; +import org.telegram.ui.ActionBar.BackDrawable; +import org.telegram.ui.ActionBar.OKLCH; +import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.ArticleViewer; +import org.telegram.ui.Components.AnimatedFloat; +import org.telegram.ui.Components.AnimatedTextView; +import org.telegram.ui.Components.CubicBezierInterpolator; +import org.telegram.ui.Components.EditTextBoldCursor; +import org.telegram.ui.Components.ItemOptions; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.LineProgressView; +import org.telegram.ui.GradientClip; + +public class WebActionBar extends FrameLayout { + + private final Theme.ResourcesProvider resourcesProvider; + + public final RectF rect = new RectF(); + + public final Title[] titles = new Title[2]; + public float titleProgress = 0f; + public final float[] progress = new float[2]; + + public boolean[] colorSet = new boolean[3]; + public final Paint[] backgroundPaint = new Paint[2]; + public final Paint[] progressBackgroundPaint = new Paint[2]; + public final Paint[] shadowPaint = new Paint[2]; + public final Paint scrimPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + public final Paint addressBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + public final Paint addressRoundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + public int textColor, iconColor; + public int addressBackgroundColor, addressTextColor; + + public int height = dp(56); + public float scale = 1f; + + public final LinearLayout leftmenu; + public final LinearLayout rightmenu; + + public final ImageView clearButton; + public final Drawable clearButtonSelector; + + public final ImageView backButton; + public final BackDrawable backButtonDrawable; + public final Drawable backButtonSelector; + + public final ImageView forwardButton; + public final ForwardDrawable forwardButtonDrawable; + public final Drawable forwardButtonSelector; + + public final ImageView menuButton; + public final Drawable menuButtonSelector; + + public boolean searching; + public float searchingProgress = 0f; + public final FrameLayout searchContainer; + public final EditTextBoldCursor searchEditText; + + public boolean addressing; + public float addressingProgress = 0f; + public final FrameLayout addressContainer; + public final EditTextBoldCursor addressEditText; + private int searchEngineIndex; + + public final LineProgressView lineProgressView; + + public static final int search_item = 1; + public static final int share_item = 2; + public static final int open_item = 3; + public static final int settings_item = 4; + public static final int reload_item = 5; + public static final int bookmark_item = 6; + public static final int bookmarks_item = 7; + public static final int history_item = 8; + public static final int forward_item = 9; + + public WebActionBar(Context context, Theme.ResourcesProvider resourcesProvider) { + super(context); + this.resourcesProvider = resourcesProvider; + + for (int i = 0; i < 2; ++i) { + backgroundPaint[i] = new Paint(Paint.ANTI_ALIAS_FLAG); + progressBackgroundPaint[i] = new Paint(Paint.ANTI_ALIAS_FLAG); + shadowPaint[i] = new Paint(Paint.ANTI_ALIAS_FLAG); + } + + searchContainer = new FrameLayout(context); + addView(searchContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 56, Gravity.BOTTOM | Gravity.FILL_HORIZONTAL)); + + addressContainer = new FrameLayout(context); + addView(addressContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 56, Gravity.BOTTOM | Gravity.FILL_HORIZONTAL)); + + leftmenu = new LinearLayout(context) { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + setPivotY(ArticleViewer.BOTTOM_ACTION_BAR ? getMeasuredHeight() : 0); + setPivotX(0); + } + }; + leftmenu.setOrientation(LinearLayout.HORIZONTAL); + addView(leftmenu, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, 56, Gravity.LEFT | Gravity.BOTTOM)); + + backButton = new ImageView(context); + backButton.setScaleType(ImageView.ScaleType.CENTER); + backButtonDrawable = new BackDrawable(false); + backButtonDrawable.setAnimationTime(200.0f); + backButtonDrawable.setRotation(1.0f, false); + backButton.setImageDrawable(backButtonDrawable); + backButton.setBackground(backButtonSelector = Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); + leftmenu.addView(backButton, LayoutHelper.createLinear(54, 56)); + + rightmenu = new LinearLayout(context) { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + setPivotY(ArticleViewer.BOTTOM_ACTION_BAR ? getMeasuredHeight() : 0); + setPivotX(getMeasuredWidth()); + } + }; + rightmenu.setOrientation(LinearLayout.HORIZONTAL); + addView(rightmenu, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, 56, Gravity.RIGHT | Gravity.BOTTOM)); + + forwardButton = new ImageView(context); + forwardButton.setScaleType(ImageView.ScaleType.CENTER); + forwardButton.setImageDrawable(forwardButtonDrawable = new ForwardDrawable()); + forwardButtonDrawable.setState(false); + forwardButton.setBackground(forwardButtonSelector = Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); + rightmenu.addView(forwardButton, LayoutHelper.createLinear(54, 56)); + + menuButton = new ImageView(context); + menuButton.setScaleType(ImageView.ScaleType.CENTER); + menuButton.setImageResource(R.drawable.ic_ab_other); + menuButton.setColorFilter(new PorterDuffColorFilter(0, PorterDuff.Mode.SRC_IN)); + menuButton.setOnClickListener(v -> { + if (!(getParent() instanceof ViewGroup)) return; + Utilities.CallbackReturn<Integer, Runnable> click = id -> () -> menuListener.run(id); + ItemOptions o = ItemOptions.makeOptions((ViewGroup) getParent(), menuButton); + o.setDimAlpha(0); + o.setColors(menuTextColor, menuIconColor); + o.translate(0, -dp(52)); + o.setMinWidth(200); + o.setSelectorColor(Theme.blendOver(menuBackgroundColor, Theme.multAlpha(menuTextColor, .1f))); + if (AndroidUtilities.computePerceivedBrightness(menuBackgroundColor) > .721f) { + o.setBackgroundColor(0xFFFFFFFF); + o.setGapBackgroundColor(0xFFF0F0F0); + } else { + o.setBackgroundColor(0xFF1F1F1F); + o.setGapBackgroundColor(0xFF121212); + } + if (menuType == ArticleViewer.PageLayout.TYPE_ARTICLE) { + o.add(R.drawable.msg_openin, getString(R.string.OpenInExternalApp), click.run(open_item)); + o.add(R.drawable.msg_search, getString(R.string.Search), click.run(search_item)); + o.add(R.drawable.msg_share, getString(R.string.ShareFile), click.run(share_item)); + o.add(R.drawable.msg_settings_old, getString(R.string.Settings), click.run(settings_item)); + } else if (menuType == ArticleViewer.PageLayout.TYPE_WEB) { + if (!isTonsite) { + o.add(R.drawable.msg_openin, getString(R.string.OpenInExternalApp), click.run(open_item)); + o.addGap(); + } + if (hasForward) { + o.add(R.drawable.msg_arrow_forward, getString(R.string.WebForward), click.run(forward_item)); + } + o.add(R.drawable.msg_reset, getString(R.string.Refresh), click.run(reload_item)); + o.add(R.drawable.msg_search, getString(R.string.Search), click.run(search_item)); + o.add(R.drawable.msg_saved, getString(R.string.WebBookmark), click.run(bookmark_item)); + o.add(R.drawable.msg_share, getString(R.string.ShareFile), click.run(share_item)); + o.addGap(); + if (!BrowserHistory.getHistory().isEmpty()) { + o.add(R.drawable.menu_views_recent, getString(R.string.WebHistory), click.run(history_item)); + } + o.add(R.drawable.menu_browser_bookmarks, getString(R.string.WebBookmarks), click.run(bookmarks_item)); + o.add(R.drawable.msg_settings_old, getString(R.string.Settings), click.run(settings_item)); + } + o.show(); + }); + menuButton.setBackground(menuButtonSelector = Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); + menuButton.setContentDescription(getString("AccDescrMoreOptions", R.string.AccDescrMoreOptions)); + rightmenu.addView(menuButton, LayoutHelper.createLinear(54, 56)); + + searchEditText = new EditTextBoldCursor(context) { + @Override + public boolean onTouchEvent(MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + if (!AndroidUtilities.showKeyboard(this)) { + clearFocus(); + requestFocus(); + } + } + return super.onTouchEvent(event); + } + }; + searchEditText.setVisibility(GONE); + searchEditText.setAlpha(0f); + searchEditText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18); + searchEditText.setSingleLine(true); + searchEditText.setHint(getString(R.string.Search)); + searchEditText.setBackgroundResource(0); + searchEditText.setCursorWidth(1.5f); + searchEditText.setGravity(Gravity.FILL_VERTICAL); + searchEditText.setClipToPadding(true); + searchEditText.setPadding(dp(54 + 4), 0, dp(54 + 54 + 4), 0); + searchEditText.setTranslationY(-dp(.66f)); + searchEditText.setInputType(searchEditText.getInputType() | EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS); + searchEditText.setImeOptions(EditorInfo.IME_FLAG_NO_FULLSCREEN | EditorInfo.IME_ACTION_SEARCH); + searchEditText.setTextIsSelectable(false); + searchEditText.setOnEditorActionListener((v, actionId, event) -> { + if (event != null && (event.getAction() == KeyEvent.ACTION_UP && event.getKeyCode() == KeyEvent.KEYCODE_SEARCH || event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { + AndroidUtilities.hideKeyboard(searchEditText); + } + return false; + }); + searchEditText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) {} + @Override + public void afterTextChanged(Editable s) { + AndroidUtilities.updateViewShow(clearButton, s.length() > 0 && searching, true, true); + onSearchUpdated(s.toString()); + } + }); + searchContainer.addView(searchEditText, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL)); + + addressEditText = new EditTextBoldCursor(context) { + @Override + public boolean onTouchEvent(MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + if (!AndroidUtilities.showKeyboard(this)) { + clearFocus(); + requestFocus(); + } + } + return super.onTouchEvent(event); + } + }; + addressEditText.setVisibility(GONE); + addressEditText.setAlpha(0f); + addressEditText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15.66f); + addressEditText.setSingleLine(true); + searchEngineIndex = SharedConfig.searchEngineType; + addressEditText.setHint(LocaleController.formatString(R.string.AddressPlaceholder, SearchEngine.getCurrent().name)); + addressEditText.setBackgroundResource(0); + addressEditText.setCursorWidth(1.5f); + addressEditText.setGravity(Gravity.FILL_VERTICAL); + addressEditText.setInputType(addressEditText.getInputType() | EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS); + addressEditText.setImeOptions(EditorInfo.IME_FLAG_NO_FULLSCREEN | EditorInfo.IME_ACTION_GO); + addressEditText.setTextIsSelectable(false); + addressEditText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_GO) { + if (urlCallback != null) { + urlCallback.run(addressEditText.getText().toString()); + } + showAddress(false, true); + } + return false; + }); + addressContainer.addView(addressEditText, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.FILL, 48, 0, 12, 0)); + + clearButton = new ImageView(context); + clearButton.setScaleType(ImageView.ScaleType.CENTER); + clearButton.setImageResource(R.drawable.ic_close_white); + clearButton.setBackground(clearButtonSelector = Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); + clearButton.setVisibility(GONE); + clearButton.setAlpha(0f); + clearButton.setOnClickListener(v -> { + searchEditText.setText(""); + }); + addView(clearButton, LayoutHelper.createFrame(54, 56, Gravity.BOTTOM | Gravity.RIGHT)); + + lineProgressView = new LineProgressView(context); + lineProgressView.setPivotX(0.0f); + lineProgressView.setPivotY(ArticleViewer.BOTTOM_ACTION_BAR ? 0 : dp(2)); + addView(lineProgressView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 2, (ArticleViewer.BOTTOM_ACTION_BAR ? Gravity.TOP : Gravity.BOTTOM) | Gravity.FILL_HORIZONTAL)); + + setWillNotDraw(false); + + titles[0] = new Title(); + titles[1] = new Title(); + + setColors(Theme.getColor(Theme.key_iv_background, resourcesProvider), false); + setMenuColors(Theme.getColor(Theme.key_iv_background, resourcesProvider)); + } + + private boolean occupyStatusBar; + public void occupyStatusBar(boolean occupyStatusBar) { + this.occupyStatusBar = occupyStatusBar; + } + + protected void onOpenedMenu() {} + protected void onSearchUpdated(String s) {} + protected void onColorsUpdated() {} + protected void onScrolledProgress(float delta) {} + + public void setTitle(String title, boolean animated) { + setTitle(0, title, animated); + } + + public void setTitle(int i, String title, boolean animated) { + CharSequence prevText = titles[i].title.getText(); + if (prevText == null || !TextUtils.equals(prevText.toString(), title)) { + CharSequence cs = title; + cs = Emoji.replaceEmoji(cs, titles[i].title.getPaint().getFontMetricsInt(), false); + titles[i].title.setText(cs, animated); + } + } + + public void setSubtitle(String subtitle, boolean animated) { + setSubtitle(0, subtitle, animated); + } + public void setSubtitle(int i, String subtitle, boolean animated) { + CharSequence prevText = titles[i].subtitle.getText(); + if (prevText == null || !TextUtils.equals(prevText.toString(), subtitle)) { + CharSequence cs = subtitle; + cs = Emoji.replaceEmoji(cs, titles[i].subtitle.getPaint().getFontMetricsInt(), false); + titles[i].subtitle.setText(cs, animated); + } + } + + public void setIsDangerous(int i, boolean isDangerous, boolean animated) { + if (titles[i].isDangerous != isDangerous) { + titles[i].isDangerous = isDangerous; + if (!animated) { + titles[i].animatedDangerous.set(isDangerous ? 1f : 0f, true); + } + invalidate(); + } + } + + public String getTitle() { + final CharSequence text = titles[0].title.getText(); + if (text == null) return ""; + return text.toString(); + } + + public void swap() { + Title t = titles[0]; + titles[0] = titles[1]; + titles[1] = t; + + float p = progress[0]; + progress[0] = progress[1]; + progress[1] = p; + + int c = getBackgroundColor(0); + setBackgroundColor(0, getBackgroundColor(1)); + setBackgroundColor(1, c); + + invalidate(); + } + + private Utilities.Callback<Integer> menuListener; + public void setMenuListener(Utilities.Callback<Integer> menuListener) { + this.menuListener = menuListener; + } + + private int menuType = -1; + public void setMenuType(int type) { + if (menuType != type) { + menuType = type; + } + } + + public void setTransitionProgress(float progress) { + titleProgress = progress; + invalidate(); + } + + public void setProgress(float progress) { + setProgress(0, progress); + } + public void setProgress(int i, float progress) { + this.progress[i] = progress; + invalidate(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(topPadding() + dp(56), MeasureSpec.EXACTLY)); + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + } + + private int fromBackgroundColor, fromIconColor; + private int toBackgroundColor; + private int backgroundColor; + private int rippleColor; + private ValueAnimator colorAnimator; + + public void setBackgroundColor(int i, int backgroundColor) { + if (colorSet[i] && backgroundPaint[i].getColor() == backgroundColor) + return; + colorSet[i] = true; + backgroundPaint[i].setColor(backgroundColor); + final float dark = AndroidUtilities.computePerceivedBrightness(backgroundColor) <= .721f ? 1f : 0f; + final int iconColor = ColorUtils.blendARGB(Color.BLACK, Color.WHITE, dark); + progressBackgroundPaint[i].setColor(Theme.blendOver(backgroundColor, Theme.multAlpha(iconColor, lerp(.07f, .2f, dark)))); + shadowPaint[i].setColor(Theme.blendOver(backgroundColor, Theme.multAlpha(iconColor, lerp(.14f, .24f, dark)))); + titles[i].title.setTextColor(iconColor); + titles[i].subtitleColor = Theme.blendOver(backgroundColor, Theme.multAlpha(iconColor, .6f)); + titles[i].subtitle.setTextColor(ColorUtils.blendARGB(titles[i].subtitleColor, Theme.getColor(Theme.key_text_RedBold), titles[i].animatedDangerous.get())); + invalidate(); + } + + public int getBackgroundColor(int i) { + return backgroundPaint[i].getColor(); + } + + public int menuBackgroundColor; + public int menuTextColor; + public int menuIconColor; + public boolean hasForward; + public boolean isTonsite; + + public void setHasForward(boolean value) { + this.hasForward = value; + } + + public void setMenuColors(int backgroundColor) { + double[] lch = OKLCH.rgb2oklch(OKLCH.rgb(backgroundColor)); + final boolean isDark = lch[0] < .5f; + menuBackgroundColor = isDark ? Color.BLACK : Color.WHITE; + menuTextColor = isDark ? Color.WHITE : Color.BLACK; + menuIconColor = Theme.multAlpha(menuTextColor, .6f); + } + + public void setIsTonsite(boolean value) { + this.isTonsite = value; + } + + public void setColors(int backgroundColor, boolean animated) { + setColors(backgroundColor, -1f, animated); + } + + public void setColors(int backgroundColor, float dark, boolean animated) { + if (colorSet[2] && this.backgroundColor == backgroundColor) { + return; + } + + if (!animated) { + colorSet[2] = true; + if (dark < 0) { + dark = AndroidUtilities.computePerceivedBrightness(backgroundColor) <= .721f ? 1f : 0f; + } + + this.textColor = ColorUtils.blendARGB(Color.BLACK, Color.WHITE, dark); + this.iconColor = Theme.multAlpha(textColor, .55f); + + this.backgroundColor = backgroundColor; + +// double[] lch = OKLCH.rgb2oklch(OKLCH.rgb(backgroundColor)); +// final boolean isDark = lch[0] < .5f; +// if (isDark) { +// lch[0] = Utilities.clamp(lch[0], 0.025, 0); +// } else { +// lch[0] = Utilities.clamp(lch[0], 1, 0.975); +// } +// lch[1] = Utilities.clamp(lch[1], 0.01, 0); +// addressBackgroundColor = OKLCH.rgb(OKLCH.oklch2rgb(lch)); +// addressTextColor = isDark ? Color.WHITE : Color.BLACK; + addressBackgroundColor = ColorUtils.blendARGB(Color.WHITE, Color.BLACK, dark); + addressTextColor = ColorUtils.blendARGB(Color.WHITE, Color.BLACK, 1f - dark); + onAddressColorsChanged(addressBackgroundColor, addressTextColor); + addressBackgroundPaint.setColor(addressBackgroundColor); + addressRoundPaint.setColor(Theme.blendOver(addressBackgroundColor, Theme.multAlpha(textColor, lerp(.07f, .2f, dark)))); + addressEditText.setHintTextColor(Theme.multAlpha(addressTextColor, .6f)); + addressEditText.setTextColor(addressTextColor); + addressEditText.setCursorColor(addressTextColor); + addressEditText.setHandlesColor(addressTextColor); + + lineProgressView.setProgressColor(Theme.getColor(Theme.key_iv_ab_progress, resourcesProvider)); + + backButtonDrawable.setColor(ColorUtils.blendARGB(textColor, addressTextColor, addressingProgress)); + backButtonDrawable.setRotatedColor(ColorUtils.blendARGB(textColor, addressTextColor, addressingProgress)); + forwardButtonDrawable.setColor(textColor); + menuButton.setColorFilter(new PorterDuffColorFilter(textColor, PorterDuff.Mode.SRC_IN)); + forwardButton.setColorFilter(new PorterDuffColorFilter(textColor, PorterDuff.Mode.SRC_IN)); + clearButton.setColorFilter(new PorterDuffColorFilter(textColor, PorterDuff.Mode.SRC_IN)); + + rippleColor = Theme.blendOver(backgroundColor, Theme.multAlpha(textColor, .22f)); + Theme.setSelectorDrawableColor(backButtonSelector, rippleColor, true); + Theme.setSelectorDrawableColor(forwardButtonSelector, rippleColor, true); + Theme.setSelectorDrawableColor(menuButtonSelector, rippleColor, true); + Theme.setSelectorDrawableColor(clearButtonSelector, rippleColor, true); + + searchEditText.setHintTextColor(Theme.multAlpha(textColor, .6f)); + searchEditText.setTextColor(textColor); + searchEditText.setCursorColor(textColor); + searchEditText.setHandlesColor(textColor); + + onColorsUpdated(); + + invalidate(); + + return; + } + + if (colorAnimator != null) { + colorAnimator.cancel(); + } + fromBackgroundColor = this.backgroundColor; + final float fromDark = AndroidUtilities.computePerceivedBrightness(fromBackgroundColor) <= .721f ? 1f : 0f; + final float toDark = AndroidUtilities.computePerceivedBrightness(backgroundColor) <= .721f ? 1f : 0f; + colorAnimator = ValueAnimator.ofFloat(0, 1); + colorAnimator.addUpdateListener(anm -> { + final float t = (float) anm.getAnimatedValue(); + setColors(ColorUtils.blendARGB(fromBackgroundColor, backgroundColor, t), lerp(fromDark, toDark, t), false); + }); + colorAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + setColors(backgroundColor, toDark, false); + } + }); + colorAnimator.start(); + } + + protected void onAddressColorsChanged(int backgroundColor, int textColor) { + + } + + public int getBackgroundColor() { + return this.backgroundColor; + } + + public int getTextColor() { + return textColor; + } + + public void setHeight(int h) { + if (this.height != h) { + this.height = h; + + scale = (float) Math.pow(h / (float) dp(56), 0.5f); + leftmenu.setScaleX(scale); + leftmenu.setScaleY(scale); + leftmenu.setTranslationX(dp(42) * (1f - scale)); + leftmenu.setTranslationY(dp(ArticleViewer.BOTTOM_ACTION_BAR ? 16 : -12) * (1f - scale)); + rightmenu.setScaleX(scale); + rightmenu.setScaleY(scale); + rightmenu.setTranslationX(-dp(42) * (1f - scale)); + rightmenu.setTranslationY(dp(ArticleViewer.BOTTOM_ACTION_BAR ? 16 : -12) * (1f - scale)); + + lineProgressView.setTranslationY(height - dp(56)); + + invalidate(); + } + } + + public final GradientClip clip = new GradientClip(); + + public class Title { + + public final AnimatedTextView.AnimatedTextDrawable title = new AnimatedTextView.AnimatedTextDrawable(true, true, true); + public final AnimatedTextView.AnimatedTextDrawable subtitle = new AnimatedTextView.AnimatedTextDrawable(true, true, true); + public final AnimatedFloat animatedDangerous = new AnimatedFloat(WebActionBar.this, 0, 300, CubicBezierInterpolator.EASE_OUT_QUINT); + public int subtitleColor; + + public boolean isDangerous = false; + public int warningDrawableColor; + public final Drawable warningDrawable; + + public Title() { + title.ignoreRTL = true; + title.setTextSize(dp(18.33f)); + title.setScaleProperty(.6f); + title.setTypeface(AndroidUtilities.bold()); + title.setEllipsizeByGradient(false); + title.setCallback(WebActionBar.this); + title.setOverrideFullWidth(9999999); + + subtitle.ignoreRTL = true; + subtitle.setTextSize(dp(14)); + subtitle.setEllipsizeByGradient(false); + subtitle.setCallback(WebActionBar.this); + subtitle.setOverrideFullWidth(9999999); + + warningDrawable = getContext().getResources().getDrawable(R.drawable.warning_sign).mutate(); + } + + public void draw(Canvas canvas, float w, float h, float alpha) { + rect.set(0, 0, w, h); + canvas.saveLayerAlpha(rect, (int) (0xFF * alpha), Canvas.ALL_SAVE_FLAG); + + final float both = title.isNotEmpty() * subtitle.isNotEmpty(); + + canvas.save(); + canvas.translate(0, -dp(1) + h * (ArticleViewer.BOTTOM_ACTION_BAR ? .41f : .82f) * (1f - scale)); + canvas.translate(0, -dp(4) * both); + float s = scale * lerp(1f, .86f, both); + canvas.scale(s, s, 0, 0); + title.setBounds(0, 0, w, h); + title.draw(canvas); + canvas.restore(); + + final float dangerous = animatedDangerous.set(isDangerous); + + canvas.save(); + canvas.translate(0, -dp(1) + h * (ArticleViewer.BOTTOM_ACTION_BAR ? .41f : .82f) * (1f - scale) * both + dp(14) * both - dp(4) * (1f - both)); + s = scale * lerp(1.15f, .9f, both); + canvas.scale(s, s, 0, 0); + subtitle.setTextColor(ColorUtils.blendARGB(subtitleColor, Theme.getColor(Theme.key_text_RedBold), dangerous)); + if (dangerous > 0) { + if (warningDrawableColor != subtitle.getTextColor()) { + warningDrawable.setColorFilter(new PorterDuffColorFilter(warningDrawableColor = subtitle.getTextColor(), PorterDuff.Mode.SRC_IN)); + } + warningDrawable.setAlpha((int) (0xFF * dangerous)); + warningDrawable.setBounds(0, (int) (h - dp(16)) / 2, dp(16), (int) (h + dp(16)) / 2); + warningDrawable.draw(canvas); + } + subtitle.setBounds(dp(20) * dangerous, 0, w, h); + subtitle.draw(canvas); + canvas.restore(); + + rect.set(w - dp(12), 0, w, h); + clip.draw(canvas, rect, GradientClip.RIGHT, 1f); + canvas.restore(); + } + + } + + public int topPadding() { + return occupyStatusBar ? AndroidUtilities.statusBarHeight : 0; + } + + public void drawBackground(Canvas canvas, float h, float alpha, float shadowalpha, boolean withShadow) { + final float shadowh = Math.max(dp(0.66f), 1); + float t = ArticleViewer.BOTTOM_ACTION_BAR ? getHeight() - h : 0; + float b = ArticleViewer.BOTTOM_ACTION_BAR ? getHeight() : h; + float shadowt = ArticleViewer.BOTTOM_ACTION_BAR ? t : b - shadowh; + + float l = getWidth() * titleProgress; + int wasAlpha; + + rect.set(0, t, getWidth(), b); + wasAlpha = backgroundPaint[1].getAlpha(); + backgroundPaint[1].setAlpha((int) (wasAlpha * alpha)); + canvas.drawRect(rect, backgroundPaint[1]); + backgroundPaint[1].setAlpha(wasAlpha); + + if (titleProgress > 0f) { + rect.set(0, t, progress[1] * getWidth(), b); + wasAlpha = progressBackgroundPaint[1].getAlpha(); + progressBackgroundPaint[1].setAlpha((int) (wasAlpha * alpha * (1f - searchingProgress) * (1f - addressingProgress))); + canvas.drawRect(rect, progressBackgroundPaint[1]); + progressBackgroundPaint[1].setAlpha(wasAlpha); + + if (withShadow) { + rect.set(0, shadowt, l, shadowt + shadowh); + wasAlpha = shadowPaint[1].getAlpha(); + shadowPaint[1].setAlpha((int) (wasAlpha * alpha * shadowalpha * (1f - addressingProgress))); + canvas.drawRect(rect, shadowPaint[1]); + shadowPaint[1].setAlpha(wasAlpha); + } + } + + if (titleProgress < 1f) { + scrimPaint.setColor(Theme.multAlpha(0x60000000, (1f - titleProgress) * alpha)); + rect.set(0, t, l, b); + canvas.drawRect(rect, scrimPaint); + + rect.set(l, t, getWidth(), b); + wasAlpha = backgroundPaint[0].getAlpha(); + backgroundPaint[0].setAlpha((int) (wasAlpha * alpha)); + canvas.drawRect(rect, backgroundPaint[0]); + backgroundPaint[0].setAlpha(wasAlpha); + } + + rect.set(l, t, l + progress[0] * getWidth(), b); + wasAlpha = progressBackgroundPaint[0].getAlpha(); + progressBackgroundPaint[0].setAlpha((int) ((1f - Utilities.clamp01(titleProgress * 4)) * wasAlpha * alpha * (1f - searchingProgress) * (1f - addressingProgress))); + canvas.drawRect(rect, progressBackgroundPaint[0]); + progressBackgroundPaint[0].setAlpha(wasAlpha); + + if (withShadow) { + rect.set(l, shadowt, l + getWidth(), shadowt + shadowh); + wasAlpha = shadowPaint[0].getAlpha(); + shadowPaint[0].setAlpha((int) (wasAlpha * alpha * shadowalpha * (1f - addressingProgress))); + canvas.drawRect(rect, shadowPaint[0]); + shadowPaint[0].setAlpha(wasAlpha); + } + } + + public boolean drawShadow; + @Override + protected void dispatchDraw(Canvas canvas) { + drawBackground(canvas, topPadding() + height, 1f, 1f, drawShadow); + + float left = leftmenu.getRight(); + float right = rightmenu.getLeft(); + float top = ArticleViewer.BOTTOM_ACTION_BAR ? getHeight() - height : topPadding(); + float bottom = ArticleViewer.BOTTOM_ACTION_BAR ? getHeight() : topPadding() + height; + + if (titleProgress < 1) { + canvas.save(); + final float leftpadding = getWidth() * titleProgress - dp(54 - 24) * Utilities.clamp01(2 * titleProgress); + canvas.translate(left + leftpadding, top); + final float s = lerp(1f, .5f, titleProgress); + titles[0].draw(canvas, right - left - leftpadding, bottom - top, (1f - titleProgress) * (1f - searchingProgress)); + canvas.restore(); + } + if (titleProgress > 0) { + float l = getWidth() * titleProgress; + canvas.save(); + canvas.clipRect(0, 0, l, getHeight()); + canvas.translate(left, top); + canvas.translate(dp(-12) * (1f - titleProgress), 0); + final float s = lerp(1f, .5f, 1f - titleProgress); + canvas.scale(s, s, 0, (bottom - top) / 2f); + titles[1].draw(canvas, right - left, bottom - top, titleProgress * (1f - searchingProgress) * (1f - addressingProgress)); + canvas.restore(); + } + + if (addressingProgress > 0) { + int wasAlpha = addressBackgroundPaint.getAlpha(); + addressBackgroundPaint.setAlpha((int) (wasAlpha * addressingProgress)); + canvas.drawRect(0, 0, getWidth(), topPadding() + height, addressBackgroundPaint); + addressBackgroundPaint.setAlpha(wasAlpha); + + final float h = dp(42), cx = (top + bottom) / 2f; + rect.set(dp(6), cx - h / 2f, lerp(right, getWidth() - dp(6), addressingProgress), cx + h / 2f); + wasAlpha = addressRoundPaint.getAlpha(); + addressRoundPaint.setAlpha((int) (wasAlpha * addressingProgress)); + canvas.drawRoundRect(rect, dp(50), dp(50), addressRoundPaint); + addressRoundPaint.setAlpha(wasAlpha); + } + + rect.set(0, top, getWidth(), bottom); + canvas.save(); + canvas.clipRect(rect); + + super.dispatchDraw(canvas); + canvas.restore(); + } + + private ValueAnimator searchAnimator; + public void showSearch(boolean show, boolean animated) { + if (searching == show) return; + if (searchAnimator != null) { + searchAnimator.cancel(); + } + searching = show; + if (animated) { + searchEditText.setVisibility(VISIBLE); + backButtonDrawable.setRotation(backButtonShown || show ? 0f : 1f, true); + searchAnimator = ValueAnimator.ofFloat(searchingProgress, show ? 1 : 0); + searchAnimator.addUpdateListener(anm -> { + searchingProgress = (float) anm.getAnimatedValue(); + searchEditText.setAlpha(searchingProgress); + invalidate(); + }); + searchAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + if (!searching) { + searchEditText.setVisibility(GONE); + searchEditText.setText(""); + } + searchEditText.setAlpha(searchingProgress = show ? 1 : 0f); + invalidate(); + + if (searching) { + searchEditText.requestFocus(); + AndroidUtilities.showKeyboard(searchEditText); + } else { + searchEditText.clearFocus(); + AndroidUtilities.hideKeyboard(searchEditText); + } + } + }); + searchAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + searchAnimator.setDuration(320); + searchAnimator.start(); + } else { + searchingProgress = show ? 1f : 0f; + invalidate(); + searchEditText.setAlpha(show ? 1 : 0f); + searchEditText.setVisibility(show ? VISIBLE : GONE); + backButtonDrawable.setRotation(backButtonShown || show ? 0f : 1f, true); + if (searching) { + searchEditText.requestFocus(); + AndroidUtilities.showKeyboard(searchEditText); + } else { + searchEditText.clearFocus(); + AndroidUtilities.hideKeyboard(searchEditText); + } + } + AndroidUtilities.updateViewShow(forwardButton, !show, true, animated); + AndroidUtilities.updateViewShow(menuButton, !show, true, animated); + AndroidUtilities.updateViewShow(clearButton, searchEditText.length() > 0 && searching, true, animated); + } + + private boolean backButtonShown; + + public void setBackButton(boolean show) { + backButtonShown = show; + if (!isSearching() && !isAddressing()) { + backButtonDrawable.setRotation(backButtonShown ? 0f : 1f, true); + } + } + public void setBackButtonCached(boolean show) { + backButtonShown = show; + } + + public boolean isBackButton() { + return backButtonShown; + } + + public boolean isSearching() { + return searching; + } + + private Utilities.Callback<String> urlCallback; + public void showAddress(String currentUrl, Utilities.Callback<String> urlCallback) { + addressEditText.setText(currentUrl); + addressEditText.setSelection(0, addressEditText.getText().length()); + addressEditText.setScrollX(0); + this.urlCallback = urlCallback; + showAddress(true, true); + } + + private ValueAnimator addressAnimator; + private void showAddressKeyboard() { + if (addressing) { + addressEditText.requestFocus(); + AndroidUtilities.showKeyboard(addressEditText); + } else { + addressEditText.clearFocus(); + AndroidUtilities.hideKeyboard(addressEditText); + } + }; + + public void showAddress(boolean show, boolean animated) { + if (addressing == show) return; + if (addressAnimator != null) { + addressAnimator.cancel(); + } + addressing = show; + if (show) { + if (searchEngineIndex != SharedConfig.searchEngineType) { + searchEngineIndex = SharedConfig.searchEngineType; + addressEditText.setHint(LocaleController.formatString(R.string.AddressPlaceholder, SearchEngine.getCurrent().name)); + } + } + if (animated) { + addressEditText.setVisibility(VISIBLE); + backButtonDrawable.setRotation(backButtonShown || show ? 0f : 1f, true); + addressAnimator = ValueAnimator.ofFloat(addressingProgress, show ? 1 : 0); + addressAnimator.addUpdateListener(anm -> { + onAddressingProgress(addressingProgress = (float) anm.getAnimatedValue()); + addressEditText.setAlpha(addressingProgress); + menuButton.setTranslationX(dp(56) * addressingProgress); + forwardButton.setTranslationX(dp(56 + 56) * addressingProgress); + invalidate(); + }); + addressAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + if (!addressing) { + addressEditText.setVisibility(GONE); + } + addressEditText.setAlpha(addressingProgress = show ? 1 : 0f); + onAddressingProgress(addressingProgress); + menuButton.setTranslationX(dp(56) * addressingProgress); + forwardButton.setTranslationX(dp(56 + 56) * addressingProgress); + invalidate(); + } + }); + addressAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT_QUINT); + addressAnimator.setDuration(360); + addressAnimator.start(); + } else { + onAddressingProgress(addressingProgress = show ? 1f : 0f); + invalidate(); + addressEditText.setAlpha(show ? 1 : 0f); + addressEditText.setVisibility(show ? VISIBLE : GONE); + menuButton.setTranslationX(dp(56) * addressingProgress); + forwardButton.setTranslationX(dp(56 + 56) * addressingProgress); + backButtonDrawable.setRotation(backButtonShown || show ? 0f : 1f, true); + } + AndroidUtilities.cancelRunOnUIThread(this::showAddressKeyboard); + AndroidUtilities.runOnUIThread(this::showAddressKeyboard, addressing ? 100 : 0); + } + + protected void onAddressingProgress(float progress) { + backButtonDrawable.setColor(ColorUtils.blendARGB(textColor, addressTextColor, addressingProgress)); + backButtonDrawable.setRotatedColor(ColorUtils.blendARGB(textColor, addressTextColor, addressingProgress)); + backButton.invalidate(); + } + + public void hideKeyboard() { + if (searching) { + searchEditText.clearFocus(); + AndroidUtilities.hideKeyboard(searchEditText); + } + if (addressing) { + addressEditText.clearFocus(); + AndroidUtilities.hideKeyboard(addressEditText); + } + } + + public boolean isAddressing() { + return addressing; + } + + @SuppressLint("MissingSuperCall") + @Override + protected boolean verifyDrawable(@NonNull Drawable who) { + return true; + } + + private float pressX, pressY; + private long pressTime; + private Runnable longPressRunnable = () -> { + longClicked = true; + if (getParent() != null) { + getParent().requestDisallowInterceptTouchEvent(true); + } + performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); + }; + + public boolean longClicked = false; + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if (ev.getAction() == MotionEvent.ACTION_DOWN) { + longClicked = false; + AndroidUtilities.cancelRunOnUIThread(longPressRunnable); + if (ev.getX() > leftmenu.getRight() && ev.getX() < rightmenu.getLeft() && !isSearching() && !isAddressing()) { + pressX = ev.getX(); + pressY = ev.getY(); + pressTime = System.currentTimeMillis(); + AndroidUtilities.runOnUIThread(longPressRunnable, (long) (ViewConfiguration.getLongPressTimeout() * .8f)); + } + } else if (ev.getAction() == MotionEvent.ACTION_MOVE && System.currentTimeMillis() - pressTime > ViewConfiguration.getLongPressTimeout() * .8f) { + AndroidUtilities.cancelRunOnUIThread(longPressRunnable); + longClicked = true; + onScrolledProgress((float) (ev.getX() - pressX) / (.8f * getWidth())); + getParent().requestDisallowInterceptTouchEvent(true); + } else if (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_CANCEL) { + AndroidUtilities.cancelRunOnUIThread(longPressRunnable); + pressTime = 0; + } + pressX = ev.getX(); + return super.dispatchTouchEvent(ev); + } + + public class ForwardDrawable extends Drawable { + + private final Path path = new Path(); + private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); { + paint.setStyle(Paint.Style.STROKE); + paint.setStrokeJoin(Paint.Join.ROUND); + paint.setStrokeCap(Paint.Cap.ROUND); + } + private AnimatedFloat animatedState = new AnimatedFloat(this::invalidateSelf, 0, 350, CubicBezierInterpolator.EASE_OUT_QUINT); + private boolean state; + + public void setState(boolean state) { // false = collapse, true = forward + this.state = state; + invalidateSelf(); + } + + @Override + public void draw(@NonNull Canvas canvas) { + final float state = this.animatedState.set(!this.state); + + final float cx = getBounds().centerX(), cy = getBounds().centerY(); + final float w = getBounds().width(), aw = w * 0.57f; + + path.rewind(); + path.moveTo(cx - lerp(aw / 2f, -aw / 2f, state), cy); + path.lineTo(cx + aw / 2f, cy); + path.moveTo(cx + aw / 2f - w * .27f, cy - w * .54f / 2f); + path.lineTo(cx + aw / 2f, cy); + path.lineTo(cx + aw / 2f - w * .27f, cy + w * .54f / 2f); + + canvas.save(); + paint.setStrokeWidth(dp(2)); + canvas.translate(0, -w * 0.10f * state); + canvas.rotate(90 * state, cx, cy); + canvas.drawPath(path, paint); + canvas.restore(); + } + + public void setColor(int color) { + paint.setColor(color); + invalidateSelf(); + } + + @Override + public void setAlpha(int alpha) { + + } + + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) { + + } + + @Override + public int getOpacity() { + return PixelFormat.TRANSPARENT; + } + + @Override + public int getIntrinsicHeight() { + return dp(24); + } + + @Override + public int getIntrinsicWidth() { + return dp(24); + } + } + +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/WebBrowserSettings.java b/TMessagesProj/src/main/java/org/telegram/ui/web/WebBrowserSettings.java new file mode 100644 index 00000000000..1b2e705f789 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/WebBrowserSettings.java @@ -0,0 +1,691 @@ +package org.telegram.ui.web; + +import static org.telegram.messenger.AndroidUtilities.dp; +import static org.telegram.messenger.LocaleController.formatPluralStringComma; +import static org.telegram.messenger.LocaleController.formatString; +import static org.telegram.messenger.LocaleController.getString; + +import android.app.Dialog; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.ColorFilter; +import android.graphics.PixelFormat; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Build; +import android.text.InputType; +import android.text.TextUtils; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.KeyEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; +import android.webkit.CookieManager; +import android.webkit.WebStorage; +import android.webkit.WebView; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.ApplicationLoader; +import org.telegram.messenger.BuildVars; +import org.telegram.messenger.FileLog; +import org.telegram.messenger.LocaleController; +import org.telegram.messenger.NotificationCenter; +import org.telegram.messenger.R; +import org.telegram.messenger.SharedConfig; +import org.telegram.messenger.Utilities; +import org.telegram.messenger.browser.Browser; +import org.telegram.ui.ActionBar.AlertDialog; +import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.Cells.RadioColorCell; +import org.telegram.ui.Cells.TextCell; +import org.telegram.ui.Cells.TextCheckCell; +import org.telegram.ui.Components.CombinedDrawable; +import org.telegram.ui.Components.EditTextBoldCursor; +import org.telegram.ui.Components.ItemOptions; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.Text; +import org.telegram.ui.Components.UItem; +import org.telegram.ui.Components.UniversalAdapter; +import org.telegram.ui.Components.UniversalFragment; + +import java.io.File; +import java.util.ArrayList; +import java.util.concurrent.atomic.AtomicReference; + +public class WebBrowserSettings extends UniversalFragment implements NotificationCenter.NotificationCenterDelegate { + + private Drawable addIcon; + + private Utilities.Callback<BrowserHistory.Entry> whenHistoryClicked; + public WebBrowserSettings(Utilities.Callback<BrowserHistory.Entry> whenHistoryClicked) { + this.whenHistoryClicked = whenHistoryClicked; + } + + private long cacheSize, cookiesSize, historySize; + + @Override + public boolean onFragmentCreate() { + loadSizes(); + NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.webViewResolved); + return super.onFragmentCreate(); + } + + @Override + public void onFragmentDestroy() { + super.onFragmentDestroy(); + NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.webViewResolved); + } + + @Override + public void didReceivedNotification(int id, int account, Object... args) { + if (id == NotificationCenter.webViewResolved) { + if (listView != null) { + listView.adapter.update(true); + } + } + } + + private void loadSizes() { + ArrayList<BrowserHistory.Entry> history = BrowserHistory.getHistory(loadedHistory -> { + this.historySize = loadedHistory.size(); + if (listView != null && listView.adapter != null && listView.isAttachedToWindow()) { + listView.adapter.update(true); + } + }); + if (history != null) { + this.historySize = history.size(); + if (listView != null && listView.adapter != null && listView.isAttachedToWindow()) { + listView.adapter.update(true); + } + } + + Utilities.globalQueue.postRunnable(() -> { + long cacheSize = 0; + File cache1 = ApplicationLoader.applicationContext.getDatabasePath("webview.db"); + if (cache1 != null && cache1.exists()) { + cacheSize += cache1.length(); + } + File cache2 = ApplicationLoader.applicationContext.getDatabasePath("webviewCache.db"); + if (cache2 != null && cache2.exists()) { + cacheSize += cache2.length(); + } + File dir = new File(ApplicationLoader.applicationContext.getApplicationInfo().dataDir, "app_webview"); + if (dir.exists()) { + cacheSize += getDirectorySize(dir, false); + } + File dir2 = new File(ApplicationLoader.applicationContext.getApplicationInfo().dataDir, "cache/WebView"); + if (dir2.exists()) { + cacheSize += getDirectorySize(dir2, null); + } + + long cookieSize = 0; + File dir3 = new File(ApplicationLoader.applicationContext.getApplicationInfo().dataDir, "app_webview"); + if (dir3.exists()) { + cookieSize += getDirectorySize(dir3, true); + } + + final long finalCacheSize = cacheSize; + final long finalCookiesSize = cookieSize; + + AndroidUtilities.runOnUIThread(() -> { + this.cacheSize = finalCacheSize; + this.cookiesSize = finalCookiesSize; + if (listView != null && listView.adapter != null && listView.isAttachedToWindow()) { + listView.adapter.update(true); + } + }); + }); + } + + @Override + public View createView(Context context) { + +// if (parentLayout != null && parentLayout.isSheet()) { +// actionBar.setBackgroundColor(getThemedColor(Theme.key_windowBackgroundWhite)); +// actionBar.setActionModeColor(Theme.getColor(Theme.key_windowBackgroundWhite)); +// actionBar.setBackButtonImage(R.drawable.ic_ab_back); +// actionBar.setTitleColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); +// actionBar.setItemsBackgroundColor(getThemedColor(Theme.key_actionBarActionModeDefaultSelector), false); +// actionBar.setItemsColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText), false); +// actionBar.setItemsColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText), true); +// actionBar.setCastShadows(true); +// } + + Drawable drawable1 = context.getResources().getDrawable(R.drawable.poll_add_circle).mutate(); + Drawable drawable2 = context.getResources().getDrawable(R.drawable.poll_add_plus).mutate(); + drawable1.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_switchTrackChecked), PorterDuff.Mode.MULTIPLY)); + drawable2.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_checkboxCheck), PorterDuff.Mode.MULTIPLY)); + addIcon = new CombinedDrawable(drawable1, drawable2) { + { translateX = dp(2); } + @Override + public void setColorFilter(ColorFilter colorFilter) { + + } + }; + + return super.createView(context); + } + + @Override + public boolean isLightStatusBar() { +// if (parentLayout != null && parentLayout.isSheet()) { +// return AndroidUtilities.computePerceivedBrightness(getThemedColor(Theme.key_windowBackgroundWhite)) > .721f; +// } + return super.isLightStatusBar(); + } + + @Override + protected CharSequence getTitle() { + return LocaleController.getString(R.string.BrowserSettingsTitle); + } + + public static final int BUTTON_TOGGLE = 1; + public static final int BUTTON_CLEAR_CACHE = 2; + public static final int BUTTON_CLEAR_COOKIES = 3; + public static final int BUTTON_ADD = 4; + public static final int BUTTON_CLEAR_LIST = 5; + public static final int BUTTON_SEARCH_ENGINE = 6; + public static final int BUTTON_CLEAR_HISTORY = 7; + public static final int BUTTON_OPEN_HISTORY = 9; + public static final int BUTTON_CUSTOMTABS_ON = 10; + public static final int BUTTON_CUSTOMTABS_OFF = 11; + + @Override + protected void fillItems(ArrayList<UItem> items, UniversalAdapter adapter) { + items.add(UItem.asRippleCheck(BUTTON_TOGGLE, getString(R.string.BrowserSettingsEnable)).setChecked(SharedConfig.inappBrowser)); + items.add(UItem.asShadow(LocaleController.getString(R.string.BrowserSettingsEnableInfo))); + items.add(UItem.asButton(BUTTON_CLEAR_COOKIES, R.drawable.menu_clear_cookies, LocaleController.getString(R.string.BrowserSettingsCookiesClear), cookiesSize > 0 ? AndroidUtilities.formatFileSize(cookiesSize) : "")); + items.add(UItem.asButton(BUTTON_CLEAR_CACHE, R.drawable.menu_clear_cache, LocaleController.getString(R.string.BrowserSettingsCacheClear), cacheSize > 0 ? AndroidUtilities.formatFileSize(cacheSize) : "")); + items.add(UItem.asShadow(getString(R.string.BrowserSettingsCookiesInfo))); + if (historySize > 0) { + items.add(UItem.asButton(BUTTON_OPEN_HISTORY, R.drawable.menu_clear_recent, getString(R.string.BrowserSettingsHistoryShow))); + items.add(UItem.asButton(BUTTON_CLEAR_HISTORY, R.drawable.menu_clear_cache, getString(R.string.BrowserSettingsHistoryClear), formatPluralStringComma("BrowserSettingsHistoryPages", (int) historySize, ','))); + items.add(UItem.asShadow(null)); + } + items.add(UItem.asHeader(LocaleController.getString(R.string.BrowserSettingsNeverOpenInTitle))); + items.add(UItem.asButton(BUTTON_ADD, addIcon, LocaleController.getString(R.string.BrowserSettingsNeverOpenInAdd)).accent()); + RestrictedDomainsList.getInstance().load(); + ArrayList<ArrayList<String>> allDomains = RestrictedDomainsList.getInstance().restrictedDomains; + for (ArrayList<String> domains : allDomains) { + WebMetadataCache.WebMetadata meta = null; + for (String domain : domains) { + meta = WebMetadataCache.getInstance().get(domain); + if (meta != null) break; + } + items.add(WebsiteView.Factory.as(domains, meta == null ? "" : (TextUtils.isEmpty(meta.sitename) ? (TextUtils.isEmpty(meta.title) ? "" : meta.title) : meta.sitename), meta == null ? null : meta.favicon)); + } + if (!allDomains.isEmpty()) { + items.add(UItem.asButton(BUTTON_CLEAR_LIST, R.drawable.msg_clearcache, LocaleController.getString(R.string.BrowserSettingsNeverOpenInClearList)).red()); + } + items.add(UItem.asShadow(LocaleController.getString(R.string.BrowserSettingsNeverOpenInInfo))); + items.add(UItem.asButton(BUTTON_SEARCH_ENGINE, R.drawable.msg_search, LocaleController.getString(R.string.SearchEngine), SearchEngine.getCurrent().name)); + items.add(UItem.asShadow(LocaleController.getString(R.string.BrowserSettingsSearchEngineInfo))); + if (!SharedConfig.inappBrowser) { + items.add(UItem.asHeader(getString(R.string.BrowserSettingsCustomTabsTitle))); + items.add(UItem.asRadio(BUTTON_CUSTOMTABS_ON, getString(R.string.BrowserSettingsCustomTabs)).setChecked(SharedConfig.customTabs)); + items.add(UItem.asRadio(BUTTON_CUSTOMTABS_OFF, getString(R.string.BrowserSettingsNoCustomTabs)).setChecked(!SharedConfig.customTabs)); + items.add(UItem.asShadow(getString(R.string.BrowserSettingsNoCustomTabsInfo))); + } + if (BuildVars.DEBUG_PRIVATE_VERSION) { + items.add(UItem.asCheck(12, "adaptable colors").setChecked(SharedConfig.adaptableColorInBrowser)); + } + } + + @Override + protected void onClick(UItem item, View view, int position, float x, float y) { + if (item.id == 12) { + SharedConfig.toggleBrowserAdaptableColors(); + ((TextCheckCell) view).setChecked(SharedConfig.adaptableColorInBrowser); + } else if (item.id == BUTTON_TOGGLE) { + SharedConfig.toggleInappBrowser(); + ((TextCheckCell) view).setChecked(SharedConfig.inappBrowser); + ((TextCheckCell) view).setBackgroundColorAnimated(SharedConfig.inappBrowser, Theme.getColor(SharedConfig.inappBrowser ? Theme.key_windowBackgroundChecked : Theme.key_windowBackgroundUnchecked)); + listView.adapter.update(true); + } else if (item.id == BUTTON_CUSTOMTABS_ON) { + SharedConfig.toggleCustomTabs(true); + listView.adapter.update(true); + } else if (item.id == BUTTON_CUSTOMTABS_OFF) { + SharedConfig.toggleCustomTabs(false); + listView.adapter.update(true); + } else if (item.id == BUTTON_CLEAR_CACHE) { + new AlertDialog.Builder(getContext(), getResourceProvider()) + .setTitle(getString(R.string.BrowserSettingsCacheClear)) + .setMessage(formatString(R.string.BrowserSettingsCacheClearText, cacheSize == 0 ? "" : " (" + AndroidUtilities.formatFileSize(cacheSize)+")")) + .setPositiveButton(getString(R.string.Clear), (di, w) -> { + ApplicationLoader.applicationContext.deleteDatabase("webview.db"); + ApplicationLoader.applicationContext.deleteDatabase("webviewCache.db"); + WebStorage.getInstance().deleteAllData(); + try { + WebView webView = new WebView(getContext()); + webView.clearCache(true); + webView.clearHistory(); + webView.destroy(); + } catch (Exception e) {} + try { + File dir = new File(ApplicationLoader.applicationContext.getApplicationInfo().dataDir, "app_webview"); + if (dir.exists()) { + deleteDirectory(dir, false); + } + } catch (Exception e) { + FileLog.e(e); + } + try { + File dir = new File(ApplicationLoader.applicationContext.getApplicationInfo().dataDir, "cache/WebView"); + if (dir.exists()) { + deleteDirectory(dir, null); + } + } catch (Exception e) { + FileLog.e(e); + } + WebMetadataCache.getInstance().clear(); + loadSizes(); + }) + .setNegativeButton(getString(R.string.Cancel), null) + .makeRed(AlertDialog.BUTTON_POSITIVE) + .show(); + } else if (item.id == BUTTON_CLEAR_COOKIES) { + new AlertDialog.Builder(getContext(), getResourceProvider()) + .setTitle(getString(R.string.BrowserSettingsCookiesClear)) + .setMessage(formatString(R.string.BrowserSettingsCookiesClearText, cookiesSize == 0 ? "" : " (" + AndroidUtilities.formatFileSize(cookiesSize)+")")) + .setPositiveButton(getString(R.string.Clear), (di, w) -> { + CookieManager cookieManager = CookieManager.getInstance(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + cookieManager.removeAllCookies(null); + cookieManager.flush(); + } + try { + File dir = new File(ApplicationLoader.applicationContext.getApplicationInfo().dataDir, "app_webview"); + if (dir.exists()) { + deleteDirectory(dir, true); + } + } catch (Exception e) { + FileLog.e(e); + } + loadSizes(); + }) + .setNegativeButton(getString(R.string.Cancel), null) + .makeRed(AlertDialog.BUTTON_POSITIVE) + .show(); + } else if (item.id == BUTTON_CLEAR_HISTORY) { + long firstDate = Long.MAX_VALUE; + ArrayList<BrowserHistory.Entry> entries = BrowserHistory.getHistory(); + for (BrowserHistory.Entry e : entries) { + firstDate = Math.min(firstDate, e.time); + } + new AlertDialog.Builder(getContext(), getResourceProvider()) + .setTitle(getString(R.string.BrowserSettingsHistoryClear)) + .setMessage(formatString(R.string.BrowserSettingsHistoryClearText, LocaleController.formatDateChat(firstDate / 1000L))) + .setPositiveButton(getString(R.string.Clear), (di, w) -> { + BrowserHistory.clearHistory(); + historySize = 0; + listView.adapter.update(true); + }) + .setNegativeButton(getString(R.string.Cancel), null) + .makeRed(AlertDialog.BUTTON_POSITIVE) + .show(); + } else if (item.id == BUTTON_OPEN_HISTORY) { + final HistoryFragment[] fragment = new HistoryFragment[] { null }; + fragment[0] = new HistoryFragment(null, e -> { + fragment[0].finishFragment(); + if (whenHistoryClicked != null) { + finishFragment(); + whenHistoryClicked.run(e); + } else { + Browser.openUrl(getContext(), e.url); + } + }); + presentFragment(fragment[0]); + } else if (item.id == BUTTON_CLEAR_LIST) { + RestrictedDomainsList.getInstance().restrictedDomains.clear(); + RestrictedDomainsList.getInstance().scheduleSave(); + listView.adapter.update(true); + } else if (item.instanceOf(WebsiteView.Factory.class)) { + final WebsiteView websiteView = (WebsiteView) view; + final ArrayList<String> domains = websiteView.domains; + ItemOptions.makeOptions((ViewGroup) fragmentView, websiteView) + .add(R.drawable.menu_delete_old, LocaleController.getString(R.string.Remove), () -> { + RestrictedDomainsList.getInstance().setRestricted(false, domains.toArray(new String[0])); + listView.adapter.update(true); + }) + .show(); + } else if (item.id == BUTTON_SEARCH_ENGINE) { + if (getParentActivity() == null) { + return; + } + AtomicReference<Dialog> dialogRef = new AtomicReference<>(); + + LinearLayout linearLayout = new LinearLayout(getContext()); + linearLayout.setOrientation(LinearLayout.VERTICAL); + + ArrayList<SearchEngine> searchEngines = SearchEngine.getSearchEngines(); + CharSequence[] items = new CharSequence[ searchEngines.size() ]; + + for (int i = 0; i < items.length; ++i) { + final SearchEngine engine = searchEngines.get(i); + items[i] = engine.name; + + final int index = i; + RadioColorCell cell = new RadioColorCell(getParentActivity()); + cell.setPadding(dp(4), 0, dp(4), 0); + cell.setCheckColor(Theme.getColor(Theme.key_radioBackground), Theme.getColor(Theme.key_dialogRadioBackgroundChecked)); + cell.setTextAndValue(items[index], index == SharedConfig.searchEngineType); + cell.setBackground(Theme.createSelectorDrawable(Theme.getColor(Theme.key_listSelector), Theme.RIPPLE_MASK_ALL)); + linearLayout.addView(cell); + cell.setOnClickListener(v -> { + SharedConfig.setSearchEngineType(index); + ((TextCell) view).setValue(SearchEngine.getCurrent().name, true); + dialogRef.get().dismiss(); + }); + } + + Dialog dialog = new AlertDialog.Builder(getParentActivity()) + .setTitle(getString(R.string.SearchEngine)) + .setView(linearLayout) + .setNegativeButton(getString("Cancel", R.string.Cancel), null) + .create(); + dialogRef.set(dialog); + showDialog(dialog); + } else if (item.id == BUTTON_ADD) { + final AlertDialog[] dialog = new AlertDialog[1]; + final AlertDialog.Builder b = new AlertDialog.Builder(getContext(), getResourceProvider()); + b.setTitle(getString(R.string.BrowserSettingsAddTitle)); + + LinearLayout container = new LinearLayout(getContext()); + container.setOrientation(LinearLayout.VERTICAL); + + TextView textView = new TextView(getContext()); + textView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, getResourceProvider())); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + textView.setText(getString(R.string.BrowserSettingsAddText)); + container.addView(textView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 24, 5, 24, 12)); + + EditTextBoldCursor editText = new EditTextBoldCursor(getContext()) { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(36), MeasureSpec.EXACTLY)); + } + }; + final Runnable done = () -> { + final String text = editText.getText().toString(); + Uri uri = Uri.parse(text); + if (uri == null || uri.getHost() == null) { + uri = Uri.parse("https://" + text); + } + if (uri == null || uri.getHost() == null) { + AndroidUtilities.shakeView(editText); + return; + } + String _domain = uri.getHost().toLowerCase(); + if (_domain.startsWith("www.")) _domain = _domain.substring(4); + final String domain = _domain; + RestrictedDomainsList.getInstance().setRestricted(true, domain); + final WebMetadataCache.WebMetadata cached_meta = WebMetadataCache.getInstance().get(domain); + if (cached_meta != null && !TextUtils.isEmpty(cached_meta.sitename) && cached_meta.favicon != null) { + if (dialog[0] != null) { + dialog[0].dismiss(); + } + listView.adapter.update(true); + } else { + final AlertDialog progressDialog = new AlertDialog(getContext(), AlertDialog.ALERT_TYPE_SPINNER); + final Runnable dismiss = () -> { + dialog[0].dismiss(); + progressDialog.dismissUnless(800); + listView.adapter.update(true); + }; + AndroidUtilities.runOnUIThread(dismiss, 5_000); + progressDialog.showDelayed(300); + WebMetadataCache.retrieveFaviconAndSitename("https://" + text + "/", (sitename, favicon) -> { + AndroidUtilities.cancelRunOnUIThread(dismiss); + progressDialog.dismissUnless(800); + WebMetadataCache.WebMetadata meta = WebMetadataCache.getInstance().get(domain); + if (meta != null) { + listView.adapter.update(true); + } + }); + } + }; + editText.setOnEditorActionListener(new TextView.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_DONE) { + done.run(); + return true; + } + return false; + } + }); + editText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18); + editText.setText(""); + editText.setTextColor(Theme.getColor(Theme.key_dialogTextBlack, getResourceProvider())); + editText.setHintColor(Theme.getColor(Theme.key_groupcreate_hintText, getResourceProvider())); + editText.setHintText(LocaleController.getString(R.string.BrowserSettingsAddHint)); + editText.setSingleLine(true); + editText.setFocusable(true); + editText.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); + editText.setLineColors(Theme.getColor(Theme.key_windowBackgroundWhiteInputField, getResourceProvider()), Theme.getColor(Theme.key_windowBackgroundWhiteInputFieldActivated, getResourceProvider()), Theme.getColor(Theme.key_text_RedRegular, getResourceProvider())); + editText.setImeOptions(EditorInfo.IME_ACTION_DONE); + editText.setBackgroundDrawable(null); + editText.setPadding(0, 0, dp(42), 0); + container.addView(editText, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 24, 0, 24, 10)); + b.setView(container); + b.setWidth(dp(292)); + + + b.setPositiveButton(LocaleController.getString(R.string.Done), (dialogInterface, i) -> { + done.run(); + }); + b.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), (dialogInterface, i) -> { + dialogInterface.dismiss(); + }); + + dialog[0] = b.create(); + dialog[0].setOnDismissListener(d -> { + AndroidUtilities.hideKeyboard(editText); + }); + dialog[0].setOnShowListener(d -> { + editText.requestFocus(); + AndroidUtilities.showKeyboard(editText); + }); + dialog[0].setDismissDialogByButtons(false); + dialog[0].show(); + } + } + + @Override + protected boolean onLongClick(UItem item, View view, int position, float x, float y) { + return false; + } + + public static class WebsiteView extends FrameLayout { + public final ImageView imageView; + public final TextView titleView; + public final TextView subtitleView; + public final ImageView optionsView; + + public WebsiteView(Context context) { + super(context); + + imageView = new ImageView(context); + addView(imageView, LayoutHelper.createFrame(28, 28, Gravity.CENTER_VERTICAL | Gravity.LEFT, 18, 0, 0, 0)); + + titleView = new TextView(context); + titleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + titleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + titleView.setTypeface(AndroidUtilities.bold()); + titleView.setMaxLines(1); + titleView.setEllipsize(TextUtils.TruncateAt.END); + addView(titleView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.FILL_HORIZONTAL, 64 + 4, 7, 54, 0)); + + subtitleView = new TextView(context) { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + subtitleView.setPivotY(getMeasuredHeight() / 2f); + } + }; + subtitleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText)); + subtitleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + subtitleView.setMaxLines(1); + subtitleView.setEllipsize(TextUtils.TruncateAt.END); + subtitleView.setPivotX(0); + addView(subtitleView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.FILL_HORIZONTAL, 64 + 4, 30, 54, 0)); + + optionsView = new ImageView(context); + optionsView.setScaleType(ImageView.ScaleType.CENTER); + optionsView.setImageResource(R.drawable.ic_ab_other); + optionsView.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_windowBackgroundWhiteGrayIcon), PorterDuff.Mode.SRC_IN)); + addView(optionsView, LayoutHelper.createFrame(32, 32, Gravity.CENTER_VERTICAL | Gravity.RIGHT, 0, 0, 18, 0)); + } + + private ArrayList<String> domains; + private boolean needDivider; + public void set( + CharSequence title, + ArrayList<String> domains, + Bitmap favicon, + boolean divider + ) { + titleView.setText(title); + StringBuilder subtitle = new StringBuilder(); + for (String domain : domains) { + if (subtitle.length() > 0) { + subtitle.append(", "); + } + subtitle.append(domain); + } + subtitleView.setText(subtitle); + if (TextUtils.isEmpty(title)) { + subtitleView.setTranslationY(-dp(14)); + subtitleView.setScaleX(1.3f); + subtitleView.setScaleY(1.3f); + } else { + subtitleView.setTranslationY(0); + subtitleView.setScaleX(1f); + subtitleView.setScaleY(1f); + } + this.domains = domains; + String s = (TextUtils.isEmpty(title) ? domains.isEmpty() || TextUtils.isEmpty(domains.get(0)) ? "" : domains.get(0) : title).toString(); + if (favicon != null) { + imageView.setImageBitmap(favicon); + } else { + CombinedDrawable drawable = new CombinedDrawable( + Theme.createRoundRectDrawable(dp(6), Theme.multAlpha(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText), .1f)), + new Drawable() { + private final Text text = new Text(s.substring(0, !s.isEmpty() ? 1 : 0), 14, AndroidUtilities.bold()); + @Override + public void draw(@NonNull Canvas canvas) { + text.draw(canvas, getBounds().centerX() - text.getCurrentWidth() / 2f, getBounds().centerY(), Theme.getColor(Theme.key_windowBackgroundWhiteBlackText), 1f); + } + @Override + public void setAlpha(int alpha) {} + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) {} + @Override + public int getOpacity() { + return PixelFormat.TRANSPARENT; + } + } + ); + drawable.setCustomSize(dp(28), dp(28)); + imageView.setImageDrawable(drawable); + } + if (needDivider != divider) invalidate(); + setWillNotDraw(!(needDivider = divider)); + } + + @Override + protected void dispatchDraw(Canvas canvas) { + super.dispatchDraw(canvas); + canvas.drawRect(dp(64), getHeight() - 1, getWidth(), getHeight(), Theme.dividerPaint); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure( + MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(dp(56), MeasureSpec.EXACTLY) + ); + } + + public static class Factory extends UItem.UItemFactory<WebsiteView> { + @Override + public WebsiteView createView(Context context, int currentAccount, int classGuid, Theme.ResourcesProvider resourcesProvider) { + return new WebsiteView(context); + } + + @Override + public void bindView(View view, UItem item, boolean divider) { + ((WebsiteView) view).set(item.text, (ArrayList<String>) item.object2, item.object instanceof Bitmap ? ((Bitmap) item.object) : null, divider); + } + + public static UItem as(ArrayList<String> domains, String sitename, Bitmap favicon) { + UItem i = UItem.ofFactory(WebsiteView.Factory.class); + i.text = sitename; + i.object = favicon; + i.object2 = domains; + return i; + } + } + } + + private static long getDirectorySize(File dir, Boolean cookies) { + if (dir == null || !dir.exists()) { + return 0; + } + long size = 0; + if (dir.isDirectory()) { + File[] files = dir.listFiles(); + if (files != null) { + for (File file : files) { + size += getDirectorySize(file, cookies); + } + } + } else { + if (cookies != null && (cookies != dir.getName().startsWith("Cookies"))) { + return size; + } + size += dir.length(); + } + return size; + } + + private static boolean deleteDirectory(File dir, Boolean cookies) { + if (dir == null || !dir.exists()) { + return false; + } + if (dir.isDirectory()) { + boolean allDeleted = true; + File[] files = dir.listFiles(); + if (files != null) { + for (File file : files) { + if (cookies != null && (cookies != file.getName().startsWith("Cookies"))) { + continue; + } + if (!deleteDirectory(file, cookies)) { + allDeleted = false; + } + } + } + if (allDeleted) { + dir.delete(); + } + } else { + if (cookies != null && (cookies != dir.getName().startsWith("Cookies"))) { + return false; + } + dir.delete(); + } + return true; + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/web/WebMetadataCache.java b/TMessagesProj/src/main/java/org/telegram/ui/web/WebMetadataCache.java new file mode 100644 index 00000000000..4848223b3f4 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/web/WebMetadataCache.java @@ -0,0 +1,445 @@ +package org.telegram.ui.web; + +import static org.telegram.messenger.AndroidUtilities.dp; + +import android.app.Activity; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.os.Build; +import android.text.TextUtils; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.JavascriptInterface; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.FrameLayout; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.ApplicationLoader; +import org.telegram.messenger.BuildVars; +import org.telegram.messenger.FileLoader; +import org.telegram.messenger.FileLog; +import org.telegram.messenger.NotificationCenter; +import org.telegram.messenger.R; +import org.telegram.messenger.Utilities; +import org.telegram.tgnet.AbstractSerializedData; +import org.telegram.tgnet.SerializedData; +import org.telegram.tgnet.TLObject; +import org.telegram.tgnet.TLRPC; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.RLottieDrawable; +import org.telegram.ui.LaunchActivity; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.HashMap; + +public class WebMetadataCache { + + private static WebMetadataCache instance; + public static WebMetadataCache getInstance() { + if (instance == null) { + instance = new WebMetadataCache(); + } + return instance; + } + + public static final int MAX_COUNT = 100; + public static final int EXPIRATION = 1000 * 60 * 60 * 24 * 7; + + private HashMap<String, WebMetadata> cache; + + public static class WebMetadata extends TLObject { + + public long time = System.currentTimeMillis(); + public String domain; + public String title; + public String sitename; + public int actionBarColor; + public int backgroundColor; + public Bitmap favicon; + + public byte[] faviconBytes; + + public static WebMetadata from(BotWebViewContainer.MyWebView webView) { + WebMetadata metadata = new WebMetadata(); + metadata.domain = AndroidUtilities.getHostAuthority(webView.getUrl(), true); + if (TextUtils.isEmpty(metadata.domain)) return null; + if (webView.lastTitleGot) { + metadata.title = webView.lastTitle; + } + metadata.sitename = webView.lastSiteName; + if (webView.lastActionBarColorGot) { + metadata.actionBarColor = webView.lastActionBarColor; + } + if (webView.lastBackgroundColorGot) { + metadata.backgroundColor = webView.lastBackgroundColor; + } + if (webView.lastFaviconGot) { + metadata.favicon = webView.lastFavicon; + } + return metadata; + } + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt64(time); + stream.writeString(domain == null ? "" : domain); + stream.writeString(title == null ? "" : title); + stream.writeString(sitename == null ? "" : sitename); + stream.writeInt32(actionBarColor); + stream.writeInt32(backgroundColor); + if (favicon == null) { + stream.writeInt32(TLRPC.TL_null.constructor); + } else { + stream.writeInt32(0x38da9893); + if (faviconBytes != null) { + stream.writeByteArray(faviconBytes); + } else { + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + favicon.compress(Bitmap.CompressFormat.WEBP_LOSSY, 80, byteArrayOutputStream); + } else { + favicon.compress(Bitmap.CompressFormat.WEBP, 80, byteArrayOutputStream); + } + stream.writeByteArray(faviconBytes = byteArrayOutputStream.toByteArray()); + try { + byteArrayOutputStream.close(); + } catch (Exception e) { + FileLog.e(e); + } + } + } + } + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + time = stream.readInt64(exception); + domain = stream.readString(exception); + title = stream.readString(exception); + sitename = stream.readString(exception); + actionBarColor = stream.readInt32(exception); + backgroundColor = stream.readInt32(exception); + int magic = stream.readInt32(exception); + if (magic == TLRPC.TL_null.constructor) { + favicon = null; + } else { + faviconBytes = stream.readByteArray(exception); + favicon = BitmapFactory.decodeStream(new ByteArrayInputStream(faviconBytes)); + } + } + } + + private final static class MetadataFile extends TLObject { + public final ArrayList<WebMetadata> array = new ArrayList<>(); + + @Override + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(array.size()); + for (int i = 0; i < array.size(); ++i) { + array.get(i).serializeToStream(stream); + } + } + + @Override + public void readParams(AbstractSerializedData stream, boolean exception) { + final int count = stream.readInt32(exception); + for (int i = 0; i < count; ++i) { + WebMetadata metadata = new WebMetadata(); + metadata.readParams(stream, exception); + if (TextUtils.isEmpty(metadata.domain)) return; + array.add(metadata); + } + } + } + + public File getCacheFile() { + return new File(FileLoader.getDirectory(FileLoader.MEDIA_DIR_CACHE), "webmetacache.dat"); + } + + public WebMetadata get(String domain) { + load(); + WebMetadata meta = cache.get(domain); + if (meta == null) return null; + meta.time = Math.max(meta.time, System.currentTimeMillis()); + scheduleSave(); + return meta; + } + + public void save(WebMetadata meta) { + if (meta == null) return; + if (cache == null) { + cache = new HashMap<>(); + } + if (TextUtils.isEmpty(meta.domain)) return; + cache.put(meta.domain, meta); + load(); + scheduleSave(); + } + + private boolean loaded; + private boolean loading; + private boolean saving; + + public void load() { + if (loaded || loading) return; + loading = true; + if (cache == null) { + cache = new HashMap<>(); + } + Utilities.globalQueue.postRunnable(() -> { + final File file = getCacheFile(); + if (!file.exists()) { + loaded = true; + return; + } + + final ArrayList<WebMetadata> result = new ArrayList<>(); + + try { + SerializedData stream = new SerializedData(file); + MetadataFile data = new MetadataFile(); + data.readParams(stream, true); + result.addAll(data.array); + } catch (Exception e) { + FileLog.e(e); + } + + AndroidUtilities.runOnUIThread(() -> { + for (int i = 0; i < result.size(); ++i) { + final WebMetadata meta = result.get(i); + cache.put(meta.domain, meta); + } + loaded = true; + loading = false; + }); + }); + } + + public void scheduleSave() { + AndroidUtilities.cancelRunOnUIThread(this::save); + if (saving) return; + AndroidUtilities.runOnUIThread(this::save, BuildVars.DEBUG_PRIVATE_VERSION ? 1 : 1_000); + } + + public void save() { + if (saving) return; + saving = true; + + final long now = System.currentTimeMillis(); + final ArrayList<WebMetadata> toBeSaved = new ArrayList<>(); + for (WebMetadata meta : cache.values()) { + if (TextUtils.isEmpty(meta.domain) || now - meta.time > EXPIRATION) + continue; + toBeSaved.add(0, meta); + if (toBeSaved.size() >= MAX_COUNT) + break; + } + + Utilities.globalQueue.postRunnable(() -> { + final File file = getCacheFile(); + if (!file.exists()) { + try { + file.createNewFile(); + } catch (Exception e) { + FileLog.e(e); + saving = false; + return; + } + } + + MetadataFile data = new MetadataFile(); + data.array.addAll(toBeSaved); + final int size = data.getObjectSize(); + SerializedData stream = new SerializedData(size); + data.serializeToStream(stream); + + try { + FileOutputStream os = new FileOutputStream(file); + os.write(stream.toByteArray()); + os.close(); + } catch (Exception e) { + FileLog.e(e); + } + + AndroidUtilities.runOnUIThread(() -> { + saving = false; + }); + }); + } + + public void clear() { + if (cache == null) { + loading = false; + loaded = true; + cache = new HashMap<>(); + } else { + cache.clear(); + } + scheduleSave(); + } + + private static class SitenameProxy { + private final Utilities.Callback<String> whenReceived; + public SitenameProxy(Utilities.Callback<String> whenReceived) { + this.whenReceived = whenReceived; + } + @JavascriptInterface + public void post(String type, String data) { + AndroidUtilities.runOnUIThread(() -> { + switch (type) { + case "siteName": { + whenReceived.run(data); + break; + } + case "siteNameEmpty": { + whenReceived.run(null); + break; + } + } + }); + } + } + + public static void retrieveFaviconAndSitename(String url, Utilities.Callback2<String, Bitmap> whenDone) { + if (whenDone == null) return; + + Context context = LaunchActivity.instance; + if (context == null) context = ApplicationLoader.applicationContext; + + final Activity activity = AndroidUtilities.findActivity(context); + if (activity == null) { + whenDone.run(null, null); + return; + } + final View rootView = activity.findViewById(android.R.id.content).getRootView(); + if (!(rootView instanceof ViewGroup)) { + whenDone.run(null, null); + return; + } + final ViewGroup container = (ViewGroup) rootView; + final FrameLayout webViewContainer = new FrameLayout(context) { + @Override + protected boolean drawChild(Canvas canvas, View child, long drawingTime) { + return false; + } + @Override + public boolean onTouchEvent(MotionEvent event) { + return false; + } + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return false; + } + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(MeasureSpec.makeMeasureSpec(dp(500), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(dp(500), MeasureSpec.EXACTLY)); + } + }; + container.addView(webViewContainer); + + final WebView webView = new WebView(context); + final WebSettings settings = webView.getSettings(); + settings.setJavaScriptEnabled(true); + settings.setGeolocationEnabled(false); + settings.setDomStorageEnabled(true); + settings.setDatabaseEnabled(false); + settings.setSupportMultipleWindows(false); + settings.setAllowFileAccess(false); + settings.setAllowContentAccess(false); + settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); + settings.setSaveFormData(false); + settings.setSavePassword(false); + webView.setVerticalScrollBarEnabled(false); + + try { + settings.setUserAgentString(settings.getUserAgentString().replace("; wv)", ")")); + } catch (Exception e) { + FileLog.e(e); + } + + final boolean[] done = new boolean[] { false }; + final String[] sitename = new String[] { null }; + final Bitmap[] favicon = new Bitmap[] { null }; + + final Utilities.Callback<Boolean> checkDone = force -> { + if (done[0]) return; + + if ( + force || + !TextUtils.isEmpty(sitename[0]) && + (favicon[0] != null && favicon[0].getWidth() > dp(28) && favicon[0].getHeight() > dp(28)) + ) { + done[0] = true; + + WebMetadataCache.WebMetadata meta = new WebMetadata(); + meta.domain = AndroidUtilities.getHostAuthority(url, true); + meta.sitename = sitename[0]; + if (favicon[0] != null) { + meta.favicon = Bitmap.createBitmap(favicon[0]); + } + getInstance().save(meta); + + webView.destroy(); + AndroidUtilities.removeFromParent(webView); + AndroidUtilities.removeFromParent(webViewContainer); + + whenDone.run(sitename[0], favicon[0]); + + NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.webViewResolved, url); + } + }; + + webView.setWebChromeClient(new WebChromeClient() { + @Override + public void onReceivedIcon(WebView view, Bitmap icon) { + if (icon == null) return; + if (favicon[0] == null || favicon[0].getWidth() < icon.getWidth() && favicon[0].getHeight() < icon.getHeight()) { + favicon[0] = icon; + checkDone.run(false); + } + } + }); + Runnable putJS = () -> { + final String js = RLottieDrawable.readRes(null, R.raw.webview_ext).replace("$DEBUG$", "" + BuildVars.DEBUG_VERSION); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + webView.evaluateJavascript(js, value -> {}); + } else { + try { + webView.loadUrl("javascript:" + URLEncoder.encode(js, "UTF-8")); + } catch (UnsupportedEncodingException e) { + webView.loadUrl("javascript:" + URLEncoder.encode(js)); + } + } + }; + webView.setWebViewClient(new WebViewClient() { + @Override + public void onPageFinished(WebView view, String url) { + super.onPageFinished(view, url); + putJS.run(); + } + }); + webView.addJavascriptInterface(new SitenameProxy(name -> { + sitename[0] = name; + checkDone.run(false); + }), "TelegramWebview"); + + webViewContainer.addView(webView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + webView.loadUrl(url); + putJS.run(); + + AndroidUtilities.runOnUIThread(() -> { + checkDone.run(true); + }, 10_000); + } +} diff --git a/TMessagesProj/src/main/res/drawable-hdpi/large_income.png b/TMessagesProj/src/main/res/drawable-hdpi/large_income.png new file mode 100644 index 0000000000000000000000000000000000000000..a4119d1db9a521f372decc64f79d4c727a320bfc GIT binary patch literal 1472 zcmV;x1wZ<UP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NHDoI2^RA>e5nQe$wMHt7usaa%c zCcSB)6`4p9$r=_^rj#0CQBV=J1d(AR5h|g52#h{d9}0x9Hwr51gGEr0M(aXBMv3N! zjY_=<l|doei%F|{`~BB5*Jq|V=girAZwBoHzn!=L^UR!c=ggToJ7UDJ4c~$P?j2|} z8l&O3PL8nFuHX#xG-BNZSHjecvq@#Y!#>ypA49LwTCKL9^w^p1F5C$lpdYH(A;fP& z*D<*QI-Uz(LOW~|K`tB0g;btGbaXl$t%DmQ9Ui3a1K0}nj0WjA7!NbyYM2G1z}jI7 zj|ryMA=}WlJcGXwc0y>qRNM|@Q#wO;3M_*<g!U;FlT+eU(h&4=_$BB~7o!JvNQUo7 z=!U&u?OO_G4Jl~MiC~w&0ow!lXJJfCU$u@nli?$<)<;3pwKXHiIM`t#50HO2B`Ufx zFjHxn9!(9N18ZMU2%nX*P<}fB-m($NFYy)mCA8}^-*@s=M_bTpS$-w+amnhVii$ZR z=)tu1Qk4)mZqA&yr23)PbFne=Q*scdr}{T_IO%R^9y;4j=ESBTCxd1pbi?!TE6Dc4 zQ?LM1rqj9TegkKEdsj0&Z*|^TI<G7Oy1O7;se&+#Z>YE`A=c8sac-H9*N*d66W|lC zF;YOQ!Ka!Qg2j<A%_`b81HLu^-_Po1kj`%kV;KbJ7)NCn#B{EX_6e|0!pt;pSHgL4 zGH4}w8npj$_A{B0E=DY+T`{cLX?1GMXRr>BdyJRnZ{bo#`$D5vc10{W^^4$u1ekt> zf4r=yJ0ISLA0f{^bMf;AcC8bT_9X00W*EJ)n}hOTkvN(LS5SBmKBv4VqSKwd9!5vn zT-6&c6HV!4m$~%&qass@Hk|)!O>^Ze@w9*(He;|^)lVu6ioh*@a$Hm>rV))cd0~ei zQg;WqLrqy2uN}X8A!favFf8D4eBhO|Psit(z|R(UQ+N$@XOniU8W-B|A*QNvUpQv3 zj38Wrrg?&#0)C_5aR`42syx#}{17CamC-4tvwkuYbB1uF8o`-Pou!qIeE3`dkH8kN z%O*w7bSO$Pyw+x(FQ+>EX}VgN<P;GRV=T-A-Nl^{+MI}6v<k;5khg03J_zj_uz1e- zuDK;*>J!U4u(m4KA+aHE9)4x~2TVSiWkloQZkQbvP|2F#PqHRxZ~xIz9WaoK;9by; zGGzz)0y>%Iyk1gKqiwcC#+F5erV_0VI(awRC|k(VftE;XI+S>Km-1B5gKbS;Cvpv; zeCqHMT%0RxwSnMWU>|&ngL@r)H`3umX}BVlu0r_qfU_4{9cQ6Gz08NY>#ZbxmG;6H z8tvBvF}e!}(2hnrJONgKwh?waLb35Zybjl;^o6b$oM}}o+<F(r#CZ+qfOB)9&@`ge zf#f@o^_ZrlEIzviJ&*jkEy*b+!e4LJfh?G|3Ae;_u{yNdGQah)_M$rc^a9jFzX~dU z0&T{|S!=xga`qQx?bk~UotEPVz*~_@9osEn0D3?*aA$Qgon4zda1o0cw7ZBO$PfKz zHG?D0G<X#BkCDzAoy>vN(DIZZhNhQRCAa<7d*afnSJ0Nbs7~p83dwT#1Gd99=wlD0 z{||VER_EdkaFS_|t_ywgS3Kj}dX_<LgwXn^&_6dkqwa}7sE=VwJkh^hU;yt0gL1_i z!m-dW33PFKxvhl4w{qy;kurnON$yG51a8^gL4HC<I_z{%27U$<ecS2u5QgIq-+}+d a9rzoik||wB%7=3R0000<MNUMnLSTZ+td%|h literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_arrowup.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_arrowup.png new file mode 100644 index 0000000000000000000000000000000000000000..699954b16bcfab3f6c4a97060161a68a4878c42c GIT binary patch literal 417 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB7>k44ofy`glX(f`xTHpSruq6Z zXaU(A42<oW3@jieKr98s3=GT*7#Wy>G$TlC0TWzSWdSpS4N|DZ_xKM`8Mmj4V@L#N za)JcwVnqWfCNQC)c%b8u@`0cK|L->q=(J%>eQ~K@LQ=AS0e8?Db}Kc8j+3l*N30q; zBU&9wqf}P7hW(N{v9n*Nq5o`?|D*<)6H59D`}`d4@+VCBtGb}ABr_o<)ba6a;R*kE zQ}?r6y0v6>TQs|7Ae-@1^$CKUN9r3QcsjlZUJiU>(ZMLenw{}fW0MR^3C~#>*KN%} zPM3@ew|n3lg)HkXExtv|7O!}wkY(Amif_@h#SYH|SPmT07mu>Kue?HH1;Yw6mX6G@ zMa?<_Opi`F@T}V3!Q`;@M4y%G6tyVrCaYJv6XyA5@9r>@e<87IdFUct`A`d}mz`}{ Y7`m3-D-*vUcLWqXp00i_>zopr0QF9SZU6uP literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_bookmark.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_bookmark.png new file mode 100644 index 0000000000000000000000000000000000000000..51cb0e7cb6c485dcde8737e23d73fb18d4540f57 GIT binary patch literal 594 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB7>k44ofy`glX(f`xTHpSruq6Z zXaU(A42<oW3@jieKr98s3=GT*7#Wy>G$TlC0TWzSWdSpS4N|DZ_xKM`*&a_9$B+ol zx6^lfF$W5?ZH}|rYMhj;Y^KFg7WG8X<k~*xRUulN_!HE{%)*jXIhwZ4o$j=8!<Nfl z9cEn%8o$miHTUr=EB?kL_K>IMX7RH#e`fx9b7)ym;X@gX=MB@B+Hy2$m1=L`SR7du za+d$K`;Kom??az{)|Wie%vR%cQ-Js4sT8M2TP8Z(bUgFV?a}m`lU9T%mObk%<#o%c zeYW$9%icwbinEHipK#B5bxGD$H@-aI)aq07qZQx7{-m~D;ya<gVzc&Ey<JzNqIP?) zzwa=2dFS%Qcdv#fBxjUt@m*QRJag;+P36otbISNE+jIDCoV#oLL}rs^g0=je>W=SS zciww>=1nc?P)vI$5GU~eK^3QTz#mi7Os|uQubd^)cu!VZw3S6%`2EqrEAGQCw&2u# zD<$6-TedtfnsZ6#zmi#^1d~O3ZARk}p*aU_zrLQNA<I!JleCvhe1Y>FOU9qsB5bb> zZ#0R$*pa+>nNZ!8Nq?O-%Xwt7-p}bv(DUuxTzG@6*dQoTL~4a(x%+kfb?gR{%{pc- zFJmfuz*}N+HtO}fcb+>M%WpJiW(RvQ?lrohXLDHBXX%t(TZ$7t$oycPlO1IKy}I%y PC_X)1{an^LB{Ts5q!sGS literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_bookmarks.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_bookmarks.png new file mode 100644 index 0000000000000000000000000000000000000000..ef1394f5cbdabdc4b8914f122a0eca022ffe75a9 GIT binary patch literal 658 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB7>k44ofy`glX(f`xTHpSruq6Z zXaU(A42<oW3@jieKr98s3=GT*7#Wy>G$TlC0TWzSWdSpS4N|DZ_xKM`*&k0A$B+ol zx6^lfF*}O1mG8A_%6!wKv?A0>_Y*_d!BgrRe6%x?RU>ZP?3m$XebK3gf!p!mv16CK zTn;LAX>?3qbKlT9(dg#yb={4&AJWs#&G~%(<o<N^Bb&IiMLd=_$g18goFi1YIf0GG z{p7_YyP5IL+_$&Mo7Vr)Y`w97@18@HFyF&2m8SHqdXBf8&ivW+JTcKP!plLk`0yUC zwnLxJ)SfIXZguvtSjzfH($n;0*;*<6-R4qqKb=lx?G?;D-*BJpUuN$6nAz%cU&&aN zi^m5z&fVU*{qbsT?SqFNyeOC*;>bF4<IXkRO@~tSL|$39Cf(nYc;6u9|GdBXAKr*h z&vv}yy11@Y<NyBbS3aVT+P(4~s0M`Hw>We|>6ygWb4<yK@xl9B8XIq^edN|se|AIV z-}lVaRRUXMo3sVO7uJdhEnVZo-Sma;T$h0Q))3#`GpQSR%O;5>JW~zoU|OaS#n_!7 zAj8OAzt8t<qi6v~l*7z3)9*HY%FN=M^Y}ohfj;|gHS>3j5zEV;<o89qT9$XYq9(}Y z`PT5D9go?QnSCmjEG=XGdSUg!f9G~Fngu+$cH?x;%iqg+S=}t2viLN`Ztzs(@7d?p zm-Wi9=}BDSoxo?meszA8tMNUy-<YfG@|EbgsVufe>wg%`&w5qJ^t5lXy29e7sQnMD eSzEvEXR<%?&Sh@iLDyJNdhm4hb6Mw<&;$UM*bD&x literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_refresh.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..0ed008b3faad3bfee5f36c4e48e28a4de2130706 GIT binary patch literal 930 zcmV;T16}-yP)<h;3K|Lk000e1NJLTq001Na001Ni1^@s6;Q*MJ00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91B%lKT1ONa40RR91Bme*a04fgS`~Uz03`s;mR9Fe^n9EBQQ5?tby%kyZ zFc5lBXhEAcQ41vtA|q<mA|YCpAQcp0{Q*I=s6{OlBIr#ED_7B`=fake8DvFJ3xzD{ zMFm=x>Gb){ou8gN%$zxn_bwuT@R@UFe&65soO#`uxtYvV{9{KTJDK@<o;RKPSuhQT zv)Sz6Wc*UqGKqRP3!U%_%;;g|CLDx$sRnQ<!aNI2@CsaG0O2`U=rV?C5>FY1)rc=a zy%y2_fXC1Y?_dPx!fL36YS8#Xr<v2)rW>@yTgK0klltVKpa#ByMlYRam>*Y7PLAeg zxCLgMHfu;Mf_``oat+!8Q7!0XM(Lk{a(h)_7X5a34;n41V1ry|8jE#%WQ(d2J_hO$ z+Qvws!$xYC!kfTL8sCfda<ENKsXY+32V!ZO?CRt!9!sE4%!uz$1>GQV-|B#1n=i{R z+O6UVB(d89a_S|n!ymurc_*wkh;9c$xqd3GVoQ?R3OEeAz`ylr+dyJC-}uXhSR2yI zL9Q8z)>xrKg8Gxb%lP6Y-5cYpW4)?aJ0yq3WS+MwR_KtxM{fPEhF?_ov(<_Uz4AX; zg^o%5X21qG3LP*6W?Zvcp?n&s?^=Z^lX#bbJPVJ(aj39bA<*B8t5#tNlev)hXs{mM z9+H)AH9YW8FqHjJmTo?o@PxX9vDTJwOsjQxLS2Dce(G0PD@&9NPw1X8&R(NmlrB42 z2lC3{e$ya+2omzNFWPG;UggjO61~oQh`7No$uG`37bXa?YcYKHCCCfY6y7n4cNS(R zzJ}L+!>@zByt=vv1<OF*TO{Pkyu-b^P)Thg=mT3WgLF3wg&ScIB*gF(lobvazlL@; zTmTJuommrK;gG>#6X>MG_%$2=`ND_{a&zDayakO<bm}4tLK_p$B}OZ$xdQ8r+5!5H z;2HG6OjrQxpa#q%`GEC3eCqVm7AKfg4&=z_!<TMiyg;!V5_dZFEX5q;-S{FrfuEou z@5o)y3R@x7L{b&$9x<qV;K`p2zd`<N@H98o{x?V9FS^jwR-ku1wg3PC07*qoM6N<$ Ef`$u_xc~qF literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_search.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_search.png new file mode 100644 index 0000000000000000000000000000000000000000..7066fb356fec5a97ab9cdb4c9c3824f2a8f0d06d GIT binary patch literal 751 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB7>k44ofy`glX(f`xTHpSruq6Z zXaU(A42<oW3@jieKr98s3=GT*7#Wy>G$TlC0TWzSWdSpS4N|DZ_xKM315>1@i(^Ox z=i6!a-ZG97$KL-DW^wG8<>V;fc}qm>Cqt&lI$`T*>*&v-Nz>OSs57oTvc%$yy2o6# zR!+H&IZX<aR&?go^}ne;BWt{SbM?KWkK}$BZZ>}Z`%U%c&DP;7c}yZ2--RuRGO_iX zq*#=eAolNo=hmp)OW(ppKCx|k$YWJ{<N*7O_m!b{o><njNZb|J!m6CgeYz$^V*imJ z#(TW-3w)~?+AlN&Ml?w6Vg3BuslL^{((|{)B8jzU$_?ILoXNe@csobD?u>5?Tkgxb z&)C`jvbIOtGI<04va>Vx+>yAmrO~%~C#N5S=i?8$zWWx;Em?ND)bOSsZ~bL9`QQ_C z=R7ruKkKHUmnGAzxFNjST<fH8%W?h*ujajcFd_f)%f;q%(_Z9iX`il*J#rv?!oCA) zdvB$t?$nQ1`r`eh^$N1=YPIR7P8Gd35D5GvTJk7G&*JZ**weO8nP-al=5?ocmYR8P z<G=Onv)&2mwqnTzm-O9U+s$~fV9LA1ji!P(71Lu+uDqsn`B0+7*=9a3&*KLpEOynl z-LTAPS~9innq1%~F6Ftm)MVKoSB4!~F{4fO;<{%~UCt+)F}3&Y>}yV)&-nP3ah1<D zqms${13n*3@4b1SHJ_(V*yl|{_MgeG&+V7@?(uE(T>sPHPSd}(noXVSqPs2ye&Q<$ zc;;E1CYqH{9kBLy^R9I-4>DZ#ywPAa=aB53Lxyh-No_GR_<K+M=|7Xa6}Hp9pZFa; zB|2fn{qIw`L?89>cNK*zufD%AX#b8fd(p_1duMxh2N{O@FH-m$BKj$%>*d{B{B!<a b=K8~I@#AQ&_Ol5eL5a=N)z4*}Q$iB}qN71| literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_cache.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_cache.png new file mode 100644 index 0000000000000000000000000000000000000000..e57e3fa6cdc06139a5d239e5c5eef81062f9c964 GIT binary patch literal 1138 zcmV-&1daQNP)<h;3K|Lk000e1NJLTq001Na001Ni1^@s6;Q*MJ00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91B%lKT1ONa40RR91Bme*a04fgS`~Uz0+(|@1R9Fe^ms^O9Q547LxEq6^ z6jPIwMk$x@Fqk5@2b4?U$>qVNytqtKqBLS2yiiJ%j7y4)%P72PT*@Vv<PzmUVhqEK zYl_SqzyCRVeY4M;neWUw4&%Y9-|V&5UTf`jzVF+Y$;tW0B+^m!M5EC><{k?T@F)_A zL_4aM9EzC)Z^5J*rGG*}7*>Ov8q(x3{zDUzg>>-EhdPin#hcjQii9vsC%wUR)tL#& zLOLWabICu^4u(?K|4bX{;>9jSuYj(etvzZj@Be0d9GOtBWv%nwMcfN)HLl<E*S{ks zF9*p7$X6k>M`b|HyTblX!-NCit7b+vyJEVat2oI@*@9PwVG#YfkoGGh<`j>+kv2>= zGT001VYhRfOsglQC0_;2LP1q3GeeozoGDo&=Ro-8a;vbI(BI>1H_R41Aq+>L05W+( zw=AKxOf(*S5<G_K&=cxl517nx${92Kk(OdsxL<CK?Kc~2LI%d!Anh=-XT2qP9@vMf zW!(rSuTj=RFWBacPqJQwpO8t`xrwx*`a=;MfFEG;9>tE1az8%Maj>I9&hK2n8(RIU zSMU<_i=V-gAkb5==Ysqtwvu8V^b2JJ`?yhKvY)^Hw;a!iF`c8M(yJp-$+0CiMf{99 zg+4qObP6`@M?2snm~1t_;QGNxF2*U)9c1t1wZ8rn`vvx$543?0Uqt6VXf>H=f6)rs zj{jXVs>Q!A%|2KJ4;ddxn;ju}H@E?k=dcQ%f-e{8l=w5!-|HNzefw|eB<uu-Tw<*# zJ!L%s*%!in@Z}1f8KCi6H&FUpMOZM&dcX;nR86o8n~z%Tv*EfNJbB{jLwx^?bdpT~ zKk3d?iSVBSm%x{Msp3M%$utTo!FJ#8=xaiQS`6Y}3|~MJJNa9<gm($jt62tD!I#@~ zMubNvj}kM+OOmuTBu97_0#(c%FM-sDumFN>!wX5N61N>B=^q;e4UL7y|7ht>g^UVO zrNrt|Rs)i<l-0N9K%oA!kQ{4mJRKW3^kgMJp)j4;z?Z<q%7ExY-VBAHgL5Y6lBHMJ zBM1ml@Vg9>(;;r*Lj-FRJEtsd$l34=@lj$+y!dJDiD}b^L^{d!G1^_na;vX%EJ3hM zgnqt}{xy&US5|*KBb{WO!ES`wgC?|0gl#407+G#(=(E5?SKI6fSqs26w$JEiU;}Id z?M){0H7lJyU<>17_A2o*F@aV~9keBSm0AqCK|XL!KWImLX|k)5T)%t?9EN+Kn`J$; zCR*mPe+IK#MT%@p+8YjniqpMWSKi}LoFer9aJ!zsFTp&*`gcjsb^rhX07*qoM6N<$ Ef>=!aF#rGn literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_cookies.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_cookies.png new file mode 100644 index 0000000000000000000000000000000000000000..d6fc958e22af7cfc2ce05ac469bf6f2ce66d1800 GIT binary patch literal 1383 zcmV-t1(^DYP)<h;3K|Lk000e1NJLTq001Na001Ni1^@s6;Q*MJ00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91B%lKT1ONa40RR91Bme*a04fgS`~Uz1(Md!>R9Fe^m~DtuRT#$`UBlN> z!xy#|3l_sbk`ghK7EB~cDPk4B7z?_leGwBe#Gs6nurGojMWMA3C6r1cOAuQcsgxp0 z82KT@mvT`uUn<3I`u)#5&*jXWduN@Q`sM?_eV+5Yoiq2Id+y8@?#Pj1vDi##4orpa zLZPrHC-whzvyl5?2lRo<O^kd0%bDpn9NJ(q6f%1gcpQ4c<%S#RNts1;IO){}=fR~1 zV{}<79PRKoNY24xxCh+#R9Qit1Nw~w|Iq(nyKGNd;%SAe7CC~x&x6=K=0A)c<^Fm# zJ=R;lKhP6km5nc>OScX~dq#2r$|hwz4SYXc#O{I-^(=_G(V&SXud4@oVHg#QmqJel z&EOL*vm`CzG%UCAJnSprvN#mmADm<2ah^@yMr-gpdZhBuADM4&sAJG!j=#`NmNegd zTS8K)a1=hjl3JYhm=^vmXfJenZk8rK27FtrQx4-M(BdRZLmkFjVOT64jvL|Al`DH3 z8IOaXAxpN!^=X@ex2;IqBHVKHZ1d>@jaSV8@I7-fZo)x$4vHz?dB#t`dvMKSH%<4M zu244FOBUEf-z#Q6XZjGn-(+h+7tEQQ12h;4x+N_ZOOy&hw@05+H9Z#WH60YSkHIT2 z564;<0?J9Y0rs;X*;P{frNH-)?&Tl_&{~Y7%M-D+U)p_ad4urz9_a8GzD|h6&zsdz z&eSO3LHBF&vEWZxczPJOKo_)mBKB#J=p7dX+ZV3-v2vpIO7KOV!uH;n;lO<vJq+HE z136LZ7X8KPPmd0(irZupEhn}G!bVpfC||O}+hMN^p3)Pgb7vyF5AkbA8{1zU8@)Es z1Y6-6NDe~gqP#$H%R_~_R>iQj_w?G4Z1#MMsb(|$sbD1UVu#}<&R4T`@O!OKuG<mz zlqYIze!nuxPxck|t00m8b9l&WUE|Yvv;i)G%WEDl(?qo>zfwxpUicC|Htl<ZVaSUY zqg#{y^uDl1%O+w#?%nVSNRFlB$(W#SpY~KAWQqKWhufq=>^tEANPdAA;U|cto59Rv zqEg*fOYoy34wu^`>gnqMUEX(0YaE^?&t^OTJ^+apJ4-RN{0rbH#PSV;IiUEj7Fgx| z8qzcy4E}_w_nNGR_~*iRN{Hk{WIvEqSCfxsGazodslNu~&w{TYmLvVuRgKf>VfYNR zVI|jLMb)BIko@W3UuVLbKb2B_NU?5>_Rl_u<$DH`t5;V>sd*%7QgJj?Rzw~OwU{5G z1~QMsd?@>R5|vdose2P7m9LGel>{l$G2o&{_erR0A)1TYCO8X{_5IDC8K>~aP|g9F znNWk1KDx3J{no4cipp(E;UaZFw2{|A3+To9H0Xt^TR1qkK@=eGYmn@W+_jk$>k#`w zU2<git#qVzW>i1>R%&u{XfzbG8RPev`fEHfU5HP=g8l1p2s7Rfk^|}dy2msd2%YMR z=nR^XZia6u=ryv$W7yAtOY+6f;|*!LHiI8*m$7%jYFG<8n_QmPL=5f%e=xcmnmn(V z3G}q|LZ0YW>S53~$YYjt13e|LXTyG)>yy6#AA<fTa0c{qJ4^JKmwpU3JaY{Vm~;ee p11(P9n@_^0FujI0w^MVkz`tnfbMG)R@L~V}002ovPDHLkV1hF#c|QOE literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_history.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_history.png new file mode 100644 index 0000000000000000000000000000000000000000..8aee059c290f1fd6233f691ef7d17cc785774c4b GIT binary patch literal 1259 zcmV<H1Qh#;P)<h;3K|Lk000e1NJLTq001Na001Ni1^@s6;Q*MJ00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91B%lKT1ONa40RR91Bme*a04fgS`~Uz1RY^oaR9Fe^mRYDyQ546&Yf5HU zBD$eOkq8f_x<Zm6Qlvy445cd}nak`!9<G#9#w3)vq$E?3NFq@lWF8`8ig5h?=j`>_ z=Y02k_uSz{S@rwYUTd$l_BnexUoQ7ANDu@qpaRarOZe`zZ24Q%^*vMr%ApUGq}HQz zD!hhbqW-C=MXKo_w;bMp$weBa1!*`}SOoehEP;X0)oI!Co2)1(QjLSeHt^OJ_-%#I z`(mj$G&3f9Xta(6I75C=ze$Z|ilp@}@e{fW=p`keAzC^bT2EW1J^q8>?*iMT6MlOr z<z?Da#Fc^umaJ1f^t8|lf{*$7IJ8kET8`MvU~g0hvN4|!71B)E@>TeKX>H=Ss1Wi2 z+9(cvP!8m*><0QlCPpe(SyEE+$+b;2bq&*@>EbF~pXFOlfo8z=I2X8%ZRCH%*9d!@ z^PQBo2kPydmz~b4EZ*{q<t?MLIlKpZk>Rv8QvsZY`~$U<fxL@U>^ItIxm*X{$X>t# zEZ*|XAJgP@#4+DFw=z3lTzit!H}Ji7?Qk7+`AG)movwjzao7|6JU~si7}~lLBrnZp z8sA`84ijKINObpTmO`QZOio0z_g8S}29_-O>y29Y8iS6i*4$)_dNJ(Cp7-<c&#^$K z?Y>!Raro_J6w=fDp~jJV$}Er=ovKxE3_3fz;FRIl6{1rlc>=$}R`jEl(2O^S4UsE& zU}NMp9jW(FJ}A*3r^<T>{~|ZgS9B@#fZgx|Oy1G3Psf%->BuCY&NnqRnt|;{J4xXH z_{*RYzJV{hFm(J2g^n!WGTVqM8vB-EuaOhco;eP^lB3{j51YZ?lWUW4d7HpmeeKE9 z(j?#B9&A8<0M{T^d-5<y?k4+VHUZjG6`<3nCHU^NZ24o~F6<_79VCxo9y|nJ&S4Dm z2g2Uz0xtUgI<+a-0QS4WI#DB3(D^mncU+&T%QQxV@?JS-!F5xshoV?hIO>W@#V<Hl z75{j+rT|ZL$(nSl)dToRR2l+)(XD=eRc+!&zy<K-c2%*NeN^fTx*WA(CE8yLGZ!F` z_(AXmB&%zZ8^)5PrI`g+z?YjCeQH{eoc>;sf~%ouJreaWx4Z&s-h(M%{{)KGNOqF9 z2_%J|jbw1rCaHUv8vW?#j)Yo0h-#DD2ws3>eR8}^Hi`Gc^dLBtDWOOZbu_b*pHNmL zG`)+&8LEJ2Bd>-s(1&v@>;Nrc>@RLwHR3LT<V0FbwSJOyiJeiE6ggFG5dz2^=H-vd zl9L)kA$`fU8STH0)t22OnTT&FwDtYiS3z>!_t&XSv4&v(2z3VyNfyL67xWpKZGE)I zfl0af>qS$w6WGP}nf6Io3M)Z(lgVTah|vn{V4SO$he#G-0G*b%kS1D69R~e_yz7E~ zp!+3j)tgOmz4=Ty0Jq^eyoahp$9!(R4W6|SgSLddpoi1{=0|V@24$`BKd#se`~f>_ V^*l`Xiq!xB002ovPDHLkV1lD1MH&DA literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_recent.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_recent.png new file mode 100644 index 0000000000000000000000000000000000000000..38be7b9b7adedd02d8b85c02b62dab8c82e1a103 GIT binary patch literal 969 zcmV;)12+7LP)<h;3K|Lk000e1NJLTq001Na001Ni1^@s6;Q*MJ00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91B%lKT1ONa40RR91Bme*a04fgS`~Uz0Gf6~2R9Fe^n7?ZjK@`VxiHU`Z zF;!F$RESE%ix!GWa|#M}#zF)k60J-fZ7jTi;9ro!N)imlN-R~dRuO+dN^L}ff`~+e z#veI9-*aA^+w9)%oEw9X2cLUy=Dm6IZgzKe?wXob<Ud=1LZkIoDwQ_ImY@$dK_^J2 z9goou3WdU)I+si+WG76(CrFbS0w$rDdqE^^hwJbId{O%iJaJ5;e}XS+kHh9%3L{Yw zUV@2=&?=pPb<s)aTLb-|BIdy4EylrUd{A2nVAe9C@4$|%Nr>GBH^Jm9#>uSXYvLH# z1@B!Zt;%psKtO}BgJ7$rqQX{+0j)3vCIbQU$A*%q1Xh$TU-o;7;9)QsiJiggB(NI> zK-)p0;MYo-j3);A4x%@JJ=R*KRlYyYCgwFr&c^xuK4P>LNc8ljZwUmQSG1F(ezGLn zg3;xq80#lSH@aQAN$XG41V04HE6B8)SEGM_loJzs4nnmhNVIvbHdnJ5rg5&vKH%CD zZ2cAU<*aYJeA>qjTkb^#;n;0X^dryC+q_4@d6#s*C2wX$M&S~)xXx~KqNilz+Y2|~ zi0At&la-$(!8?~kFXyW0=^1kNE+#yK-Qn6&+ADPV?t(7m7Pt@fq_v(i;?v1sBP<l8 zOZLnKokov=zmM#rZN=zb8igeJ;2anD5@pCzm_0Cm?o$SKz*8`JVFvo6v**$0k}6R@ zer<T)T)fnC=t&u)lY!(~O&lH3qN-8uBefVyMtl#b5EB&`yIS<?L}161%a&t7<BTgR zb1{~PJbDMJ2!FM%n%^}3elR&^{WTh|UsP~0ell|Tt98Zq$;KbMF-GGQ*bW!r&?0AG z2RT}xD>{t6uvbSkLEdc&vIASTmuuby`1vR%{P+<`&_<F|u-)%(#3n}x>@6R5K(h%+ zFa(k>FlhauT4TYA2|vQxge2(&{}I-&jjiTS)5PiqwtEJ%()c0YCL>87*siLiDsT*r z!&-|oP2bY}4Du%FWFj3swLkgtoyNcYp=d=(Gx;941)m{JW(d%iDEc|-+4i=r7ZdAa r5*<5B&<i>~EYF_}OuQn?x&prd*#vS}Z0#g>00000NkvXXu0mjfR*In^ literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_cover_stories.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_cover_stories.png new file mode 100644 index 0000000000000000000000000000000000000000..dc88f3bae0b0c011d3d403c094dd651ddb73faee GIT binary patch literal 1092 zcmV-K1iSl*P)<h;3K|Lk000e1NJLTq001Na001Ni1^@s6;Q*MJ00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91B%lKT1ONa40RR91Bme*a04fgS`~Uz0u1Q2eR9Fe^m`g}hQ5eS^C5uuk zBZ9!NKnp4eTnI)`VY-lzN+N0zL7O%OEux3eN<ySX1V$7R)S^X255mYr2G+`opheL- zi3*MAWe@H5AI~?Q>)bmtS0{_;gP-S|?{&_-_q@h}g8!2F4J0y~!>yyEqa|1xVHGTP zJWC`JN2pJqFpy@r4PPNlsx%r5v)~qVLlaEu!6ToHgmusd6Xhq00qBPlmVkOS`0|uS zt=XqklBg9%yzK9&cR~Xchb2d!fMf6;Of>k`F#nu%1nae5wrrH2pbg4$N`Mo-rEnC! zfaE*O%r!pXN1#8L7qqJb4lx?UE{85S6eDchl|X$alU^$G#;wy_qjODQn=^VdzhyAw zoeMLvJ|0fCnlxuppNaYccmPANH*2B{4#aN&P4fE?y(M7OK4a46=R|qH43vYuEpDCo zU0$xOk?}Zb)01dv2UZj9O)@y?i%gP(fgE!{eMs(vhF~ZG+krd7oUm)}(VHp{v&Yeq z<1|Rrr;ehapxh>_lZK!*|1J7yw9Y8ESPz9(q0~Vs8G&9^CL<)@2Or=OEXk0g7u#!R zpPlAM@L7-yq#1Km5W5p>%TTW8urMkd+e+90{)-uNN2$|U(jS!|lb*PG_@)GijtG-} zDy5lXeOvm-d@FU56~Y<NL3tjECb-CF4Z3Tfjcyp~;Q~l%;5t6>&M*Q(KN<RV@TDu+ zjr)V45_AQTXtQgPiLwZ8fXP)VX%FM)3e<5v?jn`6*d^WVbSnJ0(eCWpy){ov_WMau z>c*hm*yNnqQRvOzgqKiZ`c#QBu<U8Cg<+7qg<8<rW}<7wLu*hb2boIfD(K7LiRYKR z$kAT!>6#|S=@t7M<3-wUT!03(P63pa@XG1^;u4L>GYQ)w(3>zhNad7kXd#3j;27-a z_~D#Y?D0oWdo>Kn;G~B#>#2>;Qn0zE&;Jo5J%0W`9b<FSW&BS^z`->z*FZODA>_QI z@zui&f-jrH`bg>UwCjgn<%*OcPZe_3fqj9;S<|`zTTz<C;omoFrf3IpZiJJtEZWPn z;Q04kVQpLtDxa793i7o;a(}ZvVwD7IQ}YKknV&)B<j|+l)*%VpLSqfcoJpe3XLCwP zb<@lCLvcPn9pG;d%CX(@PN^i3R)(!UswvSiqrF8Zy8l!9O3Guba+g8}aDIiP+NZR6 z>e?A5Rq7GLVfYO9pdrpEBDecYN$5m(;6~6b^UwV|CetAQS=%pe|AEDqn^U|10000< KMNUMnLSTZho9s&f literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_delete_old.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_delete_old.png new file mode 100644 index 0000000000000000000000000000000000000000..66dfa47046070496fa04835645299b4574dfb141 GIT binary patch literal 813 zcmV+|1JeA7P)<h;3K|Lk000e1NJLTq001Na001Ni1^@s6;Q*MJ00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91B%lKT1ONa40RR91Bme*a04fgS`~Uy~mq|oHR9Fe^m(QzBQ547Dkze^0 zgQt}INR%is@nfJ{O5UHKH(;cU)GNimVPZtR49!VVM#9X*5D{gfJW9!Peb&9}`>gZx zy|eGRxMkJ%t-aTe?^%28{m$8UYU&@8EVZ6~zuzPGJlGFb0m)|u&%li=%f8AuR!uQi z!B5a6uW)W}TS)5;@eu3CORySz2hYJGknCiz&nNSA>7pEC(G+wkwB<zcA^0+I-(x-$ z{mad5l_i1f2*zzC$Ix&p*w+)=3v&%W`d~+m-`s=l(!n1}s?-o%2Y*WL6^n@f9Yx<? znO7ca+S9aUT@|{rE$ixOW8tAwd%)T*$>H0b#7WXQU@yO?T@?h^3@~|8$JunKkCJ3( z>^KDL>IhoePka2ay1b@>zJ#RB8dKafxD955ZPsnmW~++vSn;&~#zA@kNcM(@&$)3S z*cRM2XEw&A7`M-R+-v0)^-4RmDI{+3u~utSjpdV;UFqV9-Is5mn+l3;EfVKQT1><f zxpV1F1;tf}D3_ct5l`gK(M)VX+WXvU5+>qF>QLNgwK}1OT#9%icP?OZwv3CDeT@w! zTG?=x@R#?Gz3ta{YSNZjt`fEP&X=Sjhj>dwO<QKc+Ut=!1Xtt`Z|j1zl1QdchI~e< zv3%09TTJALcJnPs<t2Z~`};wW><<3J;8BRX%=ip2pGj3r<ftuZm|pXjgZRKdhPC&X zn$(gRp0mzn>SQUv4HI{U-g)7>Sk<VPv;)r7N5A)RNiBDV9+Pne*mdGAMcqVy18wCX z3D-R71@E{|Z3zbP6ktD#AA+uA5u#pFF-n49E4T%WY!rDz@{D-vbmb4ls$j@AVm|~n rRQVfhc4pqPO|{q7hTQ+IQU`tk&{tKwP+*QZ00000NkvXXu0mjfUAJ-p literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_premium_effects.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_premium_effects.png new file mode 100644 index 0000000000000000000000000000000000000000..9a7830f9185c4c10e026613f8eaa0ff8ea106248 GIT binary patch literal 919 zcmV;I18Dq-P)<h;3K|Lk000e1NJLTq001Na001Ni1^@s6;Q*MJ00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91B%lKT1ONa40RR91Bme*a04fgS`~Uz00ZBwbR9Fe^mpy0{K@`VxF@B+_ zVEl-Mpp8jHQ4=BxRu+OnD(x)oBI-3-iA4%OI_)e4C8iOALK-E9ij7(XjMzj$FkeQJ z(@u=%@4vh~HskK??A;}x+=E}<yqWjjyq(O>&NVePq_G13&<d1FrGshZ=F%LJ#!0?{ zv2NG}+h8qB!xW6>a=8g~S@7?`cn=+neJBsq+92_9cmzdAlHUxxfxY2;wEN7tFYK#H zldKzFTT&l&O%vkS4k~8Cf}~})XDWz*)v(W!UZDLGvWOm_D<z=IEvnh=h}gZfADXTG zG7}l|X`W!Oyv4B-&cmbyNz2w=(s;V?R4ZZFp6-|;Xt%%v>+?~+aJma8LHVlNLj>N2 z?+}$Sj02GNFNnrO+bT+XNg~~rzAWZ}b0=JZA0W|6odG@NS*S+t*(wL;5DBz$sb|un zq6tt@S}7H>1GKTfK{c{KP(Sp*RggWfXu?Vc&ds2uy<<-{Lc89gJ+`@09py0`FGGtJ zqt{nYv=nlxJgGI3UVELU@2KE0`Z*-|S(>WVZZ|Sm1-BD>JFJ2|F=O@Y+TbQjdh$8f zaf$4CH*ZowpIyfqZQTNfVb;m>$+6>2_Rftu?%-$S($z$#{YH3cx%HN9im$-w#Zl)) zz2q>7+F$^-z)_Igcc!gu5-_5u8fA`nooRW?BQ0A8tUkK_Lck%&dgUObEGp)vW<(EJ z?~vK2{VR!hlH|H2%A#K2d<23Q2HgrpkVv;irueIw^p=H=3t_`kf5lIy?>Jm!a;=Ek z;dvuHu71da|5u+tEw%2>S>%bu4SEI*%HK;!xE`iG6Nhe-G}eILDy@K4q6krut^Pc0 z^(sbAINyRenW9rGFcUXO-&5!bC!(Ec55<1VNV1cJm%^l`br;qhrk}g;JU;qOw;#ga zW$S3`Q}6{oLLm6g;#<Jzg@Wv0AmLAJLHO!Ie-8A4)y5x#S0pQ;1F`lfhDehF4naX_ tj>|I63h9K_NuBMjT9)b>ll*Th@CW{QQ-ATo#O(k8002ovPDHLkV1o5?n~DGc literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_privacy_policy.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_privacy_policy.png new file mode 100644 index 0000000000000000000000000000000000000000..dd1fff2e09cf0daa2294dcd575f978ec92adc23f GIT binary patch literal 1133 zcmV-z1d{uSP)<h;3K|Lk000e1NJLTq001Na001Ni1^@s6;Q*MJ00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91B%lKT1ONa40RR91Bme*a04fgS`~Uz0*GWV{R9Fe!m|I9xK^VtfZ%LwI zmxqur2(5>DDT^{N1ht~92SFhMDXb)dAR)yF3W_3nDaamrh@zk(dJO8V2qFq8unQL1 zMUlKkcJ)%*?>o-e?ChDdyKY7F!OxlbzW?{l?3}ab%o<8b(!$|z4kb!q2DF7jq4p$8 zCZ5hB(qTPZhOc1SV+Ku-pLpd2Gniy4oP=J8W#19pgv~HD!KvJGip_<6@C<DGgyTF^ zKq2gfcChUuj<Zk(A@^*K2uZn654Ye4m^Q}X2FNGR_A7yZF`NLuoqUb|5ET05M)?p{ zLJ!#X5Jw}-j!JSk(8|451y|u4m?j^z6;d7PDJcXOg6x2{E;`3xkuxdI05$TU0q%ln zdz>Xu9ac(N)JAZx-dQDffV%Uc1H|q-GYDSvB;oK2r|35YnCFa|tII5D@4ze->@!7w zs6V3WW}5Zw1<h2!e`Y~{bBBiG*`eu5G+=IHGJWooBhU{uR-I8b4!mSxB})8hYRx7? zSqx1x$cuL+n3kmmdZ)aheGiQ(QJR@KnLdkYB2N}0_7aYIy<dOilpr=V-i-fsEhya- zCE8~(4dmzrbki^ASkhzF$yMXP1^HfAt5D#O#cV=wN{RYuD_BgYPf}bvq(4Q0U4V(? zy(CZXId)8siB-`*2eR|>$=9%$r?h^i=jinddOiwX0kIBSgiqc>VjrN)CoV?|eOUWK zUrv#}Ml2Qd%l5dhNSuiDyKIDh#Es2(7097WOo~<OLiCq`oO#3~cdd^3wZ!L%P}x>L zjpsv9r&Y8|Y$3i{7*-lt+zyZv!hqqkpEq_H`QSB5FU|5Ofp!qgH-rbZ-)xDOgWe61 z%O%uSZ)#nA#1~Y;5bYF~&hsO9pu}x1A@O3cPlJsvz3C?}1Kxw!B{SyRN3`FQj{jNV zE5b>*2%dmk!WNg#_M_bb+G_21)EK2)w$Cc#9&O-jg!r_mA`S=I9OwbDSCHk9M!FFm zkPKz+Z$V^Q%n|iY>!P$VZ~lpbh_j(vCCeqLoCr>`LyZ<yPnz2amm#SX^n*@*f0ZO$ zL?w{B6SQ^GiTjsJ#GE8<fKd>Wr|<R%L5u<VOlSpdeRPUqqy>j5PzQQZbiLnLdBIuU zx3B=Md?~ca&0HKSFRnO+N<e;bYI{d#H$*+u@X4+;gIs29cj!#+GPzbrLHVI~P0yg( zH?-S8z6A2ZTnEp=H2LR5hO2JUeu`IvJP>2qBLvPje$opu3oua{)IlfMHi%;vM4T4P z{Gfi|Q#dG5VoWNRVl^xP>A!{R9Lff1{}1~KqH5@#LpB=o00000NkvXXu0mjf+?ej~ literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-hdpi/menu_stars_gift.png b/TMessagesProj/src/main/res/drawable-hdpi/menu_stars_gift.png new file mode 100644 index 0000000000000000000000000000000000000000..ac47c72e24949969e1938670003eabf5fd6ecd6b GIT binary patch literal 1132 zcmV-y1e5!TP)<h;3K|Lk000e1NJLTq001Na001Ni1^@s6;Q*MJ00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91B%lKT1ONa40RR91Bme*a04fgS`~Uz0)=5M`R9Fe^mRpETVHC&bAh(ex z!zdcJL9UTYlgothAdQk256YDCU`p{KJSZZU2M;cZ;RO#K2ql+LE{Tv^8P_o`(O^h! zgBi!~zt6X}Z_YXU3^O{V=3l?F*0<LBF8kYie`n|9w5oLnvakd3c)SQszztXn9kVcP z`YD)v0DJ~tyV6%@A<8QDxRpG?ZgYMEwr>`uPfWpN9iSgfg0CPggtqWZ4O9Wcphr^+ zqekP+f>QZS)rWbCHQ{FX1is$U=&VBQazEkxD(v)dAkQJ53wK<d%x%c^N}^o~m#9aQ z>S!;sUijVM5&Q&SA8B;6I<v%9xS|@YkXBeeqowd<P#%vTz!pH{m5|eJ=D{ei9i5>G zXm^Ej*a5FWDs#wJOgU{p%0+~WBxw)uEBuLJB7;NSN-$}0?ckOLoUO%na>(~pO`~ht zDM$>2x2{@m(qY&RN8vgYSV#PhupdkZabhsl1>RuSz+x!!`sqwlY&ARusm$^zmSiDZ zQ<c*X>|Pk}7t`M0@-n-jz4F+}3ZVBe#qZ<$<OahFkmmWh6rX~bL0LSmU7DOyK!CXJ zzx2w_)7CA!s07l3e--p*9k4q5V$g!6yU@jQX)OgiRf$en0e(J&SByUzOyR9mJ;7YC z7eqU}0NQ$E*|VzSpu5Fo+xQL7AMX6~bkG$qrTqZT;)@~pH{lCN!xAR(8;iw0<JG&^ zdfL13d(y9$i(PW|1G(4Ek2Z8X2GT>g7kG_-bk)Z}w?vwdJQ}gbK_+oJFUQyap^!fj zq?+V@Y1<S|f;#nZs>g1D*>K;*%$&xFB@aaGh!te8=aTzHwi#qNY=m{7TNDVtJ(Pit zgGG?`Q-pYLu(wsOxB7_ZAXUO38#il~Np&EGJ18G?l83RZEv7jWrL2;bmoU&=7y<g9 ziFy-B<;0;D?!#d?#9PyV)vG@eQvrEud#b~K33`6^QUBP>{dO5Z=gb*siFC+~u~G3y zz_$zoekZpH+F74qhX~{oxD0l{UBSNqmGBdyr2d644yJ<IUttzkej2Nt8jBe!-${R@ zqhT7@xpV@*ls@&?pp)&4zG>zM!N2^WUoljHq`w85EbU0-b((JlJIgi&g#=2#)U3tW zj11BTbWzeCi)XUbX;G4HUw>_Bg<43rti@s+eOgF5l{+;xAT`=4JDXPN4bs~rollq+ z{~mQC=o?(mPe$?F=zs5wD=OB45)V@1HO$!gPm)YfP2C$;+v89AP;)h`XS@2r9MIza yi5ROK^i|O4(;{kc)w%lesG8Pz>kj<4JMasJ3PmuRNzwoS0000<MNUMnLSTYAUISqO literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/large_income.png b/TMessagesProj/src/main/res/drawable-mdpi/large_income.png new file mode 100644 index 0000000000000000000000000000000000000000..e94c34caad5230f23dfe3993033099b2c195495f GIT binary patch literal 978 zcmV;@11<cCP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91AfN*P1ONa40RR91AOHXW0IY^$^8f$?JV``BR9Fe^mtAO%VHn5vZfiug z87E5S<G>DlOoR|^<zOXpW(UhxnOYohFlVxGAP0(R&XkW5BITnr#)+aRVUlFS90;-b zNapeTKkob8{oL>KJ|44_xazn2zOMguUC;AA?|t9TyMls$-7<rD06`FxQ8xu9nfiB( z-I+}0k@1Iq;G*TQ39iF8h_jajkHFj^y91gP!A5umu6@FJ2>0MQ_&0TxSk-Uc2n|L< z2UvT?qy?r!<m<z)fR%6#?9F^+-Z-e6pm01q0NH2Q4kOYuBX1hq0&C4_>asahmB39? z{hD!6R&*xB3!&TzWv9f8p%tuc$cjIkP_f@sePEoCFCT3y=yBWKkdunm1~T>1&Pg_s zs-Pca4RP7TheI7)0oe|SZBATI;x@?I<N8HnBpnS?*=`ZRIB2usvB_}<J&8k5;@1(Y z2K%9w_<GhSX%u_`+0v|FCd9Nho=C)AKr=MKDX_NNual2>-Xz>-)RSw=$s@SjBx%n_ zwwY-%%jg<v+y?k-Kxe}VFTS2w5BL`DjAA#L`C{X@bF2oQCfD7D6J4GB!(8DEu|7A> zyaRGR46(?K;)jpPe*ZhefcJ+Bl)_u{QNA*sga(LRfVLc62iF_0cEf6s5mm>kY*$2Z z95k(dx0&)~osjp`Lz@qMAlvM;9GD_p4rR90Ks0woj$TY_;W%`GYc07IKO!X6!Ud>^ z%|SQ_vewvyJVElcIPa<u>&=rE8!q&s*Norg#Y30om2dzeZ#fp=9TM!e8i`&MSDz|I z@wj}6XzM_x?{YPSyNIz2>|3)lt{!~>=vW>br>BZhJO-YEHN9^2#?(14(`i@dHzPI- zx<OX&>%ZjFK%aImxW{oX{zZuWB}BXtWZFIYIhSlC=>?+IdJJ;Tc3X|s3bM$Wu(}=5 zw}n|ju*Jp_N0POWbgarwgTGkAdgAk7A0#e1=`cC*qP|E$J=ix`t*`$PpBq>K+IFRB zFG%i8&{KO4%hJ}R&ZDWe;#t@OHEtpP9I&r*rok##ACfsu?Qcb0KvroRGoK3DZkJ%8 zjVFznBr#5-@dV=9%hjO&h?+PF`x*b+-}wZ-15Fzy^d5B9kpKVy07*qoM6N<$f;IEC ArvLx| literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_arrowup.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_arrowup.png new file mode 100644 index 0000000000000000000000000000000000000000..d59fbee964ccd488d620069a1aad7096c699c3b5 GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlfU?eKJQ4DsMi zPLN<-tmu%*VerWK!T<mNKRQ$@*JL#mJ(rM_6c-9;j+M$dsIQ>L;+J^cw?*T^6MKh0 zqFr|zO{~Rw%tby#F`MwD9L!Rv<2s_yJ?BH#0i}~It~{|XgaZyRcGxp~Oe@l1e07+w zp{=pTKwO1;NoeDYocRe`8E-PpifGDXysCRJjWJZ0G3o<v$MR%u`vn$H3z<xg2zQ8X zjBI!|*?Py703E)P1{HzXK{*#zFfLYXFlJ%UJ@=YP;>IOMkY7Aq{an^LB{Ts5x5Qyj literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_bookmark.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_bookmark.png new file mode 100644 index 0000000000000000000000000000000000000000..c3c5cc552fec45deb7be76c0e55e1451edea3fc8 GIT binary patch literal 440 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgfOv%&5F~o!S z?UaRnM;rv&ZVR2UJmbkDF=<wn1v6Xc(^L<G2%#f8z0aynuV#Dqs$hqghz(=METL)n zX1ABze3v)-S&I5kqsuev({E+o(wLQVhHXlaq)33{{LW<!XH2!XP3G`FIkkYtdWAxY zao6<#XQ|^K(>-Ji9|#`FYdRDbxaAj1dUR%aM?vzD&ghG07x|x=*&ADGdeKtu>v^%? z>!NS@?e{x$Jte13>cZ}wnXc{eg7P8HzYEPWdLet^3ya)??zH<qWX?JF?ltAhbL?a= zZ&&}pxRJl&^2DJ16_O=sTPEGBk~U`*>=deQdsZGRbpP<g%rehETuG*DN=yn4-0C>G z_pq$RcfWsJ-!4SlyR+i@VxL6L?Qs)B9d<W}@7UmVIrTr=KgQ)w>dwZw|L%c8&C}J- JWt~$(697;Wq16BY literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_bookmarks.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_bookmarks.png new file mode 100644 index 0000000000000000000000000000000000000000..c736d15760703eb3354a996592eca224c3add8d9 GIT binary patch literal 517 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgfEZ@_`F~o!S z?G#;qW=Dax_fi56I5>rR83F?`1Xvso&3E|3T%fSR^|62ouVdn@2_{oREd-WuHnFHI zTBIxg^5dTA%{h7L>r+G*O}4pvcV>B7+4ptRRf4;BHtL*yb)k{b$0*Y(V0+clRP{rt zHQx=mb0r+6o)x~+<R9UC`O8kPITs$Vq}-nBq^^-W&vD)3ZOb`kx9&*OuF?M$HSw~J z`&y-){fqlfKe}-1V%1k0_Z1#%>Tey`yVG2(_WHt~J~st-KXcTN+8M}Op?Y0&Tbig& zjb!rdW%~2lo@npA9Cx5l;GL)O!E;lEN|`>DCAhLOE#oZ{{T<9)wyWWrfSJWNxyQnL zoGx78J*#lEZhgm3A(I9Co3d36%RYyGJ->3xLE#D2Zhsh_Jz$*j;q%&^3I8}0FN@xt z<;WFpCA~X&AOF4dyFO-fu5n7e_|m@fp<J|E-?|qZ|J7bJYivpGRkl!De_SHpB;%mK ny@$;E5_ptv^sfISZ@iz;naA|S=LY5+P!xE&`njxgN@xNAkGR8i literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_refresh.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..6dfdfb7b6b5f77863b8e90c98ce7a61981021685 GIT binary patch literal 639 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgf?4_rRV~7Xu z)2ZGXE`buqpC@^7O%#cCiR+xwa-wO{C$BKCvTI^y%Wn8ao(S5wZG(ulYO4*GcBP9_ z<+H0NIzIkhw)67bb32WT)7Ag~Dn0ji-~aM+w%_MfuRHzqdg_rV2L%C-L%}>#Cve$W zv?L!kVA|5z*=T%#Iefuo%Y%j<#Wu{Yx&@qzxIZ}AZ#m51bI`QIZ{fK)Ep=vFW?lF4 z-o$M8P_oTYZlcm7O#?pr4}52n7R_Y~+_i2+M+<-6!Vtp@rXN-hS>+Vv%^t=j^Pb!1 z_DTBHR<_v+b&*>$1fQ^l`($_BRE+T6&zW{pRyys@x}*C2=eX-4T2)`Lb-s68qA`Op z&^5)azSaNU!I>g0PnJ*puJ|fw700Q~yF-NnnSM-Oz~+`HdG7&>(Nv=*^9}1%WLQ>& z+r_*V^ZB!y=Wffp)7$(Cde<K~$a_3>tKSA^SGm(uijQwxak^FOw$mhDg;^U-Z>p>) zJZ$H3Uqxcu1MXG1$1b&f^lv(`*mQ;?&r^lx6J%0a(`=%;^I2SWKj?eL`^?~L!<t8& zYzKeMJM{HPaRQ%<`vhsfD63QZrpi1sn^k$Dy*Q$Q`3HmK3c+6v|5%G$cs9DqXFL|4 zoN|z5#&f&794DvWm(F&1%eBUpXVRHc&MA#Ded{-zmA!xQAM;-(oof#sUHMY902KM2 Lu6{1-oD!M<2s8f= literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_search.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_search.png new file mode 100644 index 0000000000000000000000000000000000000000..9fc5a3e1326113ad188d10f1f1bc6d67575a21d6 GIT binary patch literal 534 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgftijX8F~o!S z?c}}Q%#H#_i<PF$QrjwU@lezyc5UgmE}qIy@;6SH(zNY*XZ+T!{~MMjRIZI$Q99}K z_eXj<+vP3!H=a7M`|jMz{Iv4?ZC9gi%#l8k^l_7ps5R5?1m>QD+&fNgdegXZ=fpkS za*bQf)#jHStYEk5)lvxgq;J5Mo)Ft9VZ4F0NI~1-cety7MrYZ&C%X*|H!4neYUp>N z|3QUX@^i<g$1UaAJ8X~7ou{<JXwl8BOKyDl)mA<0k#1<yt7+xCmaO>Ud|G{u>Wj9f zYvH;J!eSEBFMiwV^s%8r`1o_*)vQ;ZuTHp}{Hss)@uX$*Hh#7(USH|8P?+g<?rqI= z;?67FRivvNWqwTk6U34u@<^q&!)n0<sbKAI2c;&&t6w>{R&(DR9|<m{Eau-yQ*&1J zZ{&Q;aihH8tWA`P!~$P?jhdzpO&=Lnh+ftGweb6q`M#GlUpp^YE&U)|{NLP_92YoK zPEIyi=k=&wzv$gNvmg91PIGs@n>U%~!9J-g6Ll@@%|GxuO|AU9U%a&w6epgpelF{r G5}E+x3Dx5O literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_cache.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_cache.png new file mode 100644 index 0000000000000000000000000000000000000000..a288790a9d73571f2dc9ab6c6ceee75b05d7ab29 GIT binary patch literal 760 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDq2jfhoz;#WBQ# z_v+Qt-lBmr2MX6~y5=d}>gacB@?QO~p-Y2fvDm|93o=3-0~{|X`E-e0+t#~MG)eEa zhX;!zztc&Ug&BbY2V2*i5zEv+B^S5<{_5jxJB!bDa{M`X+_L!Gdz*K2W+q48OzNt! zi|@9xIrMMm*5b|L@*gYZ=4V)2UDsUb@H@8VfI*#NwBc;?Gh3OTa{hG+o##})qcdJI zN4qq-fTz#AL+78b!9j+&B+V#;)>nu07X%zNk^Z<m{)55flRihLyZm>1W%j_}?c_V} z7umQ}ZkgbHv`|MSid#0R{)I)0j8-6Xc>Sd<8`yKF)b8_Mqa*n4;N%O(7<OxxKh(YU zNI?6a<KEThA6Wg<lUTxM*Y&%C>oF_eBeQv}6A#O+S$^nl`LmUg>u!9qIJe7co#HIb z8~gazKV0Sikn7Cu=KBYGd`}$Q{y_9zf=F^jU#Q~jBIbRMxz8!y+SdEK+MuT8Ws_gt zB55nW{So$R>bn}G+#g4^&d=~PwUU+D!`;?@<lv?kZL?p`i#a4HF<ab*@nqhs1$#R# zf9$)m_Lyr;>-rbfXTJNM<#D`ZRdVRKLF1uQkA+*RZ@qq~V!Kf9qnDHAx`PED_||y( z^o2~?EPU*nM`__i7V}f)OXan@jVEQFcze`3L@nJV%X1f3{|niIL%tTxN7B7(b!)26 zxwmP?s$4WyWk1|&oHyl_W3=?2t6!HEb-nV8YqR~Z_C%tq$D%i{Ux>ebEoHaw+l6_r zPBBbRtaw-Qn6XDVqA&VG>Iy&80*__Mtb7mD+#c+AJ*@mx`p*TSem4H?R}Ln~O_Iwi jm2i}Af0(@Pzx^`CX;FK299J+d1f@DpS3j3^P6<r_43a^l literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_cookies.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_cookies.png new file mode 100644 index 0000000000000000000000000000000000000000..eea1499b680fbbb74b010b98992ac9754c77af74 GIT binary patch literal 856 zcmV-e1E>6nP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR917@z|H1ONa40RR917ytkO0OB=utpET5!bwCyR7efIlu1ZcQ5eU4q9xiy zv=N7-NNE$%szp%*VFNUf7%jp@Ry3??5hb<DZJV-^!d!;XLL@1ofg&rST0|`hqzo4= znxn~j{eHK59@poy=OgHY-#y>?&i{Pp+%pvwB`lpzPk|Qbf%S=|e|Jf^8s3BU69x*+ zN}p=zg@>>;)1OKcjKCdO1l{lvDl(!8IOwl}le`a3vZ092R2YU^P-Y&=CGZO#!-SR! z-3rk5!s5tFr`MTmS6o?0SqHCRGBm?W_ylud5^RBKxqgPY6I5^CHgJNK4$uk1@yu=9 z6cXUq!&~?YFF@NK+CxdKF=|PtcgA_{QU9}tIQ{S-h_g%D=D|t04q9st&0XSyPzqJx z><>gboHOtRN+7vJDeCnh8U9Al8jVr9gdT)vphW{y?v841a4ZZRTWH8E5x&dgNeCO? zhwlj~hZ^_>H{c0q&!H8rz|$ys_z<`ZuJwWtiw6(M_tB>9h~pjj?n^cJryIa^*S<r4 zGLOIOjE2BjwZn4o<oI{aT<eLG&%rmzXE+M8LNff7a1FHP5RXa%)1eF8prn1E5@zlu zx}pB9H`XO|pkq)KPoM&S1lmRo5Go3x3ATa9uRQK(^0S~tmyfamy5I-+_orbGXv;#* zyd`3naKK*J;p`5?X2S{aG`a$Bpg3DMrjBSnoC25O9sKp#puH9xq<c)VWB@@ioCnS1 zUbMQTCYO(9EoiH9wP#`o+$c}VO_-T!$m5{B0I#7mk2Jce=MZ{R*MI{qg(Hx2ZHap) zJU#7slPf^zX&MC0jnn$Z>rC5m@ULsf(~OBDE`!bBsThPAL4@ydJZPOVT)vLbUQkJb zPSAXJy5Kfw`@y&A5_lLY3rZZsbo8b5;$4Ix@X^zT!8gf^Hu`CZJEuaDLQ0aApg#mP iFa*7+RO%7s|F_=@R_L3Vl+RZH0000<MNUMnLSTYVQ*k^1 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_history.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_history.png new file mode 100644 index 0000000000000000000000000000000000000000..30af26e26b663c81d9cd9151b99c799da742a60e GIT binary patch literal 875 zcmV-x1C;!UP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR917@z|H1ONa40RR917ytkO0OB=utpET5)k#D_R7efImP<&LK@`XPZfcSQ z5kXwMK4@dM3tF^LE(B2|Rx8E8RYH*M3ZtYJNo`z6Q1$@R+_{O6D1;t_k@SEfdP#zj z5YeIs5oT%Q??29be16`0y|(bc@18Sf&YYP$b7t-hR>Z^@lfbnJQt&beg3qy#|7((X zCA7g$h{`(}>3p&hmx4if4$a{h8cKc#rlAvRpaSaQF8qVma6lG=n0xR8p1}-M*-(sQ zpyYO?=rvHUPILfWFbUOJaw~2-NDjj`YZ<dg9SP93bo#;A`$4NNa+4Hck3yf1iEH{E z!beyI?V#~VO|TgxHGU9wv-KEL9PypQ_sX}U8vjlge^7qxCom#g6{BjAOw1|!X`Ee0 zVBl=^mpMDGPUH9hSBWo0Z-pCRXG`Lg*gbc?4YVIvuQ5Z;*H3#`wgkHYw6*U+(&GGw z=9=z+ol~W#D)Ot9TS;o62`WL!I-I`@dkVCOHy{~<7EqqIHi7@Zkp>-#s>L2`q)*A8 zf)bRt3A(X=Lkd)7`#}3H`2)B8_)z0)1(o6`=s=HxwnZyf@+~g;Mr<Yd1!rKrPlCMz z?t`Sk`$LVh8v5Wh=)w#`2l$m2Vn2p&pc^{_nn>SVhpTNZfoW(D6X#<vK*@VRvezZ6 z!tRB?pfkA)+6hTs&x@U#U>)j+Mj<ET3&K|c7eHIAv-}FW0=b1CZP_KzHhc%W@@%8% zF9%I>EnAHB6Oe!bkSO^@sLVNtPGagnvMXmS0XisEiVk^Q&frKVvDe`X6h_>cO@dTS zD$(7b32WgLWZYZ)x)Z9Nvzar-yablQI7oDGlAE!xuu0!}(6=rRor@U+7egbcD#l^0 zAA_xOJgzp{U%qbNza&k9D<ILk(+iJ4as*bx5U3cEOG@m68CU=Z;1*1PZn@+W=uOf^ zTlh4PVBYKL6E3DnRzS=N(C>qOCkFZV@dCa4G7GSkoJ{~V)6@U}002ovPDHLkV1h5G BZMgsd literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_recent.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_recent.png new file mode 100644 index 0000000000000000000000000000000000000000..da26d1e52b44f3eb5d373d0a62eb1bc2197ef1e2 GIT binary patch literal 659 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgf?60SbV~7Xu z)v4C{E{+myYrO@86bsjOcwESES-g3!lL$wr_sYOdr{w{=OEvy5Z0%6U&<N4%bjk=2 zOkwThIR1H^ar*gnH*Ld2_MF^o{JHl1nK_$_EhQ!Y$1YqTULd0`>@RU^A>%0prs*3v zwHF4w=rgJ{tYDwhaFKbc@s74~^B*pjoUQlgF&3+xX%J!Lz3@W5p^TH~kf6u$fXCle z)+Wyh=HJ5n)U#LR#OuUk4|vxtFq#@KyUWq4;m(w_c%gj#7x}lDf8UyPqSd>ir7FID zy;qI=vAqrJoocw2)Wutbsa_QJ{d{U;M$Or?`p4bvqn~s=5bMjW{A+vq1J}|pX2+sQ zrA%KHw+ob7_^rJawIC@p#x!u=ruF$9&m9^)mjveRxF<H%%B5;)<%L5bhb_NyopQdx zG<#EyqxmvsjnJ3w!fOs2oN+eO*v4zM)qBDUZl<|5M@*imtL@)n`1GKZ#LF#S%JFAd zI<6mF$MZrY>aX3cSg!?k`hLoVLa!ezW3F3!SHtEocg1TD+q{Xs^0qV8X0|fwO9UKT zy<M{D#lb~BdwrRYar+oMzG_Z$J1~RwY=Zr#V=uHnzFIY5QoQJ~eodLJR_C-*J3DWC zeR>&NCe`9+mC~(n_b^Mw?W#q8Kfk`!b4X!V<W|w%Ev=V-Jz)8FoM*-1>ukSLUbX$* f>#x@Qx3-p{W3Am+spUJ?fD(kKtDnm{r-UW|t4Ia} literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_cover_stories.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_cover_stories.png new file mode 100644 index 0000000000000000000000000000000000000000..b0fc834547fb8a953b2015b0410c48c15c47ca37 GIT binary patch literal 710 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDq2jfyuzr#WBQ# zck9&i*}{$@$2V`yY@Sf@A;{*)>?<OHjwenEXnf(n;1IZ{f>(^Y@x@(xhbDDLLH~Kx zCwDG&{Ge1NA{xva#=lKW<o2R<^WPh7ez(b9#`*Vy!+R<}&;6cOo|ewt>TGsib^rU{ zrX}eQS!_Pr<UcUd4|l$l`Qku!M^wBpr^y4=80O`zZLBi`+7(Z@U1;`RP;pYkqWQmM z%K3**GZfA{-e`*b!FJkU>eBQzJmn9pZBAWkEp&-mIH{gtZ?U@bYNyLPlQ<pLyK3`K zx*WD(mbIZ#$2N{|#h+JLwl3T>yNvJOYK2D;EV-9o<lmG@Jl){eZDz8j@4rCE5*e;y znUcv1uKzYuQx0H`)HgG5bGK~r*;gNRS>1<k_rh#FOV0~!{ug{N+N+s$9TmLwJ-(lJ zNy&vQ;d<$eKV@Aya!w-J4*xCI91fnbG3!s|jppwKa$D^8CtS=5ie?FSShhaYJvUS~ zSwExypyiFm+!?`2w<a%W-pJ3b7It($dp$qf+=9s;<s07U-QlyjFMpw~MZUmrm)EaZ zzgfThec`;9f78tseycAU{#_-whTr{6SBS^5@Ip(olO-M68@X~C*Y%cj$~x}mpZ!Br z`@nYx^R&yyE=3&^f1rNCij()?k<f_(f0Z5jR4bU=gO~F3l-^vbcA6__3G2G+rJT9q z_Z*b9)0O%n{Eb*<_9fopf4)m{vK#x85T(Gl2F_c;xi#1Hi(5DH?qEE+CdTi7kdVwD gfBS6L|I+`N9g?0bE__h76O@KLUHx3vIVCg!09n=+Qvd(} literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_delete_old.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_delete_old.png new file mode 100644 index 0000000000000000000000000000000000000000..2499f8ec06f27a4ef7d83e77ec79898902561676 GIT binary patch literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgfY@MfzV~7Xu z-l?|UM;rv&COdz)?If@zK!@d^lgQem=j;>8e=)mk*uHtw)@_###jV@?i9JG2ENNkD zl-#MGjCBb$&+^iHXXogZ2eQYNl|8F1H`=Vo**r(g^`gd=MCbbCy<CSs7%#u$|M)>% z0aMIw#SJgQ&5UE$ay;37fXjj{RKbkH?0{VaL)`Dc26d@M&5qlXZob)2cSNZ8$LWl; zB*VhjJ@3Mj7g`DY{*b-EJy~|0;I7E7Io<cl93HeP%|4>05_mxFLY&wI@hO*FC1ti% z^UN|WxDdqtlB1)Pd*)V_woNsYS0AVrwa;7n<Jgb>G+Be!a<5&v<1c-Bwd&f1W`)%a z97m4vY^pg~8sl)J(ud1t=aDUZQ<li?kh&k|cI#Tl7rq+yT_5e`18>VdkrP~>ZvXbg zj?z8bcHiH{ESvs_@6GlT)Bfz!5Dh(HJA2Rh>v_VgNzct<Z_Q;&+TFQCouPc+!j46` z(<hlNnx*Kw>q*bvqR{M>oq`{4?t7kjE@924QyK4ctnW_z?=HEg`Ep5@@Y4sG0j!m4 z`3mn^F59@Ze#;h>MTL*58Z$*YPv(D_b#7_%|Lyt?E8k^v)NfJ-#h|CFpUXO@geCwc CnCqwj literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_premium_effects.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_premium_effects.png new file mode 100644 index 0000000000000000000000000000000000000000..7fb66d1110dc27c3d1efa03b13b7d91a522b3d45 GIT binary patch literal 591 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgfY^SG-V~7Xu z+bO=<E`buqpZ6s>noQmvAjR!9d5PxinK^1d**0x<+!)}sN$4rJM)yV;qwbrL8b|wD zMUxWEJtwCq&)hTh_4g-!bE{_;KihRv<NvSHb34!fubfx??lfoXzpv5$2e!S{lW0(U z(YUK9_gUbHDcAS8PfFUr$^YQ0w)mx>o<b?F3z1tbmZ@<Z*4fkG$I7&}fN#FSB(>;c zYDo<yK8Ivqd~sCZ+`EDMl1rJ;+8YfHEJh#rSZB10%usRt?l|j&->bbx51(pve^#k+ zNK?jv$7d5qpQCcmAuC^@o~pzN*6*8beoWo-A^P~7t6|3tSPvUKpV7<{zKrdrf~c*f z>ej|zd{1_1uaK%Y*dM<49$R|Wh39_+;$_5S{%<wwUwf+m^OKuJTbIfxT3_HjZm=*{ zfsv>CLAblbZJEtA5|1C$YQ3wI$a=`@b4&RK<EF>F$14s>u>Umwa_GW4l^JbyO}C|* zW%Q@^b7y)NxJ_OW7nh`{zSc%;XYobjHBLc$Yp<7am<i}OZ2r<D9Km*x<3wQ$^P`iI z(@LHDY8<C;I9AnqQAdbPkx@78dAZ1ZR#%UoAK5<z*a&HS^jE26+_}qh=Cr>aWuVCP MboFyt=akR{01iRq_y7O^ literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_privacy_policy.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_privacy_policy.png new file mode 100644 index 0000000000000000000000000000000000000000..231a7a401b984404cd6aea9d2c64f890dba55fc7 GIT binary patch literal 751 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDq2jfhp3{#WBQ# zckNVbACW+jHpzL6DnSwxyCNb4<SsHL>-h8-wuvoVsOqF7+A6wm;e})8BzljyZMfv( zd&RfGHP=MMLt*1Yp-0LJ5~9sEGW+XqSX)|eo?II4|LN(x-~XTAnK^f7`8DmIr$5y0 zpLt1dMZ4#Wk2d-J8-FBRWRqyxF3`)*aed+11=<$^nD<U-iVes)AZx*VJb`7}fulB^ zc}o;OCe08n;N91pBt6f;JmhJXi#_jlNAm?Y8h<Z1K0~%6+`*8&xj<vLQl(q2=$8Y= z0X|1o3C1_PTVj+Zrf|WYdw#6<N^c4N!|r9rwq5M<yq>wLtoIvJmCEXKKiUJ$CG1$M z8TZau->P$F@rrhHgS1~|Cr{tK6X(!=>|CtxxrwgXhVu?<Mi{tWs-N|<&g-zb$I%`c zrqWxc!3%a|dC%D2Cc2t+r^}43Y{jyxc6Efced7=@U%On!m%YGn)#(b(>}v`8_})Lv zSawr+KYLf<2c@r5GpzpduaSGwk-Wg-k<TaZ4eY<(Z8^*vVAJ-&b=I%Pjjw+%_TzT% zxz}@3yh|lRJdwLD^^ZyNrRB*M!Nup+2|kgyRb)M(Z&pV7L+(9I%z^R6UxF&wS9Sm0 zwSfJxo`%)p?gg#w>aQ~U>=(Ex{i}#!PE-EVkeX3cwQu6B$qUwRC|h*Su_$1{`OR@_ z%KYzj2P{5%-NF3Y#66n|HQuz}U$8!V`^HT{drmKyzMoTk)0rA!sdI<b1729yANo3B z`yn2Uk_}wHZ<}zxw2x%>>i602(QU{2)+}@Tg9WSgt5PP4Rd7^Iv=Y87@Ndx~@qhBY Z^$brlS1>9+aF+!oHcwYSmvv4FO#rz<G`Ii& literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-mdpi/menu_stars_gift.png b/TMessagesProj/src/main/res/drawable-mdpi/menu_stars_gift.png new file mode 100644 index 0000000000000000000000000000000000000000..2d4a5a8571a2b4ccdaba2e3d2de27031942c6d76 GIT binary patch literal 732 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDq2jfyvF&#WBQ# z_w8hF579u0<L_5^CRF(bFke=2YBmVWNX`4SHA7isi<izF7C|TO?rv+&@V7Y^mBQ`B zI9VN6>axg-h+I-KV!5byaal{;3D(j-f0q~Q8DC$lS0Y;XVfOpVxchU2yZ>%~^!uOS ziV1cfoQ*OSb(&mueQ*#@Jj9aYwEbddt^NTQ)ejPB56t&mT5{=Fc#VM8q3(y%4^~&G zThHmfp)&tqd<E~~0!LP$+#hwHn~gUr4H&Z?H*M^{S>rN!PHSqxyQT`6EtmZtG@30j z^RnV?Je)36WF)@BC17o2bLNa@H_?TqvrP)QZaoz7__ctwh-cIL<|S&I8fLC|8GlaR zZFxT5w@~5zd9V5&)winHv{b9r3H@gN)376(@vc;7-JGuKUOiXucefmGTy;G1eg5L+ zlNYk4E;)G3^|wg3=!6>$c{^AuFEIBf$WGZFl+vS~G1uu`N9R*1*-(+p=dZr9*|c^W zr2RSnqR5(Qx5U22l&cEA`Io%TsdWh!u#8-m-`y$So~FTYcavGi9^vz1-jmO`&23Hk zDLLuT{}+|_^k12*6WVfFXTl11?<bQR#s3*7h|4v|-O5{3{huw%RIc`D;F@iBw|stm zFvI-u1)k;)Li?PTy*NI%-MWBDZ*#QmisBpJjx67}-cg%p!v3|fC5=zm4%)U_eXW+; z=ddrE;bYx|Em@7?2Jf}*Xu8!hd)$gOJ@R!^c!G!h3m%`{T;-j6RkyR1u9J#dY;Mf_ z)yh#cr~cZyi3=r?trULTTv%``#Lx8QfrT4`*|#xpu`Pa7mhNc{N?D$+elF{r5}E+! Ck1II< literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/large_income.png b/TMessagesProj/src/main/res/drawable-xhdpi/large_income.png new file mode 100644 index 0000000000000000000000000000000000000000..f30849ec26576103e8a82bfc2d9cc2fc0ee34c05 GIT binary patch literal 1981 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 P00000NkvXXu0mjfOD~{d literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_arrowup.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_arrowup.png new file mode 100644 index 0000000000000000000000000000000000000000..ad3b42ff0c3772864239bddc14b668265058cadb GIT binary patch literal 471 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC#^NA%Cx&(BWL^R}E~ycoX}-P; zT0k}j17mw80}DtA5K93u0|WB{Mh0de%?J`(zyy~ySip>6gB0F2&*1?obM$m^49Q@9 zJI#>mkb{7$u;7|CTR*cj<?=n${i2g3fAH3+W7!p~2ffy8*&xUr?D5BuInl$XY;lU% z{{sSP<^R*}-RFH($z$cf{(?bv0dq+M-=Fo&b+TV9`l>IKzkb8`_U!k+!DnsHJk6-< z`xAENjCF<P8h?hl@f%%ZzhB<hZ_(-)HNz%at^4S$z7@Hr*;^K_-I1%UbK$L_o!dO_ zXP?{N7ucVg{o|#?x`2=mjBgC?{eO9S|HhpRH#j8z3NR@+>@DDOVp3WDO2kF3Ay~kb z;haMaQvuT=9tT?&QHHAmp^R6YW-#ngbjsLt@lC(1)yaQTIVP!{W|FcMFk|3cAjJ{Q zU@E|{L*cT-v{-pd{>07KIeC31us;bh3*UOKF(Ulxsz`N(ZCO&rnJfaqPq-|NE*9!S ie0hNp<mHCPd^U`#T>Ga<r2fnW1*)g3pUXO@geCyg*q~<s literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_bookmark.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_bookmark.png new file mode 100644 index 0000000000000000000000000000000000000000..fba8edcce229d128c99cd776e8b4f23974b06d29 GIT binary patch literal 753 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC#^NA%Cx&(BWL^R}E~ycoX}-P; zT0k}j17mw80}DtA5K93u0|WB{Mh0de%?J`(zyy~ySip>6gB0F2&*5QUV2bv1aSX{| zeLHinzlfvAfpY(MJr`Ya^cI>v%x7Ts%JIq2U}0))HQZK`(J4Roe~YbXh!m@olp|+r zCu^gJQ&Lj$lqQGrfAbRciu>>Gy*u~rij&nR^?#>5t36Y_dHU(It`j>;4_GD0{#b8y z;bqCQMCLk&P^FF664z}@6WGJMI$-;n2@7H~6<PMMM3=t5)BWGE=$U4cLcgGyf5MT? zf4lxkeOvhW?DW9oIc*OG@7VAgoGKQKo7;cd{)G#7-`;mQi{o|W4Q~b~9dg${um2@& zQ)y#lQ%{wntE~QmxD!)ul!xg3zapG$DwJNW-d@#yu}>=8^3Rf{mv^!(yFQ6r_-xtv z_{STkDP3wEwX2-IJ_*aNZ>!|;`1Cvd*_wv^wIXFqWlW8-8^Sd<G#-3c#&l4ZhbKW@ z;KqT3a_hziVr*<1ggJ5&Hte43uwU$x^!Flr>Fs@M?*xcUit=mdz0;QZ<5-?w#k&K= zI|4JxLnS7ci0zsrD!jOQ!%fqDD^7ep<L#mAvhz&J)6-ks4xC|%=uhPOV=db@Q>ole zKOrFBsq$(#L#LDh`~1)#^C{fXmAUT@OPjBp7j(jS$2+dT*H^_IniwlMs<mcH*SS}6 zUB9#J$;k?qdrp)7q!e+oT}{$um06{dSJASGA^cBo_T18)FRR%-m0EuUc{A2AUF3gY zxaCXQ=3_VRH+`R=I#r~=T=lT{GkJ$~*&ntfeUNW9^_bLYvj5I!m#McicTOzZ)NRDu zy1!)8B%yqnC-GA1i`Y$<&+d2dozb#y`_b6tlejF~9OKqU?Mv~_JAG#j^EJlT4qoha Y%<HA&nm+7M-wH}@p00i_>zopr0J4KJssI20 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_bookmarks.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_bookmarks.png new file mode 100644 index 0000000000000000000000000000000000000000..9787545a46564a235598758df7163ad8e3971497 GIT binary patch literal 885 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC#^NA%Cx&(BWL^R}E~ycoX}-P; zT0k}j17mw80}DtA5K93u0|WB{Mh0de%?J`(zyy~ySip>6gB0F2&*5QUV7l+=;uw;_ z`gZ32>`+6I<L_VV3y5xSn$7W#x#`wHu^16{SC*9-?Thl1ELKeB;No)?FPwUA*Oq^b zr2?$=O<O`7qjv4ExRE8gb;aAy#i#a8zq9Ag_oB(a>l~TlC(Wt;WUH>Oo*5_Qy0C=< z1WQ6$R$YCS`GG~Jc~e)x*@lbDSeZXLevmNP?US6a;Yz2&4emIz+r_Q_TW@Tc=`z1p z$SV9GqicERH<bv6P}g^t))-{)Td<cMXK}s~e!%5U`TC9{3=yG=K6iZ!D|h?s@sMS` zsP+Af@3XgZdnif<c`U8maNvW}s)GKEZC66gi@r)MjeK}6$GmFw*VAwIT|7~8`_^-f zO*0+R=7(ra-6}P05=+7VYb%VlZOxw@JDYRHvC<wLp9Ocl1;Z59G^DdQaaFQisIIua z-r?~6l6#6;ej83q;N8Ht&s^$Wq3{DM#qjLcm%eIV`6`?d$yIp%zIWUm2J1DS7l#FY zJ7!!kIb`#1)sBb3uljqU{H!@;Hf!~#|E@^dI#qMaED7C(emkS4Ia$=Q#jxzt{4(cD zWtJ?<v|Up~Hkm~PY}C{|vZVc>a>42a_N`aFeHCTwdf2ZYEO>L$_Nwx}{Dtp7t88}s zwPwYfd%_1aD`!}-9r;+RW%>5Y3g`Dme|H~vb=3E<=k5<R3ycrBObbrj%f{SO%}~iN z!CHJE<jKKr9*2CZPcC_)VLkhU*&4$MGa3Hc8SvRL1^?{%Aa!Heq|5vBgUTk<rk+{X za$B|aiLHsMN5=~LM(YQRr&sTP?{Y#fv0~EueaBzy*~kCjjK0Lxa0mWdN=@7e3iFrt z#uvPq@UHMqy}vEn9<!zIuRLK{8C?*dq%FSU@5V>guWl!FE%ouA`6D`ywO?kT`oS`V z=|+;;rF*x<NTzN0+<$9t!X9}UR^IsT&ua|IxOPlwubiVh_3_W9?(aPl4=?=7>h8yI z^F#art_k%CC+z*|8s<L`k6^Ap5Wj)X<$2BTz5H^()RxEck6AlE^JLXt!9q}y_jL7h JS?83{1OS?Jd`AEP literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_refresh.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..26d167380d128f1cb05d83f264787d1c18931eb3 GIT binary patch literal 1211 zcmV;s1VsCZP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NGB}qg<RA>e5nOR6wQ5b-oHgYX# z0Sh9*f{N6VjCu;%kRT{pXnCoZtfwNV*B&AwEh2hK%Ampsdgv*#AdJWejgTm%^+Aai zrNXi_oxb1Z=s$PP%-lP3M-AqOkF)*TxpVGv&SYeyC4B|bSKz<C0s%j=4+evi@ly)R zLKIMr4>3U53eOCIK;Sp^(H9b53K!ugxRp*6&%pdqn*qUBKqDk00~puCf@CJ*X$cW5 zlVHc;AdIsF?xwF9UP2%ALpBt{V#org$Z|RcRV*#hPmPd#5ww9*zS40PO29U$!GvTC zmcu2mExE_^PqSrD{|;yXxp3YE!+FpST7J+t47RHpGYB?Q;RN)7mKGW_v@z`|@JlHb z>G8OA3?=yv<v^+rz?&mWBz%;CB(3E+jhRNB`f5E$z0i!sEm6({=d!s<pFARc5qxFC zeb92-IH&Wd8t5|pu1X9~D`Tl%0pF50N#HXJ?tzv{8K>ih>bz@g;+7b#gnnf#%O>hg z8rNYQ1$^hhdlj#ndLg`3eJA6%86L){Ng2uwoAjC=_HM5cV-?8z!APyCgvu>;OGhut z<qpF`4wa;v_%DF%ut+<jT?0n+(?|N;-M}c;igrlk)i2*Vz6t*1#{CfTFU3c=4*Os| z=wE^6pme%Q09ASJ>K9G5D?<-T_?Jg>Ea|Zf*4skZZpv~L<&(ikjj8xm^2zWDU+17V zici}w-V{YQyqlRHQM3OPKI(6aIP&;h3-VT$PYLInnXVyO=PEktbweh>;2l>+J}D75 z7dAjOJOz1-3+`6|%FSS;%BS2Cazhe1kRQu<f@M&DV)t0aN34r`MLy4CitQ#2Dhu1V z8Xo<sEkW7C8kuM+W3{wRphG2_)OJt#Nm<o40sXu!OIc)}9NQ)!ds-v2cnZuhjj>qT zCh&wr|EOg5sQQRhxoEpU_5pGj;9W4h2}WcuY<t{#ckIG~Sh9gP^4f(-qzcw+jE7J; zBEJH$ro(3yJK+fgaH99ZU9{!6Fr`9_YbtrEZcI2J#uW}{w`l9Pbi%%EhWOs^h*xLR z^VEmK%MPdKJvnfxOpKkN_usON!p?_Wx(ZjrNj^BwgycKkH^IN$wE8o;mv)7p0g7?> z1+>)DNb3E7y_`8+&`zn#udvOx<c%YomV)e!wS1#-0BpM_V;WJSFK48i;00)reem80 z1HU?Oz69QZQ)FVY0a*x9Z*s=ujHeP>!71{T+nh+QQ3KkX5hREHQ&0&u+wb(ZfE=%j zOoBX+efDgyNduj``Sx$O4W^`ziO7MgZ26LrHyF#K)Al)&lDs3F5?s#vYe65w(2Oc_ zlRkp2;L91SZ5c!)8n1(7a?z1L`AS0NT*^L>V-xuYrVSoKBTGe=Sz6LpAbkbWSK!|j Z_zS)|5oZjJRww`f002ovPDHLkV1oB47{dSn literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_search.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_search.png new file mode 100644 index 0000000000000000000000000000000000000000..54b1c4c79115bb8d41045ae1213d85eb71b86fe7 GIT binary patch literal 950 zcmV;n14;aeP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NFAW1|)RA>e5n7eCKK@`TbNw5l% zs6-4{SV-yw2`FM95b_6DYndu`7QxEKkj65pQraoO!YZb>FbaZ3!6F#M2PldNl8CIo z4|d?}S@-U}b0@ot+yfsoXCB{q+_|&o?!Z7LRR*dIR2k@H25M!E*X#8uI4*+;a0VQL z4`3f`)oQi(wEZPGeFCh4cc7E(uwW4k_dE)msDYc{8z?Go*s##EATT}x9=7rN2jkDc zBd`Ttg5SW)9|o4Y9t1|^{B!RO`X*Qa$GlUFje+an1@N-w*B_aVWgQ!z`8~!i<uS^- zL7;cw7qGIFXMgE6Sk#%f@&x5nQDXMYfG>tfM{K$%Poeb~&~0O1*gf>Z&IhCHodt&= z$aa`Jk`^nvDy`%?Hd)R<cH0utpUYZbY7TOH&u^9@Yix#77s4kHWFrM{3kU2|!9t@= zc89}v*KmKPKiJ|x*#Ssz7$dspTdvAj8*p7Q-0Duoa%DxX+9t?bY8urzspOR-vbNk* zwwgD9kJ&WEW=Y0ZcG!fd2#k`f01gaevg0F8j?55^E$(bE#%$+qRsbrAgG4{#K;YWb z=+?Hi<(6ivmc*~zHv^MoZOrIpyB8gSwdJNFRUAGGtXzwvYS{+qJwv?PvLMv}Ms|!L zRh3y!ESFh0&Vd8NyOL{T%p#1ainOvA!(;bA_P`LTpgV8pllCDW2Ktf;qLO$f)(Crj zWxF2Bm3tpX^}(VqsURweXLA!Y7P7}XuM%RsC{NUS3@rmIDv4E9j&veqjn4di;N>*~ zqn-9Ao5$Fi_W)g0r3y3EHYa6_b_h&>t3bDnePL0X<SANLgIL1gzdqK3S8~=Kw=f=B z9UEodO4oy!#`?DPAV*(8uY++g3gonv?gr5~Dsy<S0hHBtvdhE@Xu2xVlLe9DuSNa1 z$wAdiO@A$B{jI1VSpOJY06})>%(L%%80hOZ<&)@Hpj8k(OT9DvzdwoNF5doC+dPTY zb{?0m@7oc_jyJB*dG_l{4N?ys-<JLz@Pw&!o`jCgEg<Lb5ZKRD+!arifhq%42GV8V YFD51*I?%_dE&u=k07*qoM6N<$f{Ln{)Bpeg literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_cache.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_cache.png new file mode 100644 index 0000000000000000000000000000000000000000..86a04122bee6765df0e784d9b060c8db5190cb1a GIT binary patch literal 1586 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 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_cookies.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_cookies.png new file mode 100644 index 0000000000000000000000000000000000000000..8835d629ae7e283c36c90e9872468687cc022f72 GIT binary patch literal 1877 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 P00000NkvXXu0mjfAU9_q literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_history.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_history.png new file mode 100644 index 0000000000000000000000000000000000000000..d45a2b97a37b0e92a25601e6d310feb7d863b651 GIT binary patch literal 1861 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 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_recent.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_recent.png new file mode 100644 index 0000000000000000000000000000000000000000..f2861d95ace3f8d2e01616e1511f31377264602c GIT binary patch literal 1353 zcmV-P1-AN$P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NGvq?ljRA>e5nN6rwRTRhX)1IG5 zqJz{y&qU*anKlvAk`NU_Nfa?kRPbX~mI_*m6Z;rNg!z#)5W$%!=0Hb&AX+&neJJ_S zAjzJgRHmi_wO+q}o^@S!-*fIe=iGBm@Gkh@z4qQ~{ny(2>~qfE=ax!MY0kjoJp(O8 z55KFct2dl4fe~N`7zze}E8ud3^DQkcC($1bA?f~LDcB4C0%_zDMw`Jj(DQ#834!~7 z72qnUN6z3pGtVG$FQF*lHi8aI2z;IPUnAV4d<w``%c>Q`$x#}Yv%EUuItytd@gCp< z@DB*(1PyD!^GU(zYXw?1n}C*4D7R^NJ;}eWc8L3e17Sq!UxO)G$?@q4mVizWiY6)d z3aQEkGR^#+Aj&Q33#yDWHo&2Y`4EIxbz?@VWOK+r2VQ=pGA7w0dk=iGLHHC~mYpf^ zfOH}7@)H%^jD-ulW5FN5<POT@+<|a@5?nDh%HKhIZo(9f@J|KzfXPJ^y&$s-jvI|7 zDl<K=@zHzY2G|dJrOg1_<-p6Tw7z9KyxV}EiGAhHlnVa3(M?`W>Gq!)PT!a#rLO$I z(7#965Y!h^x7Yj~^ml{)G}V62sK3+GsH>gPAoRCfy?d1r>q%p>yL*pn3v-Ujxz!f6 zTkzA;GpX7DCSCzNUW9t2qu=55hpFy#!N!qSo2!=+2Y}H8XZR=j0at&R>VAUVbpdBN zz2*R(bA}ykusn(DYOG3JP2MpVWxUf%+8&GoQ$V=y80`$tIK6~zJ9x#nHCR9A_$zk5 zT0%d7gJ3sF`EBmA&grb_*epTUfDWU7Z0!v$wJkTP8o(1#&uq$FZV-LVgYt%S`W91s z3GC6Tqhl8FkJK!FI*OW93_wZgHSI;mLhaeL2QhgQWijx(MZMr&GuEUMo9n<td;OK5 z*2ANU3VUt2O>|ItAhZq#afA5VJSe{aVe)T0U`f{S+v0dkJ&xj+Xfgpk*seE6N`F7x z_oFdx5Y8uG@?wWXSMyWgCq&$-uLibT<q*lC`&kFSbapog`D@vvn)!fU1DOOafKa-< z8aNzsPX5JK83v<TgUFq{MS))@uehtxNqf~sO@3+zcY(><#ur;+6*q{wllQ@h5qCAF zdmGcSoo|^(<<r)eSYqf0QE2iOlo+}ip8!3jwu4^Q=S$lCM}+TvUrimy!C)D9p{8L2 zJBd9Rcv;uLaK%%T`L{0n*aJ=RQ43-u@poMEQdbs4-FO<3od$I8nOsE4cc}O2LZUAe z`T(^C^znT~>G0~%at)YhOY?Fe{1EwV!FSXvPDk|yfo~27KWr_nm$&Q>`F7ytH!3sA z200Zt`hkyt-)~Xv`Yb19yc>i=zzH!2qF4RIc(3GEeDrZwkLpek$_5(3Lsl|b+8#)I zgKc57sD7OCJ&^d#l)hFl9q8YgUqC3@<jqT)Pi{McECT+MBh?Dg8}=MH4E6zCxl6$B zYp7Pp5o%*|CzaKaVES+Dec(UFQq3%<@u>S=%9?-Kp5S`CYAt^S!lwvLvGOym`j<u@ zax<OK%7IY|zez|&FC3kfp8@&=KNJiA;oq#MXlqJy2AVTa=M4M{<GDuq5iyxq00000 LNkvXXu0mjfzA<Y< literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_cover_stories.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_cover_stories.png new file mode 100644 index 0000000000000000000000000000000000000000..e10ccef53872a1476399e540b68bc8db267661d7 GIT binary patch literal 1530 zcmV<W1qJ$vP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NHWJyFpRA>e5nOlffRTRhP%gfje z1iM)@B?eL63Mvu`dXdPipvRDC2rMWFAMC|>3n?GUz>1s^GAx81ipr9Z5-SP>#ql93 z@D`Dk+SR;`&Gh@vob|cRKHGE7cg{Co1+(Bkd+)W^`tNo2*_U;`>FS!0i5aLh1C3hV z&Us{HWIoON!42R_hr`q#Y&06XDgRqS(DT3=un*+PfR7x*$H6Y}61dLyb)?RqJ>Yfl zHz*^ISYQ};gEP)a9B+fUX46X9(h_2jsgOSdo&w#GfsUcu4i17t;0G|s^4Uo_DsY@f z<vVcIn5OynG__UWS?q_J+ICeK_%iSr2<0yn{oq~@d#FqZ*j)qGgOebX-6&>coa!hb zTmTLPBWW3|12d~~<9j(+4Ne0uPgLd1_`#~+|McwCHA^~e+9GgijGaI-1Qxc7Sj#4y zd2P50+cJP7fpZeL8_aR)>Q#uQf^f~hfUc#DUp<1Fo&>73=|waDzX@LFygwnd=2Odt zw$AevK&Q##n)4NPhgX~YOYjl6B5D*<VysKbM5j$=!=m#xvb`t9RYwQsfQS=$uM`)? zN)P-EyDsL4%^wM|6;ZpGZ&@A0D~+6T7!=>u7%8_g(Ipi<=h5#lqoiD3Hn6gG@LmEG zgUQ-LUo3rM)_*Ps?B)PH#P8rWpfscH0<SJhll{2^U^U+?lX6@(XKoNdCvhweVoKc; zO02vnpEprr_OUho#qtxzKJLa};_6-D1Kj93x04l~a_!nxX0jLj42}Y2w1q+pCo$UU z40~KXU4?WTFnKxMTdxJ_QlOK>OR0^I!%g5@@D<1$>CMRK{05k;Y<ASFK)48m8K=h4 z13g@m{;WG>KI`l~+f%&;=gq+18M<Rm0TX4P_f;Js+yf(yD4O>$*h4@Ws*wAT^v{BC z3%J<vYS}CW!-;M(<y+X^nY61HkoYCk7c$ZR0Pwdo&G<v0*CpinWV_lpsXr!#li#Q> zu>MLV1lt^8Y7>hb_$6kh%9T<}fc6DINtl;6Xr$gMZJ#R0_7IpI29M6Z74jbt!#9D+ zW+OtOtni?9B&B~7$I;y(drA%Veqv+ARw`4B&zI<5G^3>4OPNYvXg{CyY0SI4f2vNW zpApUWG|&yc0A8M>vCJ!|{|b}{_6Pc1wEZ3k$86BQG4L6rJza*BQ-HWlR-_1g0}BP< zMZYwJ<nN*z-Tah&-k7>iywtTH6z1{ROa_~Qm(OXO4|D{3xy{F%sblGrxgFk<x@P7g z??iiTU}McARIc~7d39_Rtb+EUhZ=B-@2RKuQHB!(efP%XCzP3M9G#ZHrocga;`R)A zfdZfDU{AoML&79=ute#w)H3oLRL=UmTo`pgNuPcISPyhT>3&#rF54nKzB7Se1vE!R zF_n9x7;YHzY5sk>XkhhYJ*kXckqtbv!H><+$10nO{F?pP_ka_QAhY(H#^Y3BY~4Hd z!-AHi&y<Tt#X(1<mv?C7Z=hn@mMj?WTA-u7_**z+#!2h?Q{ZI{jgCG<7*|Veg1r=I zQ+m;xNFAjuk#^dcVD+8s(_uY~_C#xIGAD4jZUI}s*P!jcFX?pALxgWa=d&&u{XeXd z;5!TG4jBd}<MY2X*tML(J)uFBKIjfu0;ZLD66`eNuL9j0p=>O}QOSmpw6S$M`6Jc` zaE!(W;1$pZ9tF4h!Dv4TVlsqM+@&VLbGBS(kgLH45Z>6RqS9-F(EDLvq2;3lah}<9 ztYpx+K)KUikS7Bc6h_K$^`?FST1KfKs?4rz*|syCKs1AS|L7jHps>})%^804@!#Oq gJyA}~KqqJ5A2pruhu^Ty;{X5v07*qoM6N<$f_&f2jsO4v literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_delete_old.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_delete_old.png new file mode 100644 index 0000000000000000000000000000000000000000..f3c08dbbac33902065b226431cd7fdb60a8ac3ff GIT binary patch literal 972 zcmV;-12g=IP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NFHc3Q5RA>e5SxsvcK@i<h6AdOo z4-ykECI|`=%)zgKR|y0pUIY({(LdlZ`4{mn@$L`s4=CiAco3rplUojgh-gG5aeYOm zcitA=&g@L}&WhVmOm%hDt5@AUJu|zF#y{Q?YyQn<a~zm6kYNw@4s07ql6?1!)oTLr z^N=-2UfYAi6Ub1#j43<F2>D$|C+!uS4-rg#Du@)Bd0%ml>tmf}2CH$!Yz6(}K4P#> zLN>_%rO&UcHjtSoLZW)fJ5m^bNd8})z3lZ!C=f|bVeAGZ=#$3IDhw$|ncBM3)EkEH z9qNbFO`KeBe1qO&6rd;I{0=ha3#!2;Gja<>ywJHrr@%Ql_6m97EEBC)TI`Kb0qYoh z4%ri@9%ygD;aLyx=u`MlX8@;?oZYJsc}a`jkmnKPsYyP7T!y%|9h*H8U3JND{g9V0 zbP93Y1a-~=^eFXXs22#7bCWq!ixi+A_aj;Ofrg^aK;|HWJl3f_jb;3Aj8{qri7OCp zlMI9bA^#<HXgw)AwL472Eu~m;*>d*K)nWy%1AH`1Fh_|xwYyMW0loUpr*$n;fc{iu zjKeMD_NP4CL%Iu%UH~U>NiDC8pL-AR?1f0|ssT=*hD^G=!qvABUSan^i+@FkT>#@( zFCd*$2I3hqnQ{dZy#P+2a+`D+-{c+;Rt&@mOc*N=USVE&<#y05aubUu1H~?Y@j0(q z0X#!q(2B<B1#p6jT-(F(>L9;>93v}lT{35C(JjP4(Fy=9y}D7hP|N}}c9a72EM@Ci zUF%8#I!Sff8G^><t($p~W^oVjXC}YDhwSXby3o?Ao4bXmmavM`;hub5r0u8ngnbbr zAK{mHtc3kGVz>=3UTGbO3yccA?bER|unGk3eaiDg4STyqw~$^+y;r^9C5()lyZ;5h zXaO3`eL|Mt_}37|)syB8ELy;OME@p)YouGMjJs(G+`!&kr~SDD{U&4(k{HNIU@Swp zEm;?Em(e5ZAAx_`v;YAEs2r8C+b<-THz)4^0sa6YGZdrA-?h^&SCOmtKeD_)B$2o& u$VG_7GvPCEUgHOZPq_A5e+Ifa1AhQl66BO&nQ+_y0000<MNUMnLSTYo2$qTf literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_premium_effects.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_premium_effects.png new file mode 100644 index 0000000000000000000000000000000000000000..ce83e1a0b10b96805d830e25309a75766d0dd283 GIT binary patch literal 1209 zcmV;q1V;ObP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NGBS}O-RA>e5nOlfXQ5460?&O|Z zct9ArBqKzWkwTG%nR&p2CQP{%BBb1&JxN5Aco-y?&}5KHF1ZvD%>!meaw{|<_wid_ zYfpQ=Ip;XH&m?EnZ}!^joc&+>?6bdp_Bqp}Nn*(eBqNZFKr#Y40=2cZE#VLh@jEEZ z{hsLOJQBC!yzw9%=ng%g9lU{8@DlE&QmF@&PBxL?Jg9*sPA9}3qtmTnF_gh4@MG1S zv<rIK9iqNX8$Yt+S@B8K9@fJvO&YYAZ+DEwJ>i)pGQ&O|t51@N8Of}?zTAt_A<k?I zo8bz4g-m-)K<?D2NEd)W0kqYmEAf9q6x*X(`94MVhrR$3bcJ6~qDj}`e}^bmLE~ns zHxz#voX-$^N_`9DLCYu?Afqo<YDDm5{;!4~5Y}Y5>}E9eVlJrI7fM;d!W#lI@^e7u zp_t6kRghy;@y)7%8_GoUD$Eg0%H^tZ+2jaSA~G9f+PK+aO*p~rgn;oYswdM)Y?Ib= z!(KoKL`t9(?A75q^^Gu46D-1y!z4#<)trXkQT=lKsi7{yG(te8jo1wnQ}N-%UZju2 z^XC{cZA=dQB9*;rVxdYza#U!ec6<u;GZ5tmtdb21c|z}li(pUTL18;@mb!xo4%Q1e zjsLf8ZQu)_hfQIF-H`eKi24jbBCwsX`(gWDyHVL_$%908mB*kzYz4129L|ajb5l*Z z9iZbAI2P>(<R%_G{(&ucXQyUOoq`(c;&JS6A4>1ToRWH7z+0yVjTC$5me=b7Ub{7F zgt)xTIhxl6RMFzSW2^Xs50P95(_uS&1KV!d72iHT<RgI>yx<M))1<xKDeAI?wyoaV zn|-dQkHS1#B};yhbOP=1uoKdY2jwXc`v~%3Ah^-61yn({OtvE(q-T_OG|3vR7i)cY z@Sa;O5Lv21*(h#nXFDNoUQ^F%tUodN%F)N_PH-22W^fJSG#UBZke=I=GcEBNe6t73 z58h*k76_Wru=0d*pU`S9q^FHZMSXXMTAn!;TS<cIj3hy;l{B#T`!a20<mIzT<_1yT zGvwpJScty&LL>#BA&M2tXd*Bf?t+=~f6|my=qPk@x*J{(GW+}yRO&|0J`livuII|K zDet;|bITH103)G+`Mo`}8ng@^7)O(GSPM@;=DF;6>pjG%+a|k#OHigIML^@$$>+Z} z5Y=RL8DpoXE-Tz5$b7dxNvxlJZfGB&9pGi>IG78Cuot`@eDXV55A~j`8l$MQ*g8MD zPO_nMlTe}4$PjM>ePIm9M*u11b=2__A#qu4j8!^my2Vm%2PBT7e4kkX@-&o}3fY%G zf=j$1RZzxa<dNT^?0n_U96);k<-cWI#Bsd^>CcS+R`2O8o$n0tFQ&wj5lBYhe;R?` Xt_8$N4NBlH00000NkvXXu0mjf;rkqF literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_privacy_policy.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_privacy_policy.png new file mode 100644 index 0000000000000000000000000000000000000000..aef39cac6bd7167620c885939f8f6ff81568c87b GIT binary patch literal 1482 zcmV;*1vUDKP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NHG)Y83RA>e5nOmq-RT#$|Q_EYH zq=lJ=r%XGCL?|k{pr!R7=b`B0Lt+{9P-ztQ;)NcxATc7+B2kJckV1{pKrKBGN`_f4 z+C|8`l-SWqv&`%1_YJd#|EyX2GJE#S>A??vXMJm}@3zlgd+p2g=+Qvw>gpN><6%Gp z)8rePV#mNj_!*p>L+OASFfiYYIYgtVAutoZf+YC|gZJTHxFCo0*+P)~B6t|q!fD7N zzu>e8+OkzqqZf$^FacJ;QHYWgOnd<CU`uKiY==1cn#pHiXpLnhn-g>_yaan8O58es z9D_ljsEoJ5%Wwdq#Lni&@BmyGij!*0oZ(4G`p<ob%^Vn+DlkUa_Jn)jJ@^}<<aZ|C zgqF0ii*`7SfFB@A4l(f>+*niKfH5%!!eg)*>@0@l6ob<P?$tvW+B)ABh+@0PN|*w@ zsy*u;A?`?+3!#7BS;lWj%!1J!pkhnN_V0@mopUrG-z~5VtZ*mG6H{P0+gZ~dfj)^& z4KyJC8&b~>KUGhEfWB^HdkTfZseny0hxSXds=IjT0EUP|r|8|K>OZh*HJm?yCY+X< z&%k9;R8y7^7inlExH9TGfWt0Iqgsk@C-!05eb5@nb5h1qT>}MiI464UDg{p>=!bAA zTm_GUFM8AL@+U*5?u-~U?0KEyZza!1pbu;vlG~}ebslqru1z`sJ$mO;cT4g1Nbo82 zmtfCx&sisZr|J_x%?FVC8KC%UscZvW;wq$FNb!rMuj>Ej3{bqS^UvUNsc;F!&zHWh z>KQodPllGz2{E#ZD;J@7dqmj?BP8Iv=(D6BQniLuOK6WoX%W3brJ(D<-qP->m<V*R zvE{NJu9N9C=rj25SM4lfW9n$>9}qpPlI(SG@@2@1NqcAbwPa*3Au~gEHpW~(*iy1} z%|;a6eWKjW|1al6`&6W%o509kteteaac!CG4ac2Psa>EprZe6L)_Zna>Fe&}yOsOc z4flK}mM5bW9PEutMR$v`8wL-7z3QpFMW?uPSqrOl68&2U#w!OF1>4D<zh3-eDJl*v zp3{9YU7=!UAE*2?VMX_acR=MwI>`k{2JByu07qmhUd3s*IKCZcjor;)&oV0R`fy|R zoTIx>T*&eqKHs<iw5!V#NeafVh~sbQq3yODhI#vVWkrU>zF_E1Qud2e@VVLxHZ9J+ zVh+bUJ?Gmi3<4eO?Sk9s`TaqET);eW2)}0~mR)OlKZy6o*e*a_7Pf~c3O<9O157%> z9@uIY{Q84^H+5o<9<>Rci=B6=osuR3wsw!OC6)O%0eoKsl?T)0uCT%T3b2o~PQFKJ z$kVANCdVlF*CnO3Wf^-7s(*!!;{pj}>Z=t7Id_OZ2<%>=a(Cu5M6nONyEGbl+>>KH zx$NHYg_mnt=77$TfaAcwSv~FM^Jt0R3qApr?R5I)5#OF^?g#yHZ2BC?wl<|IV%W9j zb}rPS?C0-rF{@uCpnU?@53QEza~PI2I==QH*}rSsj~~}$jT!4l;78yjsMvnr9_#2$ zVsBgRb8s3|?6Z30JBSx1TbBg4!9mSh(pS^AB}K*NCJ6ohu!-^XciW^yaq}d)68z_U zhKftfem1IF0*noX6`<D=-J*|e*A2hNR2>sZpMcP>m9{jj*y%78=E0xf%TEkUs0!T7 z0Sd7Hti8ybfwW==xCr_+v)0&L6w?Ow8`@cjlXXnC#s=%oNs1c{OTm7AJqGq%V_W4K k$o^Q+od<P3cg%m_Ki#P&-ZR?Y2mk;807*qoM6N<$f=J`H82|tP literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/menu_stars_gift.png b/TMessagesProj/src/main/res/drawable-xhdpi/menu_stars_gift.png new file mode 100644 index 0000000000000000000000000000000000000000..8dea765a3ad024776d0f08ce71083f12034c8a97 GIT binary patch literal 1570 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 UCX+*4KL7v#07*qoM6N<$f*%dO{Qv*} literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/large_income.png b/TMessagesProj/src/main/res/drawable-xxhdpi/large_income.png new file mode 100644 index 0000000000000000000000000000000000000000..224c13cb0ef767818cb5bfae06ac089b3793395e GIT binary patch literal 3059 zcmV<P3k>v$P)<h;3K|Lk000e1NJLTq003YB003YJ1^@s6;+S_h00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91V4wp41ONa40RR91U;qFB0I4%yP5=N4T}ebiRCodHoq5oeRUOB91wkNE z6ofKBbiyUI5O7IE4a^X7#1yB0oEFP$w8e@+k)Z`~BA02>HnSPRv|?&ZmQoQYDVHdh z)Lb$%3<7Bp1w_EN&-e1)@xJ#y=XcL@o^zjjFFwDS@B7?)&iQ?R%d?&BLXRGW6d5Qo zP-LLUK#_qW14Rak3=|p2Jp&!NTa09|v$L}gR0BaL*adciEgc;lJ2<wDwDbue$-T+s z7;rQ=rtA0)j)TDfP%Szc8^H@*c$DKBffKWiW6Md)odA-42w6H4oB>V){Xq<Q9+D+s zF<8Y3*&c&*kKiEbeZd9bHy{t$jFInwWA}&zh6X_b27~$Ff1p|N2MnJNTJC8On%BB| z1iL@D8oUfzMIObGv+FwF&J75#1AG!R^NPp3DXXbHGOs-6cH0ruD1!PvI3+MRbu*s= zkAd~zMX(9H4tjOrK#m82VL&~np&&$FL+NTTkC(MRx3`e|3&A#!MqZ=wDlij_0qT;b z5_Ap%XM^v6wIHoLgo1iy?I}3l8+<oq)C&3%pg~qtfm0{)M(`5wmH*Q4gHavHgAAwD z!}+~$l(bt0j?c-r{@A)0_}&$-)AsT_e2ZcOXNQ8vfsd@D(FsuurzF8{AMjc5BJh#< zDNW?xoGA3%eaa)6|Ip^6`FmJv5kCfjg&sbui3V`FbzW+{HA-+yfjk51$x<2&F{qkS zg-?@#&)slMQyjF6;<#S8_X11wEd45I%`1oi@ogBmAJmget$gHOhqnvrc&u({TZ}aE zQy0@O>cq2)`m=IRbdo_FxwMY6Td1Fuq?@G-&e7oOT^O5%t6CS%y}=S-iQZ$wt95hz zjsu5*t%jFMe(31e84H}_fCg)2*~y2KoC*OI@Tr${SJ{B$sK;*40Q&4I814lgbU3DB zJ@Y@5-BK+BymMusO0KPKnXLr=en2B~OJ--Y5~z(wGc2#DyCRUft{U9mOt7uFrs#s5 zw}1x{?3IgN<-?)T4O@g591N@>{q2^1);etGb^_!p_C^3rOSt5hSz}72j~6$%JfVCe z(9C31fm2uF$>1W8^yt&n$5in4sD``9;5`pmqGi;^3m&`^>@Yl;7Rw84>;<%9wHWAD z_mwAU_+>CMmM`Lg?>57Mhho}ta^b*@h7)%>6;oDVV-onYVaumVJtg@Y<&K0$Q!TFm zmwX^)nCY5hbwA*8K!X!)AIU86%m(6%CF>v>pV=`8;JMszYDEkiP7Vxz$uPdashFYy z{yBz?ELFN2rlfEsu_+vV!3M*TsDr|8PGIyehT+UtKipFc{uotTAUUjCPyt`ym}NL~ zn<%N*i8={f25te_#tRU<3%Dfntp{;WpqHm58r&@c)4{P|5Euy*=p0~OAXJxRc|gv) zslYN2yu6#P=C2-|kAWREHJzQ|cL!v15(vvh=XUcj;0r|4%4Ck?KPWfvGU~PS;?uwy zqflMiBoN@`ZWZ*0gQX%$Av!VPU1XFWaTwEW-7h$rE=4$g=-^keY>f7`LEBMaEpW+s zDY$e}CxR=%9pGOeL{|CQtZ9ce-EzA9lVnkiLO=n;*5l*nX({1582mNKVaiVS<)iJj z4vw_N7ggKbtGdAWu60}2LdqS6UYe@68IA8V>JqEi)AM&KG(&oCRRc{Mtgb4vzK*ae zJ?pfuspcZmh9+M*(P;QPqb^O=0Hg6+jXGx)CqdmsO^0i@o3^_D6Re=TlcTT9qTvLf zZSkRUH#W7AEKCT(^}^W@##pO`4QoACb3bYB*jfV_O0Yc|WZ6=AK?d`sKJ61YkR(eo z5mzWf{y>s}in6OJn&<uzKgI)V@u|YqZXdVtE%6Rcb44BOi1=@g@{r<t>L^`7Aol?8 z-cTLBRMk8}^xilJ>`0~9qsKCIH>cEjqd5T&0WP`hjh5LyVL)9+-}#?sX?q=*20}OC z204s94FY}rq-m#jmp9QN2#ykqLoyG*Dve^p8VfjFC>1})-&?^Y;N8I0W2-b5{2BfW zfsbgk+&9>e6d@R6Sel%Pyh<56T6B5bu;*K)MIp_<oDLdtGT{9ps3*5ng_!;;7T#-E zd0%=)TLW8q<gGDmrmfOoY`SeVtQOw6b)1<R#$2I=fwK%FXI3<g_7QuUNt_3^8@AI{ z{R)NsqB+?`1m_J7N3?Hf@67ffv8ISWlG%VkfNf1D%m>yOfogA2cY2^<GIbSvnk!nE z;6a>S8W10zKwd8TL~4%%6fmZ>;p4$<a3^>Pgvzf2TrgE|q!;*Eg+rV8JknJ1t%OK( z?k<_@%M-I5&gg_311<)-`d$EOB=gExQam_t2KX3=*ENPr!Mggr3zHnlyA1#I7#It# z0@nT=s!I}W^FS`K;<9U6_qVw?kirPQ>W=+!Db4Ob+o;+n1#NSi;_PBaEYCI9vt;Y| z+7qmB_*^bNJXt%x(lm2HPdMCa$*YLDmtFXKy~F2n@u2dDW*yU<fTa#6A9R$bF6Od4 z2WSAMQS5RsHZ@6ig(tgzt@-w9O-U;kkdW$m8ZCBY-r}K{;W-XezvwjxJ3llh=uQQe z3=8FMiXM@ur!g65g!*|9?G}dXYamIq4*j{1fYH-zsZ0J%MU)>_z|$LK-jom$V>BHC zaGe0EN}}PuwPe}N7uvob>?~;}|GBlBLckYj_XR%!x>IFK1H|D0RLxhx@kyYbtfRrl zLE`F?qEH=}3F?iMCuWTr8%aB*|3ta>oz;+O+K|9-TE5&5j`PspPMZ}#FWL1#3+yAh zFoEN~z>?+kl1{f8)T_f^?Y7VgS(1!{e@#+FOP3Lpes`cbltzj+Rb_rmz_HSB^3;}2 zwB;N@X*Elanns9TygqlB<)R*Q6AkCI0_Od$G7UAWk^lw+*ESd<cC$*)<|wn1@Z4uu zx~^Gyi*A=7)#Y7n1nX1vJdHFv>HT7~0)fX`8`19%+G}iK1zWBos3XA)uoBc;n9=XZ z9tPh6r-C%2{jy2t5kBkAyveE9=n5R$2k3_gnzUO0PH2=(xDNnHkAZoV_iB_~@xt$# z72ZtU&_>#Ja$~qB(0Xg7=yuGuAI531l!&`4jdgvVVW>o@!j875C&|nx20}>i#?>p( zoO?s=1b8*-td=i?_@71xgYN;=3qC6;>yw73+&0$p@rW{E)lpN`dL$iPRUYH(BMBr) zWeLr~ix^-%jP^L7-p)^e=BcJouEAk*gan@kEYbAxQ8B%PZvglycm;_6%9#9Z$3+6} z0+uLAhqPT_?cy-W-5)${odN1rwM#s0=_d)+T#oevHZ8cc_b|QH&kPAZ0&D<DqTkIn zw4WZDAN*2RTH}i-Bj!*)qUaHXMy^RGA<kC4C|>R+!B1^r(EzUOuQqs1k7%MfR0J^! ztOQz8)Og?~(7!p})LO-tA>bQ8y{Kx@>Q*lQjB>4KkxK}q9|#(xM0TY_hcB9Gy&h}@ zmVCPr_NzG?{yb)YvbEZ%&v!C&Ano+i(v9G0c=S8lOakY42yO=lco1d#Rf~s#mTf|! zz5*&2)HTETN1$ynp8*p<$p0tsEPB48ALG6GgzQ-J?Ul*X?Bl0=Gep}FmCAKKUqgM% zte5-77^NM7-&`j-)zzo?7)Gf-P=~-0O>yfnm7BzxjEm{8_H?F^5BoIc9kPXXH#^#D z2gA9vIT5&aIyhAKuwt%2J>NBA_LU#_rT{`M8tL(}9%yB45y<t5_w}`@?MRB&aDBI@ zME#j;Qv+`$<D7uLKx?|Qz%sBFR6fJiGiu%{RHS6J)tjD#t8acN(1hMIJg+xJ%0od@ zWT41Ek%1xuMFxrt6d5QoP-LLUK#_qW18<fL{2#N)07I!pY-0cb002ovPDHLkV1o1Q BnF#;@ literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_arrowup.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_arrowup.png new file mode 100644 index 0000000000000000000000000000000000000000..9f53699ca925a7dbded143b9eb511965fd2c6a42 GIT binary patch literal 595 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(<^v49!D1}U6i==L6{Y_F$_V@L(# z+na`7M;t_seRN@smX_A`-Y(p)5O?Shb3}*xhRqwkb8Ne2_DFI~n8?OWqSAt{o$(3E zdMWBRpX@z)<`28v&9i6r?D;v-C&B!528Tie0~0pFjcI4#yp<-dfjX~`EKCaDXmvI7 z|I=X2e39ps^XhLeFF&EN!1(B*+ba(T8LhW|5qUJPLPX|7<#Ou`kr(f;Y`u~h_Ib(H zXNu31<<1&wEfk;NzINf9?XPV3cwgMweyKF+eC706^-DI~2(kZ?vG?1W^o^IdTJPU_ zW1+suvYOjVuV*#vOKVu#8N&Q!NwL0yuiP}L1sl)3Z4hD5+U=0Vz_gN8z(Z)o?Pj&I z{q0NSx0^Y5-uKLHoa8!-UBh!pW#c60S4>kxg2ET1O!&p1+IU4=qe_K)!HS7%8Wy>3 zV(Ah(DWzeh!oOg}ggp(59EC14Kg!>&C!T(FO2rNP`&o?aU9aZ%l-J(dd}!q-6NR}U zkN>?5<d)F<COSLLm2JYYxa%@8_ar^So1;6@4?5inyQ6(7Om4f)dh;81nj+<MK8o~V f4^NIG`X88UR~`6&=Kb$jP=tEA`njxgN@xNAbxhyM literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_bookmark.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_bookmark.png new file mode 100644 index 0000000000000000000000000000000000000000..741d7412dd7b51d7be1ca6a51c82e2f865bdf16e GIT binary patch literal 1015 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(<^v49!D1}U6i==L6{Jkis|F{Fa= z?QH7|kwB5Q%~=A?9U6;RSfn?4KbBs5IjXaD*3}ykok{99B5p)PMBMP$AgVaw#{qZs zX}3J2<PBRTTm(c7KRU+jf6RPmrginZy~X8e%FhoRH~K!O`rOX{cV?cMbaS7baqs~V z16ChKIJMB>u%Vdgm8`97Gj_;-J1D?&h-<~6XPQRb{s~O$%%yrQ?Wzw8q>H324EL#$ zTpKGp>qYy<xWJ<q+rM0kpB-SUcP@VKu`I!kS4EM!VynLuIZtKO*!A4!k#yVE(7Bc? zzb;>PrEKOGt$LSLhFzwyu?A(UX7P2c_TXpTYucTz`t8Dj9g90p9!Xtv`Qq$s^<H;% zp1B^(m-!mooIjUn&%5_T==`mc?XRAG3aZqLp8MEz=Yd&lFI?YwMs`;f^i)lncIxKV z&rhVLYR^``TDVGX`jV^{^=FfrG}EuK7&VHpifn(YAnXz7P<We<irgq4rjP$iDxVkH z>V*DUcP92XpHt7&0wKB0uhxHH+gI?1q0gaKKk?W+wpr&QGxUVkv~B*NH+@ZQLfhfw z4LVEQs=MyHD}MGqI!*K3ozen1yIr43B&s|8<7B=HotnD*$|7gA<09$j6k=M=ulvcE z{Hg4A;0ui@+VLl(ypOhtsFw-Hu<cy`;|BYDg`_wK;W_3d$BM(UE-Fqgo+^3bTzUp~ zOzZmvH_e&W9Y{NQ__^5*M!Row76@htpE5PPoqWB|TJ*R%%k_kVqSGa3KmQ?=Q(}7h zN7xQdyKg-U4uA00xXu#ZyRK(vm+>}cwFmBv|L;Hamx*cMwc{1qE}PfbZ>#!Zg7$^w zVUr}n3(s%-eq?U*itQg}s;fUVbBUaE^tVdqi+8%k=MHGi{}aViS$0U4!$>#Z$UgRG zjN7F@*%Riol{_sMdUBVw{NQo1Nt_E*7tPjOx>)kh@x-0ev|Hy}?S3d%vT3Er);&cR zj&?TrJz>+lKi|skNTp~e$D(&~JNWgaJ3S=rTlxH&|D5rdS1fmkamC-$>(_MHeQUDG z+SBA-U{JSIH9csLx{Kycp4oX^Gnke&XePj@7R?XBGM{`M*2y<DfHIw@tDnm{r-UW| DO|qqU literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_bookmarks.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_bookmarks.png new file mode 100644 index 0000000000000000000000000000000000000000..45fa1af1255b4aa8378c445d63378d5f6e2b55f0 GIT binary patch literal 1122 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(<^v49!D1}U6i==L6{{EVlIV@L(# z+u8ORB90=*in9Wo1^y=pE8XA}d%0yRcSOfjH)-aTEP_feMWm&*MK=bxG`0E)FfH4< zHR$q+2o6V)o}|fc!WX^I-EY2QXg+iA&Dpna-sH}IkevSP?4Ivuw{PBDyt|s2c~%Hx zsDo$#E1YU)GIfs)2wi+pV$oyE0<oS(!42Y5CSK#%#B;Av{6Xc~u;`}|y)72O36deI zoYPl6dF7BKa3;)El%4;f*$kf*UEP<jWSez5xJ*C2Dn4lEbm>(*jcZKP8E;!ygj}0B zIbyb<>Nai8@SUAgCUcm*Ome)twMZhxU64=mj@ssG(VWHudzz0p9ZYPxd+@C3<Y&#Y zWw!;Hy!jfB?fxpf+V;*9q3xH0)>K6Q5vsh}=lAo$w6;#I2TIwK<~Eu2Ia+6S=Jd~< zn>|7QwtwK$MHcTgx-OJ`UCdN@ZVlHGrb>|yGfLT3I>@owq|J5In&8gZADKRZ>q+2& z<ZF`X(sGSum2dv$)N%hT-LSE8O3ii67mDG5{EK&`&0f$Pmn3&FR6+E_;)dgQ#Jf$h z=j~bA`!j9JIqUZKa%(@$PMx?d_}{&s(L%{0d$uLJYSkZpuQ@w*>H8#sdCeaxXO|q= zRMTR5Dkp32wN<~AYHb!t=w1I5dZ+GkKxt##tQ7AP`bO1ZXDmYFm*hKyO>4ZY@Jgxo zzpDZBt)QjX7nm*U<eIwcNW>KFqweQCi<~-)c$PK#eC+O2^Gdssk}c45;_f4@8Ej|$ z)1$Uu_c^92?Iq5U$Y<>KGvqzjjr88@ngX@k{`<{x>}#lgV1B|&+~;7%lp6KiPbcS= z_v)=S&h2k%f6%{reyDlkuY+dkH<QJmK6kq?_wEzh2T3=tH8AD&H7<WJfA!wb@6$gC z8|3_2_~%|$xZB5ulZqPelWvx@<no-D8DGA2^Q&tb_6+W`{+?C-TE6z%#_mruw&{v) z^EmuRWnSv@YPKKCUh3bnVJg3I>;HopQzyM&vbm#l&HINY>n?m3(|D`>r;oWal}F%( zdhI&q-`nK6lcM(XlqfIvC<>pjpY6z>g)_r=!b{lx98|uL{$~2Yyzu{ZtGHvA$Qz&d z-Pc&R=$%=`u}9J6H=0)oL|t2B>ri&<lhOvx&36p><zEKJHGSckuwU||-E+|y46Xlu z9F4zd{ZjwOo{)K7E?Q9{lWq1TzghD7$JxIc+n*cDRla&A*P*#aeZTN;PXF1{cBVH* z&3lxRWHWhMzr?*KOQm;tJpXz>+qzg?cmL%lEvNKi`xJk!|FZk!n*S#PCu=R>TEVoc eL2JWV(I5P)mx_J*Chczu%HN)@elF{r5}E*7vh$Mw literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_refresh.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..838ae09742f8d97e964e7bcc16a792a028a71ca2 GIT binary patch literal 1817 zcmV+!2j=*RP)<h;3K|Lk000e1NJLTq002k;002k`1^@s6RqeA!00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91NT34%1ONa40RR91NB{r;0FW_8?*IS>gGod|RCodHn|p{CRTRfvwYJUL z5>0obqFpvMs5L90vc#3jh%k~sd-z8Ltp!0Zf|d%3+OW`y63Pg-Kcu36i!v$KM^;3Z z56Y6H!j#0_Y<=~z?epD!KlpV!GxM97JHOrEItM;GGw0rW&benEzdLvCju??ko`F0A zc?R+f<Qd2_FibO0GnoDA@9&?0|FLii)WYEcdunQG_On0eQn3V)j0Sq!R$waIDNqkV z(o4Y(_!!nhH%XIj_y|cE3+=E0(#oG0cn5BUx~k3+9XJD?g@cfV{EX2KIJK%0MZlxs zVfY;?A-y<Rm}Qc@J%b3el|Z{-T8w~?P<JmJE#Wx!n_wiAD{oV=ooCeUavM~v9*NOa z^C<iQQSvnvUV_`96-HTsqCXKXfkp5#d=F9b3l(m&>;>tle>RK{Do?G)_!w9NVWPyn z2{V&Aq-_n%fY%`EL@ZPNFkh6P1gk-!hyP<?^%Iq0RLNNjL86XyLSrHa0gbSC7Oa3U z(N!0iB+4E%8lM;7GQJw)Is@wrCq>mJcJxfjOt3!(ek?jPwy&ZypJV7hFzR3DC0GnA zIqMAvQt8+05g6^oS%eY%)WdQJk}k^xmG!)G<y@<7Y#mnLa4i>(kFdQuwm}aK@Oy7S zOj0i@b-{6qQTG5k^J*(?8@Z2>d4_SR4#QQE1~ROG|GO24AsVc<6kW4F->9>$Se|%` z(ea=WtSd^+m5B{|Y)Bk;!ryLy9B+hyAqCrKjPj+a!@y|Jt#xB+;~otV=krDaq<Tnh z*nVh~-;yc>3<lj=uctDcL1SXA0}V)B`3*$_>~{+|o}4%o8f%bdIn?boF0tVZ8xq%a z&;Zbt7hDC$eGoWiiVTy+HyB2xnittP!wUEx3FfPc+*0-wxbmy3;J7<gm>96;a^6p6 zG-YFAx*7I@9>|+PQ!8^pGm`_t{%N40N0clnwu!yPa#Miy*|CjzYCt@VpaH2RM^SzT zi{Tp3yIYjplsGgjcNo?;CpPGzA@Q^sF$Jlt=a5@>Qdn3~qsO^M<CTW4lB!KOJ5Z*> zs8^mo>}cLQzK~|Uty^cHIleW&Er{!K(5;kK)<i`Xb_HEZWA_a7Fl)Cn%4pW*#IOOT z<40dg7Qk{yawTk}T{7X+++&=c)yb??rWNt(W5GgL0a3G%8aSSrI5HZ)2(CPx*x(>E zB=}~~^zKU74Mq8ZowigVVL;!YTuJ_um?|1Sjp>Z8ut`w%$k~0yltxltdQjNc7l^7A zo?E-(1|Rm29%C3QJM%`{s#Jv~$hx}1>Q`j~qJj?Vum(}C<X2EhMyv!?_o9K4&Xv0x zb_M-p7-=<h!&()Vpl^(xUu@`xwJIz@+l`)IWay4f6@#g9V0|HIJeD#Ncm*-2>LC$Z zjbzL>bVFLji9R8d05PnYIajP(FBAW1jS~1d@MWO`nws_VdAS%E2B#K`yPMg?Izx3! zz{kTjCvYtY^(%%G`FzW-7ys6X@o@#}h?W`q6&&2*IMJad$1n5i$)7c1J0G+@$(48g zc_~=JLoMuaJ#oApvU&KW=mjy2f=|H}O^|7AwtvC!U9Pvn@nZkp(pe-fYxS7I?MP=i zq&3ECV6D73@)yTL=2jz?1)$sCl`l|OvlAh`j#-2QEj-dv7gu^wTo}`w_v*xOEm+ST zeVM6Dd^oxfEa^dcf%jgQX%OEt!8&=0wX;k!>8s&P3kE)tS3~xptN7bKKCcIBQG!BT z1=-$OZd!4um1bMPl0zu96fX0LHGJsT)%x;+dO)`D*P2&%yX5~E#}mLEr4B?@_|wg{ z*}vz1En<5L=+z-ew4Ukoto)Z{mjEWhS3wb?KL`(iHThqb54RGw^qp%Nge_}P;`EPt zgD(Wq0AW`W#r=9VY1rSAG-BFL1FezNup&&}qfr0BICO-7>R<_2;}6vT5iK})0_MQP zpk7cm8T3W83%-LW(Y#eB1Ww-s`Kp+n;AX(L5J&V--wC@wE5`I|6tp;sB2#vtomH`p zrg21|x|)_kIad?aQi+oLBvjv*7J}A9)hiJ9YM@D^=;8ky1m2=)PI5)t(uqd6A3ldP zqG!w}&<-b8vJ;sP=!%`8V@>SOf-6ApMj9stb@mWt+h7amU&2>0M?NSECn}a8I{7~# zY5I3a{VdmlUJ3eOAIZ=*mplV`2J#H#8OSq`XCTi&mKpd5y&{np2SwM<00000NkvXX Hu0mjf8v-!{ literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_search.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_search.png new file mode 100644 index 0000000000000000000000000000000000000000..cc9a96c6e1a693d6f6ef081513965b89ce4cf360 GIT binary patch literal 1422 zcmV;91#$X`P)<h;3K|Lk000e1NJLTq002k;002k`1^@s6RqeA!00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91NT34%1ONa40RR91NB{r;0FW_8?*IS<_(?=TRCodHnn8#ZM-+w~4eIVe z1@WL^!4+Z2!QjDz;6+443~E3S&k;-x;x*np1drk^f#5+e>Ty9(2t;zqF@!`Rin@w1 z3W;LW7$xHP{nE3<x38zGduqCS)_U-}U9YR_{q;|Eb=4~uEJ&6VND3qck^)JAq(D+2 zDUcL!6zDj<=&o+JJ5Hl(!I})K`THFF0q$pi?{qqyF4ymeA<AlS2wVg&K#~1Ug|ER5 zuz238MCU#N)8I9zYL9sEC>WbJLeZHu;9Kwt#4?Sl&%nZw7K#pR2l~~AW#7^8iY7!F zc#?+rVThju9~5-pF88m2-o&hlyEkcX<htl}x=x)vOyp`~Gz@W077UqN+&=~+K(29r z9DEASfR`Z89&=-JZbNOl0nx*Gy}<t`I08z4jd*4foCSH4`~&Vyv`LFOTp*}9=Re@t zC7c7#7qqbr{N)9}_Y=@7+CGDrzE*h?@(J!Oip83?)`6?Qv(vHSL~RGA`jmTiB5I(l zF#@duGfqIgf}4gBvvQjd(jw4X=jgSHHgYUM+TH-30&Cyfx{a1$rxmg_O~?b!IYk{K z#z7l6EAK3NwwC*l(ca4YvK*;{0I?T>UxBshI^q|`fYs-g8Rc7`^ryTqSWX3Eed2KV z2Vc=5GpEIfZb)cXZtYma5QR+<yaVo85|sB8K0M3{5YS53OIh??ArFHSJiY<eP7NcL z+6>(#Pf~Y@A#s;|(a*+LNAZFaWXkbHafJ$`44}29HjTeoB9yi19g2kt<Pp%Wya`i^ z)|&SN+B%iWp#pgXJff9IlzE8P`d{k*ZJrrpQd(|&QHr4gDZy^7$<5+YONR0b$2YJm zR3LA(c(2{Sgo+wqq^zXQ5>xLXBkQH{MJa{~<jpsY2t=>FxE{a81=`53*~DwM#p!wD z0^NbsJwr^(`yIwtM{%zc<VVL>uZz*5Lp^I}>SRIi<-p5Xe_SUIHx|Tn;%QA}waTu= zi1n2vKzXK?;6*_ovKV-&*0V*=#<)*xrCYRfw>FeaW+l!r({Zph<%qUbYOusZ#5iXI zQ<h-fSFJ?L5vxK*D^?u`Thr;ox`?6PX^OVLv;nj7@pme=p#U+Rm3wvt=c?EoX>%X& zGMP&CE{h#+;PxP;)ThqMJ)6O~Vc;NH1GJ@)<B5a2yFXT(=<Psm1-K@bj_LG43HH!c z`W${ds|negb8x@4C;Yp9&Vy}oKyV7^tUS+@U{?;g6Uv*qTIc9f{tOhE=EByCv>B2* zEAMB@AuCO~3+SYDHo?yIN}w~ZFTf?BbyXP~36Un~k<QA?m`0wL<L=jnUMtT=LL?>i zPlLP()$3TOPhYG3U_Fo+p0!^j%`-6H1TK3$sNmBg@Hm+Llyg1$B4tADq%+gN+Zy2R zYct%{{}ORm$oOj&DfkN$`X%~*Jv!4%iR{Kd1=MNfw|f)yL#~y}5tOo+CNua8fBTw5 zqQVd0L#LwBGFxfqhI4N;Ty#*MbDK6TMP4ES%{`vU-|i(qsoqwsED=Bwsh@sHq<-pT z_mW6SqyPm1s-%&WL<&$Kph_A^gNt+<5ofnB0nN?NDg`6yP)M&UXZ=DNZ@Nyl-Pj5b zdn(*CwRXkNMv`8up55dk=oK64X0=T+Wr7^YIGty7J!uoa#3d<^6i5mr1(E_ufuulE cV8j%71NxmFQpPI6NB{r;07*qoM6N<$g51J}P5=M^ literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_cache.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_cache.png new file mode 100644 index 0000000000000000000000000000000000000000..0d2fadc3e4d702931491a9dd195f071bff501c24 GIT binary patch literal 2240 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 O0000<MNUMnLSTY@B^9#( literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_cookies.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_cookies.png new file mode 100644 index 0000000000000000000000000000000000000000..9e82debbe7e69da68b50f03c0d3840e88f65cce2 GIT binary patch literal 2884 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 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_history.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_history.png new file mode 100644 index 0000000000000000000000000000000000000000..9fd59feb6db93e07e9ea3c9503de0f14e01de7b6 GIT binary patch literal 2785 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 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_recent.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_recent.png new file mode 100644 index 0000000000000000000000000000000000000000..148c63ac6559a66120e259d8f0274cd95cdebec3 GIT binary patch literal 1933 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 Tf2^V>00000NkvXXu0mjf7{z<b literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_cover_stories.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_cover_stories.png new file mode 100644 index 0000000000000000000000000000000000000000..02de4b41e99b175ede2dd97c3e6f30ad8281db15 GIT binary patch literal 2230 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 Eg4+QdO#lD@ literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_delete_old.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_delete_old.png new file mode 100644 index 0000000000000000000000000000000000000000..521275fb00fc6191ca16770cefcf87eaad2a01e2 GIT binary patch literal 1421 zcmV;81#<d{P)<h;3K|Lk000e1NJLTq002k;002k`1^@s6RqeA!00001b5ch_0Itp) z=>Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91NT34%1ONa40RR91NB{r;0FW_8?*IS<_en%SRCodHoWE-nK@`XD{9UM^ zpb`j1Ewl`XpqN+)RyJ2ynE$~fjhM>9&LUlGZS+5|u@FH)6BL4CY}7(YVMH6jC?qCw ze&4a1JKlXWvpYL8_iG2<-OkM0_dfHT*}1)QW2I7-Qh_20REwNk<lK6_eirASgB^wK zGQ`?M-w)VgwOV~+@avB*2vdW7fVmVouht(*kWpZ8vo5NTb7o2S-fqGmXUIT{G~J4! zNR&MYDvV$-A7Ohv4r(2-&R}0!_87A*lxcHpb1u+u1LrbvUZVX4?5`pA9`s#;jVm9C zCvj&~d+$}Tg5HyBX)e!5aQ+;Lv6Lr9*ZN{$t7LFPd4O^L5Q(vxCx(k}tUai%;jnk) z&MgA@h@)ee>Y4T+aP32o>#!5B+ylcoZ3Qv!v^6?3IL7&dR8KHR?`$cpg9X5D1X+N| zU2i{?e;CX)i1f%bs2!%xr0)ve`%N4f+D@4DUMh<~5^P{g7J;5Zoy9&>NG>t!R~G9Y zB*KK)q&qBl=1sc8oMrk_fl`41S0K|S%{0QsJ%;uRu-CZRl5gc*S->g30-T4v0_S`b zNF<$vwU+59iE}0a;B+e_jwf@5aC1kZ6_t3!EmGLC2<O+Z8I$Npyru+_s(hjCnj$=e zaV;-kmOE({^EYWcK-xOl#CUT5e&i|;OT>V-1j1~N!*0s^R--!b<&%VEJZxeWg@-Bz zvINs*bi2@SoKntH+Siv)8W-_KRZgkK`H2>Z=1Fq-*rx@))=k})PYQr|V}vpH$Gqz$ z#+E8u(kZY0{aM$=Pq*oMR-ZH{<6&Dv>QCQY1!9R95KS7Xk@2vJHR24KKx|^83AEps zDSjv8i6#(Rs%%Nem!+AJ@kA4dC1OBL-1tX~hfS=JtlWc)@>D851!C8{C4JCt#=};= z5yDj<wp7`YHYN|;$#|j(#1b)}z#16CGafdv#vraMs8<DI+|dML*Ss-#;7-O9O(3>Z z*^&;dfiXPei6#(B#DI(=2;9kd*u)w!eC|PPNgI;~?qob{VvQJ10^y%e<e|$A6?r#) ze_;=5D!1^}ghQTdYAqWHcWayV*h!!yDw_?qtgR3M92mzhmpp?cQ11Ol1RW%S*owC< zD&GRJjnN7bz=3f@7l<uccI^ikzcnP|h%OLI$iS?l3E;pu*o0bB`@X~&m_U3}B)aa? zM`AG!HlYfuz3N*acI`{nyDGJ=`}C1mjKfKwOi$XY!KGEUWZBGBaD#RaH*aroqCBTV zpC|I=lfW^K=mN2X46MNn0puYo<AYYde2|B6unA4{-2Tn?CC0$E&mOLaaj*%s68IK~ zUHevu01k{Jx<G8nvY87oerrg^5nZ641oJp)>qHadV7%ej@ToKc(`6G43@#jqiY)nI z!l8@&VR5{I>{ZyZra)bu9Xb+^q?t+b!WLk<2&dB{&(8Nj_(&FrhrqktL~I;g#H;)d z36Jsq8P@h^lnpPxFEaR3u&c1cB=iH}CGFNGCsos^5aA$>Kf#WrZC&{O9ZaVoQ1l<n z<PKSqPQXlm_ufg(gloc8904zKAJiB)l0U~m4HoxPqLJPBB0RN(&*&JX6PMdC>^^KA z*2yCIg=5&qzzgj`3;<wq7ke3Y5_SmYJqKdyA{(%*m@lwrST*b>R-aSWO9e^=N(D*< bdR>A4Bh+!lgtSoZ00000NkvXXu0mjfk(7Gk literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_premium_effects.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_premium_effects.png new file mode 100644 index 0000000000000000000000000000000000000000..a28b961d99cf2a1dfe6379300546bf12db0d5949 GIT binary patch literal 1857 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 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_privacy_policy.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_privacy_policy.png new file mode 100644 index 0000000000000000000000000000000000000000..dcc084a7fbfcaf908ce1051ca879ea4acd0f765f GIT binary patch literal 2296 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 S9w4d!0000<MNUMnLSTY%3Lh{4 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/menu_stars_gift.png b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_stars_gift.png new file mode 100644 index 0000000000000000000000000000000000000000..b4076029e3b54ec19059afcde51e1674f121026f GIT binary patch literal 2205 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 literal 0 HcmV?d00001 diff --git a/TMessagesProj/src/main/res/drawable/star_reaction.xml b/TMessagesProj/src/main/res/drawable/star_reaction.xml new file mode 100644 index 00000000000..039a05db901 --- /dev/null +++ b/TMessagesProj/src/main/res/drawable/star_reaction.xml @@ -0,0 +1,111 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt" + android:viewportWidth="513" + android:viewportHeight="513" + android:width="30dp" + android:height="30dp"> + <group> + <clip-path + android:pathData="M0 0H512V512H0V0Z" /> + <path + android:pathData="M191.094 178.159L236.394 88.159C241.594 78.059 255.594 73.559 266.094 78.559C270.194 80.559 274.394 84.359 276.394 88.559L319.494 176.459C322.994 183.659 328.694 187.259 336.494 188.259L425.194 198.859C438.294 200.459 447.594 213.559 446.094 225.959C445.494 231.059 443.194 236.459 439.594 240.059L368.594 310.359C365.694 313.259 364.994 316.559 365.494 320.559L376.994 415.659C378.694 429.359 367.794 441.959 354.294 443.659C349.194 444.259 343.294 443.659 338.694 441.159L264.994 400.559C257.994 396.959 253.094 397.159 247.594 400.059L171.194 439.659C160.194 445.359 144.894 440.859 139.294 429.759C137.194 425.559 135.494 421.159 136.294 415.559L142.194 372.459C145.394 349.159 159.394 329.659 178.394 319.859L259.294 277.759C264.394 274.759 264.694 271.959 257.194 272.959L156.994 286.659C140.794 288.959 123.394 283.159 110.694 272.759L75.8937 243.859C66.1937 236.259 64.4937 219.359 72.6937 209.159C76.4937 204.459 82.5937 200.159 88.4937 199.359L178.894 187.659C184.694 187.059 188.494 183.459 191.094 178.159Z"> + <aapt:attr + name="android:fillColor"> + <gradient + android:startX="255.841" + android:startY="76.18" + android:endX="258.374" + android:endY="445.209" + android:tileMode="clamp"> + <item + android:color="#FFC126" + android:offset="0" /> + <item + android:color="#F6A113" + android:offset="0.5" /> + <item + android:color="#ED8200" + android:offset="1" /> + </gradient> + </aapt:attr> + </path> + <path + android:pathData="M364.898 417.23L352.847 321.646C351.817 313.406 354.452 305.887 361.044 299.604L432.679 229.961C434.224 228.416 435.048 225.223 435.048 223.06C435.048 217.807 429.297 212.32 424.25 211.702L335.221 201.409C322.758 199.864 313.34 192.83 307.778 181.5L267.929 99.2443C267.105 97.5964 264.794 91.234 259.022 91.0363C252.544 90.7345 246.475 93.2642 244.518 97.3842L201.777 183.759C197.142 193.029 188.181 198.893 177.881 200.232L88.8005 212.967C86.1225 213.276 82.7977 215.306 81.1497 217.469C78.3687 221.074 75.7937 229.609 82.431 235.125L114.208 262.222C124.096 270.359 140.169 277.501 152.838 275.75L253.855 262.675C261.58 261.542 269.348 261.684 272.85 268.585C275.293 274.359 274.616 282.677 265.758 287.209L183.693 330.374C168.243 338.305 157.259 357.343 154.787 374.75L148.71 418.503C148.401 420.46 149.328 425.322 150.667 426.764C154.066 430.575 160.128 431.208 164.66 428.942L240.982 389.684C251.694 384.225 262.715 385.152 272.088 390.302L345.881 431.317C348.044 432.45 351.443 432.862 353.812 432.347C358.962 431.111 365.722 423.822 364.898 417.23Z"> + <aapt:attr + name="android:fillColor"> + <gradient + android:startX="352.871" + android:startY="460.699" + android:endX="208.145" + android:endY="78.3559" + android:tileMode="clamp"> + <item + android:color="#FFA200" + android:offset="0" /> + <item + android:color="#FFC12F" + android:offset="0.5" /> + <item + android:color="#FFDF5E" + android:offset="1" /> + </gradient> + </aapt:attr> + </path> + <path + android:pathData="M364.898 417.23L352.847 321.646C351.817 313.406 354.452 305.887 361.044 299.604L432.679 229.961C434.224 228.416 435.048 225.223 435.048 223.06C435.048 217.807 429.297 212.32 424.25 211.702L335.221 201.409C322.758 199.864 313.34 192.83 307.778 181.5L267.929 99.2443C267.105 97.5964 264.794 91.234 259.022 91.0363C252.544 90.7345 246.475 93.2642 244.518 97.3842L201.777 183.759C197.142 193.029 188.056 197.393 177.756 198.732L88.6759 211.467C85.9979 211.776 82.7977 215.306 81.1497 217.469C78.3687 221.074 75.7937 229.609 82.431 235.125L114.208 262.222C124.096 270.359 140.169 277.501 152.838 275.75L253.855 262.675C261.58 261.542 269.348 261.684 272.85 268.585C275.293 274.359 274.616 282.677 265.758 287.209L183.693 330.374C168.243 338.305 157.259 357.343 154.787 374.75L148.71 418.503C148.401 420.46 149.328 425.322 150.667 426.764C154.066 430.575 160.128 431.208 164.66 428.942L240.982 389.684C251.694 384.225 262.715 385.152 272.088 390.302L345.881 431.317C348.044 432.45 351.443 432.862 353.812 432.347C358.962 431.111 365.722 423.822 364.898 417.23Z"> + <aapt:attr + name="android:fillColor"> + <gradient + android:startX="313.871" + android:startY="305.699" + android:endX="240.145" + android:endY="195.856" + android:tileMode="clamp"> + <item + android:color="#00FFFFFF" + android:offset="0" /> + <item + android:color="#3DFFFCEB" + android:offset="0.5" /> + <item + android:color="#7AFFFAD7" + android:offset="1" /> + </gradient> + </aapt:attr> + </path> + <path + android:pathData="M334.444 201.734C322.344 200.234 312.994 192.184 307.594 181.184L267.619 99.4841C266.294 95.8591 261.544 94.2341 258.294 94.4841C254.294 93.7341 248.419 95.7091 246.519 99.6091L202.969 184.484C198.469 193.484 189.394 200.284 179.394 201.584L91.1938 213.584C88.5938 213.884 84.5938 216.259 82.9938 218.359C80.1938 222.159 78.8938 230.084 83.1938 233.684L116.219 261.834C125.819 269.734 146.544 272.759 158.844 271.059L260.244 258.684C267.744 257.584 274.544 260.609 277.944 267.309C278.344 268.109 278.644 268.909 278.944 269.709C305.944 254.009 344.669 227.159 375.769 206.059L334.444 201.734Z" + android:fillColor="#FFED90" + android:fillAlpha="0.38" /> + <path + android:pathData="M90.0439 223.484L183.844 209.584C193.744 208.184 204.744 200.159 210.044 191.559L252.694 99.4089" + android:strokeColor="#FFFFFF" + android:strokeWidth="17" + android:strokeLineCap="round" + android:strokeLineJoin="round" /> + <path + android:pathData="M191.094 178.159L236.394 88.159C241.594 78.059 255.594 73.559 266.094 78.559C270.194 80.559 274.394 84.359 276.394 88.559L319.494 176.459C322.994 183.659 328.694 187.259 336.494 188.259L425.194 198.859C438.294 200.459 447.594 213.559 446.094 225.959C445.494 231.059 443.194 236.459 439.594 240.059L368.594 310.359C365.694 313.259 364.994 316.559 365.494 320.559L376.994 415.659C378.694 429.359 367.794 441.959 354.294 443.659C349.194 444.259 343.294 443.659 338.694 441.159L264.994 400.559C257.994 396.959 253.094 397.159 247.594 400.059L171.194 439.659C160.194 445.359 144.894 440.859 139.294 429.759C137.194 425.559 135.494 421.159 136.294 415.559L142.194 372.459C145.394 349.159 159.394 329.659 178.394 319.859L259.294 277.759C264.394 274.759 264.694 271.959 257.194 272.959L156.994 286.659C140.794 288.959 123.394 283.159 110.694 272.759L75.8937 243.859C66.1937 236.259 64.4937 219.359 72.6937 209.159C76.4937 204.459 82.5937 200.159 88.4937 199.359L178.894 187.659C184.694 187.059 188.494 183.459 191.094 178.159Z" + android:strokeWidth="6" + android:strokeLineCap="round" + android:strokeLineJoin="round"> + <aapt:attr + name="android:strokeColor"> + <gradient + android:startX="255.794" + android:startY="85.859" + android:endX="258.524" + android:endY="441.149" + android:tileMode="clamp"> + <item + android:color="#E98D30" + android:offset="0" /> + <item + android:color="#E57A1B" + android:offset="0.5" /> + <item + android:color="#E16806" + android:offset="1" /> + </gradient> + </aapt:attr> + </path> + </group> +</vector> \ No newline at end of file diff --git a/TMessagesProj/src/main/res/drawable/star_small_inner.xml b/TMessagesProj/src/main/res/drawable/star_small_inner.xml index 6a0ed0c3049..b79b31b7ca5 100644 --- a/TMessagesProj/src/main/res/drawable/star_small_inner.xml +++ b/TMessagesProj/src/main/res/drawable/star_small_inner.xml @@ -1,39 +1,20 @@ <vector xmlns:aapt="http://schemas.android.com/aapt" xmlns:android="http://schemas.android.com/apk/res/android" android:height="28dp" android:viewportHeight="84" android:viewportWidth="84" android:width="28dp"> - <path android:fillType="evenOdd" android:pathData="M30.673,26.951L38.611,11.046C39.526,9.211 41.74,8.474 43.556,9.4C44.268,9.763 44.845,10.351 45.198,11.074L52.695,26.413C53.307,27.666 54.504,28.521 55.877,28.687L71.574,30.582C73.705,30.839 75.227,32.794 74.972,34.948C74.867,35.835 74.466,36.66 73.836,37.285L61.428,49.595C60.927,50.092 60.685,50.796 60.772,51.5L62.834,68.118C63.129,70.497 61.46,72.668 59.107,72.966C58.215,73.079 57.31,72.907 56.52,72.473L43.412,65.267C42.463,64.746 41.322,64.731 40.36,65.227L26.779,72.237C24.868,73.224 22.527,72.457 21.551,70.525C21.186,69.802 21.051,68.983 21.165,68.179L22.251,60.555C22.782,56.826 25.075,53.591 28.397,51.884L43.482,44.133C43.885,43.926 44.045,43.429 43.84,43.022C43.682,42.706 43.342,42.528 42.996,42.578L24.547,45.236C21.727,45.643 18.867,44.842 16.656,43.026L10.512,37.981C8.758,36.541 8.491,33.937 9.916,32.165C10.578,31.341 11.529,30.806 12.571,30.671L28.324,28.631C29.334,28.5 30.215,27.871 30.673,26.951Z" android:strokeColor="#00000000" android:strokeWidth="1"> - <aapt:attr name="android:fillColor"> - <gradient android:endX="58.49" android:endY="78.313" android:startX="25.17" android:startY="9.008" android:type="linear"> - <item android:color="#FFFFD951" android:offset="0"/> - <item android:color="#FFFFB222" android:offset="1"/> - </gradient> - </aapt:attr> - </path> - <path android:fillAlpha="0.66026163" android:fillColor="#FFFFFF" android:fillType="evenOdd" android:pathData="M44.996,47.578C45.342,47.528 45.682,47.706 45.84,48.022C46.045,48.429 45.885,48.926 45.482,49.133L30.397,56.884C27.075,58.591 24.782,61.826 24.251,65.555L23.296,72.263C22.569,71.903 21.947,71.31 21.551,70.525C21.186,69.802 21.051,68.983 21.165,68.179L22.251,60.555C22.782,56.826 25.075,53.591 28.397,51.884L33.574,49.223L44.996,47.578Z" android:strokeAlpha="0.66026163" android:strokeColor="#00000000" android:strokeWidth="1"/> - <path android:fillAlpha="0.66026163" android:fillColor="#FFFFFF" android:fillType="evenOdd" android:pathData="M43.556,9.4C44.268,9.763 44.845,10.351 45.198,11.074L52.695,26.413C53.307,27.666 54.504,28.521 55.877,28.687L71.574,30.582C73.705,30.839 75.227,32.794 74.972,34.948C74.933,35.28 74.852,35.603 74.734,35.911C74.375,35.745 73.986,35.632 73.574,35.582L57.877,33.687C56.504,33.521 55.307,32.666 54.695,31.413L47.198,16.074C46.845,15.351 46.268,14.763 45.556,14.4C43.74,13.474 41.526,14.211 40.611,16.046L32.673,31.951C32.215,32.871 31.334,33.5 30.324,33.631L14.571,35.671C13.529,35.806 12.578,36.341 11.916,37.165C11.579,37.584 11.337,38.05 11.186,38.535L10.512,37.981C8.758,36.541 8.491,33.937 9.916,32.165C10.578,31.341 11.529,30.806 12.571,30.671L28.324,28.631C29.334,28.5 30.215,27.871 30.673,26.951L38.611,11.046C39.526,9.211 41.74,8.474 43.556,9.4Z" android:strokeAlpha="0.66026163" android:strokeColor="#00000000" android:strokeWidth="1"/> - <path android:fillType="nonZero" android:pathData="M37.179,10.332C38.491,7.703 41.673,6.644 44.282,7.974C45.305,8.495 46.13,9.337 46.636,10.371L54.132,25.71C54.507,26.477 55.236,26.998 56.069,27.099L71.766,28.993C74.777,29.357 76.919,32.109 76.561,35.136C76.414,36.381 75.851,37.54 74.963,38.421L62.555,50.73C62.407,50.878 62.333,51.09 62.36,51.303L64.422,67.921C64.825,71.172 62.54,74.144 59.308,74.554C58.08,74.709 56.836,74.472 55.75,73.875L42.641,66.67C42.16,66.405 41.582,66.397 41.094,66.649L27.513,73.659C24.809,75.054 21.499,73.97 20.123,71.247C19.61,70.231 19.421,69.081 19.581,67.954L20.667,60.329C21.271,56.088 23.881,52.406 27.666,50.461L38.641,44.821L24.776,46.82C21.627,47.274 18.435,46.427 15.918,44.483L15.641,44.263L9.496,39.217C7.064,37.221 6.695,33.618 8.669,31.162C9.589,30.017 10.913,29.272 12.365,29.084L28.118,27.044C28.599,26.982 29.02,26.681 29.242,26.237L37.179,10.332ZM42.829,10.825C41.808,10.304 40.562,10.719 40.042,11.761L32.105,27.666C31.409,29.061 30.07,30.018 28.529,30.217L12.776,32.257C12.145,32.339 11.567,32.664 11.163,33.167C10.287,34.256 10.452,35.862 11.527,36.744L17.672,41.79C19.536,43.32 21.944,43.995 24.319,43.653L42.767,40.994C43.797,40.846 44.803,41.374 45.27,42.303C45.868,43.492 45.399,44.947 44.213,45.557L29.129,53.307C26.269,54.776 24.293,57.564 23.835,60.781L22.749,68.405C22.681,68.884 22.762,69.373 22.979,69.804C23.555,70.944 24.926,71.393 26.045,70.815L39.627,63.806C41.061,63.065 42.767,63.087 44.183,63.865L57.291,71.07C57.785,71.342 58.349,71.449 58.906,71.379C60.38,71.192 61.433,69.823 61.246,68.315L59.184,51.697C59.036,50.502 59.448,49.305 60.302,48.459L72.709,36.149C73.082,35.779 73.321,35.289 73.383,34.76C73.535,33.478 72.634,32.322 71.383,32.17L55.685,30.276C53.772,30.045 52.107,28.855 51.257,27.115L43.761,11.776C43.559,11.364 43.232,11.03 42.829,10.825Z" android:strokeColor="#00000000" android:strokeWidth="1"> - <aapt:attr name="android:fillColor"> - <gradient android:endX="41.807" android:endY="74.914" android:startX="41.807" android:startY="6.644" android:type="linear"> - <item android:color="#FFE58F0D" android:offset="0"/> - <item android:color="#FFEB7915" android:offset="1"/> - </gradient> - </aapt:attr> - </path> - </vector> diff --git a/TMessagesProj/src/main/res/drawable/star_small_outline.xml b/TMessagesProj/src/main/res/drawable/star_small_outline.xml index 128391549d9..48c1af5fb95 100644 --- a/TMessagesProj/src/main/res/drawable/star_small_outline.xml +++ b/TMessagesProj/src/main/res/drawable/star_small_outline.xml @@ -1,5 +1,3 @@ <vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="28dp" android:viewportHeight="84" android:viewportWidth="84" android:width="28dp"> - <path android:fillColor="#FFFFFF" android:fillType="nonZero" android:pathData="M45.827,4.945C47.507,5.802 48.862,7.183 49.691,8.879L56.974,23.783L72.174,25.618C76.966,26.196 80.39,30.497 79.965,35.274L79.938,35.535C79.7,37.542 78.792,39.412 77.357,40.835L65.897,52.204L67.796,67.503C68.418,72.516 64.96,77.116 60.003,77.889L59.736,77.927C57.795,78.173 55.827,77.797 54.112,76.854L43.36,70.944L32.819,76.666C31.502,77.381 30.03,77.755 28.535,77.757L28.19,77.751L25.556,77.653C22.21,77.857 18.906,76.138 17.212,73.017L17.088,72.78C16.261,71.143 15.957,69.29 16.215,67.475L17.301,59.85C17.818,56.215 19.509,52.906 22.045,50.391L22.129,50.307L22.107,50.307C19.105,50.108 16.207,49.016 13.795,47.14L13.483,46.89L7.339,41.845C3.465,38.665 2.878,32.94 6.018,29.033C7.488,27.204 9.604,26.013 11.929,25.712L26.655,23.805L34.137,8.813C36.29,4.499 41.53,2.754 45.827,4.945Z" android:strokeColor="#00000000" android:strokeWidth="1"/> - </vector> diff --git a/TMessagesProj/src/main/res/drawable/warning_sign.xml b/TMessagesProj/src/main/res/drawable/warning_sign.xml new file mode 100644 index 00000000000..9b1ea10d4ba --- /dev/null +++ b/TMessagesProj/src/main/res/drawable/warning_sign.xml @@ -0,0 +1,13 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt" + android:viewportWidth="960" + android:viewportHeight="960" + android:width="24dp" + android:height="24dp"> + <group + android:translateX="-0" + android:translateY="960"> + <path + android:pathData="M80 -78q-15 0 -27 -8t-19 -19q-7 -11 -7.5 -25t7.5 -28l400 -689q8 -14 20 -20t26 -6q14 0 26 6t20 20l400 689q8 14 7.5 28t-7.5 25q-7 11 -19 19t-27 8H80Zm401 -135q22 0 37.5 -15.5T534 -266q0 -22 -15.5 -37.5T481 -319q-22 0 -37.5 15.5T428 -266q0 22 15.5 37.5T481 -213Zm0 -143q22 0 37.5 -15.5T534 -409v-98q0 -22 -15.5 -37.5T481 -560q-22 0 -37.5 15.5T428 -507v98q0 22 15.5 37.5T481 -356Z" + android:fillColor="#FFFFFF" /> + </group> +</vector> \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/roundcamera_flash_off.json b/TMessagesProj/src/main/res/raw/roundcamera_flash_off.json new file mode 100644 index 00000000000..a87128fc4de --- /dev/null +++ b/TMessagesProj/src/main/res/raw/roundcamera_flash_off.json @@ -0,0 +1 @@ +{"v":"5.12.1","fr":60,"ip":0,"op":30,"w":240,"h":240,"nm":"flash_slash","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Null 1","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.732]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.868]},"o":{"x":[0.167],"y":[0.121]},"t":1,"s":[-0.645]},{"i":{"x":[0.833],"y":[0.749]},"o":{"x":[0.167],"y":[0.227]},"t":2,"s":[-2.076]},{"i":{"x":[0.833],"y":[0.841]},"o":{"x":[0.167],"y":[0.125]},"t":3,"s":[-2.909]},{"i":{"x":[0.833],"y":[0.848]},"o":{"x":[0.167],"y":[0.175]},"t":4,"s":[-4.583]},{"i":{"x":[0.833],"y":[0.882]},"o":{"x":[0.167],"y":[0.184]},"t":5,"s":[-6.097]},{"i":{"x":[0.833],"y":[0.841]},"o":{"x":[0.167],"y":[0.284]},"t":6,"s":[-7.351]},{"i":{"x":[0.833],"y":[1.023]},"o":{"x":[0.167],"y":[0.175]},"t":7,"s":[-7.871]},{"i":{"x":[0.833],"y":[0.591]},"o":{"x":[0.167],"y":[0.018]},"t":8,"s":[-8.346]},{"i":{"x":[0.833],"y":[0.81]},"o":{"x":[0.167],"y":[0.105]},"t":9,"s":[-7.738]},{"i":{"x":[0.833],"y":[0.874]},"o":{"x":[0.167],"y":[0.148]},"t":10,"s":[-5.362]},{"i":{"x":[0.833],"y":[0.761]},"o":{"x":[0.167],"y":[0.247]},"t":11,"s":[-2.317]},{"i":{"x":[0.833],"y":[0.846]},"o":{"x":[0.167],"y":[0.128]},"t":12,"s":[-0.768]},{"i":{"x":[0.833],"y":[0.882]},"o":{"x":[0.167],"y":[0.182]},"t":13,"s":[2.125]},{"i":{"x":[0.833],"y":[0.796]},"o":{"x":[0.167],"y":[0.282]},"t":14,"s":[4.568]},{"i":{"x":[0.833],"y":[0.912]},"o":{"x":[0.167],"y":[0.141]},"t":15,"s":[5.595]},{"i":{"x":[0.833],"y":[1.278]},"o":{"x":[0.167],"y":[1.732]},"t":16,"s":[7.081]},{"i":{"x":[0.833],"y":[0.654]},"o":{"x":[0.167],"y":[0.064]},"t":17,"s":[7.156]},{"i":{"x":[0.833],"y":[0.818]},"o":{"x":[0.167],"y":[0.11]},"t":18,"s":[6.83]},{"i":{"x":[0.833],"y":[0.875]},"o":{"x":[0.167],"y":[0.154]},"t":19,"s":[5.803]},{"i":{"x":[0.833],"y":[0.764]},"o":{"x":[0.167],"y":[0.252]},"t":20,"s":[4.585]},{"i":{"x":[0.833],"y":[0.847]},"o":{"x":[0.167],"y":[0.129]},"t":21,"s":[3.981]},{"i":{"x":[0.833],"y":[0.882]},"o":{"x":[0.167],"y":[0.184]},"t":22,"s":[2.874]},{"i":{"x":[0.833],"y":[0.783]},"o":{"x":[0.167],"y":[0.284]},"t":23,"s":[1.956]},{"i":{"x":[0.833],"y":[0.858]},"o":{"x":[0.167],"y":[0.135]},"t":24,"s":[1.574]},{"i":{"x":[0.833],"y":[0.886]},"o":{"x":[0.167],"y":[0.201]},"t":25,"s":[0.96]},{"i":{"x":[0.833],"y":[0.797]},"o":{"x":[0.167],"y":[0.308]},"t":26,"s":[0.525]},{"i":{"x":[0.833],"y":[0.869]},"o":{"x":[0.167],"y":[0.141]},"t":27,"s":[0.364]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.23]},"t":28,"s":[0.132]},{"t":29,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.732},"o":{"x":0.167,"y":0.167},"t":0,"s":[120,120,0],"to":[-0.065,-0.172,0],"ti":[0.208,0.554,0]},{"i":{"x":0.833,"y":0.868},"o":{"x":0.167,"y":0.121},"t":1,"s":[119.613,118.968,0],"to":[-0.208,-0.554,0],"ti":[0.226,0.604,0]},{"i":{"x":0.833,"y":0.749},"o":{"x":0.167,"y":0.227},"t":2,"s":[118.754,116.678,0],"to":[-0.226,-0.604,0],"ti":[0.251,0.668,0]},{"i":{"x":0.833,"y":0.841},"o":{"x":0.167,"y":0.125},"t":3,"s":[118.255,115.346,0],"to":[-0.251,-0.668,0],"ti":[0.319,0.85,0]},{"i":{"x":0.833,"y":0.848},"o":{"x":0.167,"y":0.175},"t":4,"s":[117.25,112.668,0],"to":[-0.319,-0.85,0],"ti":[0.277,0.738,0]},{"i":{"x":0.833,"y":0.882},"o":{"x":0.167,"y":0.184},"t":5,"s":[116.342,110.245,0],"to":[-0.277,-0.738,0],"ti":[0.177,0.473,0]},{"i":{"x":0.833,"y":0.85},"o":{"x":0.167,"y":0.284},"t":6,"s":[115.589,108.239,0],"to":[-0.177,-0.473,0],"ti":[0.028,0.226,0]},{"i":{"x":0.833,"y":0.664},"o":{"x":0.167,"y":0.187},"t":7,"s":[115.278,107.407,0],"to":[-0.028,-0.226,0],"ti":[-0.271,-0.175,0]},{"i":{"x":0.833,"y":0.63},"o":{"x":0.167,"y":0.111},"t":8,"s":[115.424,106.881,0],"to":[0.271,0.175,0],"ti":[-1.057,-1.207,0]},{"i":{"x":0.833,"y":0.814},"o":{"x":0.167,"y":0.108},"t":9,"s":[116.906,108.458,0],"to":[1.057,1.207,0],"ti":[-1.786,-2.119,0]},{"i":{"x":0.833,"y":0.875},"o":{"x":0.167,"y":0.151},"t":10,"s":[121.766,114.121,0],"to":[1.786,2.119,0],"ti":[-1.462,-1.768,0]},{"i":{"x":0.833,"y":0.762},"o":{"x":0.167,"y":0.249},"t":11,"s":[127.622,121.174,0],"to":[1.462,1.768,0],"ti":[-1.381,-1.692,0]},{"i":{"x":0.833,"y":0.847},"o":{"x":0.167,"y":0.128},"t":12,"s":[130.538,124.729,0],"to":[1.381,1.692,0],"ti":[-1.641,-2.023,0]},{"i":{"x":0.833,"y":0.882},"o":{"x":0.167,"y":0.183},"t":13,"s":[135.908,131.326,0],"to":[1.641,2.023,0],"ti":[-1.056,-1.31,0]},{"i":{"x":0.833,"y":0.803},"o":{"x":0.167,"y":0.283},"t":14,"s":[140.383,136.865,0],"to":[1.056,1.31,0],"ti":[-0.721,-0.924,0]},{"i":{"x":0.833,"y":0.884},"o":{"x":0.167,"y":0.144},"t":15,"s":[142.247,139.183,0],"to":[0.721,0.924,0],"ti":[-0.205,-0.443,0]},{"i":{"x":0.833,"y":0.813},"o":{"x":0.167,"y":0.297},"t":16,"s":[144.709,142.412,0],"to":[0.205,0.443,0],"ti":[0.46,0.302,0]},{"i":{"x":0.833,"y":0.698},"o":{"x":0.167,"y":0.15},"t":17,"s":[143.478,141.841,0],"to":[-0.46,-0.302,0],"ti":[0.904,0.777,0]},{"i":{"x":0.833,"y":0.826},"o":{"x":0.167,"y":0.115},"t":18,"s":[141.95,140.598,0],"to":[-0.904,-0.777,0],"ti":[1.342,1.204,0]},{"i":{"x":0.833,"y":0.877},"o":{"x":0.167,"y":0.16},"t":19,"s":[138.056,137.179,0],"to":[-1.342,-1.204,0],"ti":[1.022,0.941,0]},{"i":{"x":0.833,"y":0.767},"o":{"x":0.167,"y":0.258},"t":20,"s":[133.897,133.373,0],"to":[-1.022,-0.941,0],"ti":[0.916,0.859,0]},{"i":{"x":0.833,"y":0.849},"o":{"x":0.167,"y":0.13},"t":21,"s":[131.923,131.534,0],"to":[-0.916,-0.859,0],"ti":[1.059,1.004,0]},{"i":{"x":0.833,"y":0.883},"o":{"x":0.167,"y":0.186},"t":22,"s":[128.403,128.217,0],"to":[-1.059,-1.004,0],"ti":[0.665,0.637,0]},{"i":{"x":0.833,"y":0.785},"o":{"x":0.167,"y":0.287},"t":23,"s":[125.567,125.509,0],"to":[-0.665,-0.637,0],"ti":[0.497,0.481,0]},{"i":{"x":0.833,"y":0.859},"o":{"x":0.167,"y":0.136},"t":24,"s":[124.412,124.396,0],"to":[-0.497,-0.481,0],"ti":[0.515,0.502,0]},{"i":{"x":0.833,"y":0.886},"o":{"x":0.167,"y":0.203},"t":25,"s":[122.587,122.626,0],"to":[-0.515,-0.502,0],"ti":[0.287,0.282,0]},{"i":{"x":0.833,"y":0.799},"o":{"x":0.167,"y":0.312},"t":26,"s":[121.323,121.386,0],"to":[-0.287,-0.282,0],"ti":[0.183,0.183,0]},{"i":{"x":0.833,"y":0.883},"o":{"x":0.167,"y":0.142},"t":27,"s":[120.865,120.932,0],"to":[-0.183,-0.183,0],"ti":[0.144,0.155,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.291},"t":28,"s":[120.222,120.289,0],"to":[-0.144,-0.155,0],"ti":[0.037,0.048,0]},{"t":29,"s":[120,120,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.732,0.732,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.868,0.868,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.121,0.121,0]},"t":1,"s":[100.323,100.323,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.749,0.749,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.227,0.227,0]},"t":2,"s":[101.038,101.038,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.841,0.841,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.125,0.125,0]},"t":3,"s":[101.454,101.454,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.848,0.848,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.175,0.175,0]},"t":4,"s":[102.291,102.291,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.882,0.882,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.184,0.184,0]},"t":5,"s":[103.049,103.049,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.869,0.869,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.284,0.284,0]},"t":6,"s":[103.675,103.675,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1.22,1.22,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.23,0.23,0]},"t":7,"s":[103.935,103.935,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.621,0.621,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.06,0.06,0]},"t":8,"s":[104.083,104.083,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.813,0.813,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.107,0.107,0]},"t":9,"s":[103.546,103.546,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.875,0.875,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.151,0.151,0]},"t":10,"s":[101.643,101.643,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.762,0.762,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.249,0.249,0]},"t":11,"s":[99.281,99.281,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.847,0.847,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.128,0.128,0]},"t":12,"s":[98.093,98.093,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.882,0.882,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.183,0.183,0]},"t":13,"s":[95.889,95.889,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.801,0.801,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.283,0.283,0]},"t":14,"s":[94.04,94.04,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.934,0.934,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.144,0.144,0]},"t":15,"s":[93.267,93.267,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.756,0.756,1]},"o":{"x":[0.167,0.167,0.167],"y":[-0.307,-0.307,0]},"t":16,"s":[92.197,92.197,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.69,0.69,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.127,0.127,0]},"t":17,"s":[92.425,92.425,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.824,0.824,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.114,0.114,0]},"t":18,"s":[92.866,92.866,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.877,0.877,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.159,0.159,0]},"t":19,"s":[94.062,94.062,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.767,0.767,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.256,0.256,0]},"t":20,"s":[95.386,95.386,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.849,0.849,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.13,0.13,0]},"t":21,"s":[96.023,96.023,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.882,0.882,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.186,0.186,0]},"t":22,"s":[97.171,97.171,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.784,0.784,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.286,0.286,0]},"t":23,"s":[98.107,98.107,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.858,0.858,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.136,0.136,0]},"t":24,"s":[98.491,98.491,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.886,0.886,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.203,0.203,0]},"t":25,"s":[99.101,99.101,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.799,0.799,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.311,0.311,0]},"t":26,"s":[99.527,99.527,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.88,0.88,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.142,0.142,0]},"t":27,"s":[99.683,99.683,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.275,0.275,0]},"t":28,"s":[99.904,99.904,100]},{"t":29,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Subtract","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[0]},{"t":10,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-41.387,5,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[80,80,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.173,0.329],[-0.211,0.306],[0,0]],"o":[[0,0],[0,0],[-0.372,0],[-0.173,-0.329],[0,0],[0,0]],"v":[[2.954,0.997],[1.131,2.5],[-1.954,2.5],[-2.839,1.965],[-2.777,0.932],[-0.409,-2.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1000,1000],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Subtract","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Vector 177 (Stroke)","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[0]},{"t":11,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-8.114,56.905,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[80,80,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.828,0.987],[0,0],[0,0],[0,0]],"o":[[-0.183,1.275],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.974,2.727],[-0.727,3.732],[2.989,-0.696],[-0.374,-4.193],[-2.196,-2.69]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1000,1000],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector 177 (Stroke)","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Vector 176","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-14,14,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[7.5,7.5],[-7.5,-7.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"rd","nm":"Round Corners 1","r":{"a":0,"k":1,"ix":1},"ix":2,"mn":"ADBE Vector Filter - RC","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.6],"y":[0]},"t":0,"s":[100]},{"t":19,"s":[0]}],"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1000,1000],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector 176","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Vector 177","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-0.948,-0.008,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.22,"y":0},"t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.905,3.905],[3.905,3.905],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[3.905,3.905],[3.905,-3.905],[0,0],[0,0]],"v":[[0,-120],[120,-120],[120,120],[-120,120],[-120,0],[-70.572,-49.428],[-57.071,-35.926],[-42.929,-35.926],[-42.929,-50.068],[-56.43,-63.57]],"c":true}]},{"t":19,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.905,3.905],[3.905,3.905],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[3.905,3.905],[3.905,-3.905],[0,0],[0,0]],"v":[[0,-120],[120,-120],[120,120],[-120,120],[-120,0],[-70.572,-49.428],[60.429,81.573],[74.571,81.573],[74.571,67.431],[-56.43,-63.57]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.181,0.216],[0,0],[0,0],[0,0],[0.167,-0.242],[0,0]],"o":[[0,0],[-0.04,0.279],[0,0],[0,0],[0,0],[0.038,-0.291],[0,0],[0,0]],"v":[[-1.759,2.001],[-2.701,8.56],[-2.21,8.78],[5.997,-0.999],[0.945,-0.999],[1.933,-8.564],[1.425,-8.759],[-5.997,2.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1000,1000],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector 177","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"ct":1,"bm":0}],"markers":[],"props":{}} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/roundcamera_flash_on.json b/TMessagesProj/src/main/res/raw/roundcamera_flash_on.json new file mode 100644 index 00000000000..0db9ca13275 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/roundcamera_flash_on.json @@ -0,0 +1 @@ +{"v":"5.12.1","fr":60,"ip":0,"op":30,"w":240,"h":240,"nm":"slash_flash","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Null 1","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.732]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.868]},"o":{"x":[0.167],"y":[0.121]},"t":1,"s":[0.645]},{"i":{"x":[0.833],"y":[0.749]},"o":{"x":[0.167],"y":[0.227]},"t":2,"s":[2.076]},{"i":{"x":[0.833],"y":[0.841]},"o":{"x":[0.167],"y":[0.125]},"t":3,"s":[2.909]},{"i":{"x":[0.833],"y":[0.848]},"o":{"x":[0.167],"y":[0.175]},"t":4,"s":[4.583]},{"i":{"x":[0.833],"y":[0.882]},"o":{"x":[0.167],"y":[0.184]},"t":5,"s":[6.097]},{"i":{"x":[0.833],"y":[0.841]},"o":{"x":[0.167],"y":[0.284]},"t":6,"s":[7.351]},{"i":{"x":[0.833],"y":[1.023]},"o":{"x":[0.167],"y":[0.175]},"t":7,"s":[7.871]},{"i":{"x":[0.833],"y":[0.591]},"o":{"x":[0.167],"y":[0.018]},"t":8,"s":[8.346]},{"i":{"x":[0.833],"y":[0.81]},"o":{"x":[0.167],"y":[0.105]},"t":9,"s":[7.738]},{"i":{"x":[0.833],"y":[0.874]},"o":{"x":[0.167],"y":[0.148]},"t":10,"s":[5.362]},{"i":{"x":[0.833],"y":[0.761]},"o":{"x":[0.167],"y":[0.247]},"t":11,"s":[2.317]},{"i":{"x":[0.833],"y":[0.846]},"o":{"x":[0.167],"y":[0.128]},"t":12,"s":[0.768]},{"i":{"x":[0.833],"y":[0.882]},"o":{"x":[0.167],"y":[0.182]},"t":13,"s":[-2.125]},{"i":{"x":[0.833],"y":[0.796]},"o":{"x":[0.167],"y":[0.282]},"t":14,"s":[-4.568]},{"i":{"x":[0.833],"y":[0.912]},"o":{"x":[0.167],"y":[0.141]},"t":15,"s":[-5.595]},{"i":{"x":[0.833],"y":[1.278]},"o":{"x":[0.167],"y":[1.732]},"t":16,"s":[-7.081]},{"i":{"x":[0.833],"y":[0.654]},"o":{"x":[0.167],"y":[0.064]},"t":17,"s":[-7.156]},{"i":{"x":[0.833],"y":[0.818]},"o":{"x":[0.167],"y":[0.11]},"t":18,"s":[-6.83]},{"i":{"x":[0.833],"y":[0.875]},"o":{"x":[0.167],"y":[0.154]},"t":19,"s":[-5.803]},{"i":{"x":[0.833],"y":[0.764]},"o":{"x":[0.167],"y":[0.252]},"t":20,"s":[-4.585]},{"i":{"x":[0.833],"y":[0.847]},"o":{"x":[0.167],"y":[0.129]},"t":21,"s":[-3.981]},{"i":{"x":[0.833],"y":[0.882]},"o":{"x":[0.167],"y":[0.184]},"t":22,"s":[-2.874]},{"i":{"x":[0.833],"y":[0.783]},"o":{"x":[0.167],"y":[0.284]},"t":23,"s":[-1.956]},{"i":{"x":[0.833],"y":[0.858]},"o":{"x":[0.167],"y":[0.135]},"t":24,"s":[-1.574]},{"i":{"x":[0.833],"y":[0.886]},"o":{"x":[0.167],"y":[0.201]},"t":25,"s":[-0.96]},{"i":{"x":[0.833],"y":[0.797]},"o":{"x":[0.167],"y":[0.308]},"t":26,"s":[-0.525]},{"i":{"x":[0.833],"y":[0.869]},"o":{"x":[0.167],"y":[0.141]},"t":27,"s":[-0.364]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.23]},"t":28,"s":[-0.132]},{"t":29,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.732},"o":{"x":0.167,"y":0.167},"t":0,"s":[120,120,0],"to":[0.215,0.204,0],"ti":[-0.692,-0.658,0]},{"i":{"x":0.833,"y":0.868},"o":{"x":0.167,"y":0.121},"t":1,"s":[121.29,121.226,0],"to":[0.692,0.658,0],"ti":[-0.755,-0.717,0]},{"i":{"x":0.833,"y":0.749},"o":{"x":0.167,"y":0.227},"t":2,"s":[124.153,123.945,0],"to":[0.755,0.717,0],"ti":[-0.835,-0.794,0]},{"i":{"x":0.833,"y":0.841},"o":{"x":0.167,"y":0.125},"t":3,"s":[125.817,125.527,0],"to":[0.835,0.794,0],"ti":[-1.063,-1.01,0]},{"i":{"x":0.833,"y":0.848},"o":{"x":0.167,"y":0.175},"t":4,"s":[129.165,128.707,0],"to":[1.063,1.01,0],"ti":[-0.923,-0.877,0]},{"i":{"x":0.833,"y":0.882},"o":{"x":0.167,"y":0.184},"t":5,"s":[132.194,131.585,0],"to":[0.923,0.877,0],"ti":[-0.591,-0.562,0]},{"i":{"x":0.833,"y":0.827},"o":{"x":0.167,"y":0.284},"t":6,"s":[134.702,133.967,0],"to":[0.591,0.562,0],"ti":[-0.374,-0.324,0]},{"i":{"x":0.833,"y":0.851},"o":{"x":0.167,"y":0.161},"t":7,"s":[135.741,134.954,0],"to":[0.374,0.324,0],"ti":[-0.106,0.01,0]},{"i":{"x":0.833,"y":0.577},"o":{"x":0.167,"y":0.19},"t":8,"s":[136.943,135.911,0],"to":[0.106,-0.01,0],"ti":[0.552,0.85,0]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.104},"t":9,"s":[136.379,134.895,0],"to":[-0.552,-0.85,0],"ti":[1.081,1.561,0]},{"i":{"x":0.833,"y":0.874},"o":{"x":0.167,"y":0.147},"t":10,"s":[133.63,130.81,0],"to":[-1.081,-1.561,0],"ti":[0.946,1.329,0]},{"i":{"x":0.833,"y":0.76},"o":{"x":0.167,"y":0.246},"t":11,"s":[129.892,125.529,0],"to":[-0.946,-1.329,0],"ti":[0.934,1.289,0]},{"i":{"x":0.833,"y":0.846},"o":{"x":0.167,"y":0.128},"t":12,"s":[127.952,122.834,0],"to":[-0.934,-1.289,0],"ti":[1.133,1.551,0]},{"i":{"x":0.833,"y":0.882},"o":{"x":0.167,"y":0.181},"t":13,"s":[124.287,117.793,0],"to":[-1.133,-1.551,0],"ti":[0.743,1.01,0]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.281},"t":14,"s":[121.155,113.526,0],"to":[-0.743,-1.01,0],"ti":[0.563,0.737,0]},{"i":{"x":0.833,"y":0.892},"o":{"x":0.167,"y":0.139},"t":15,"s":[119.83,111.731,0],"to":[-0.563,-0.737,0],"ti":[0.492,0.488,0]},{"i":{"x":0.833,"y":0.873},"o":{"x":0.167,"y":0.36},"t":16,"s":[117.774,109.104,0],"to":[-0.492,-0.488,0],"ti":[0.17,-0.025,0]},{"i":{"x":0.833,"y":0.672},"o":{"x":0.167,"y":0.242},"t":17,"s":[116.88,108.802,0],"to":[-0.17,0.025,0],"ti":[-0.003,-0.332,0]},{"i":{"x":0.833,"y":0.813},"o":{"x":0.167,"y":0.112},"t":18,"s":[116.753,109.254,0],"to":[0.003,0.332,0],"ti":[-0.097,-0.571,0]},{"i":{"x":0.833,"y":0.874},"o":{"x":0.167,"y":0.15},"t":19,"s":[116.896,110.796,0],"to":[0.097,0.571,0],"ti":[-0.117,-0.472,0]},{"i":{"x":0.833,"y":0.761},"o":{"x":0.167,"y":0.248},"t":20,"s":[117.333,112.683,0],"to":[0.117,0.472,0],"ti":[-0.136,-0.448,0]},{"i":{"x":0.833,"y":0.846},"o":{"x":0.167,"y":0.128},"t":21,"s":[117.599,113.627,0],"to":[0.136,0.448,0],"ti":[-0.175,-0.534,0]},{"i":{"x":0.833,"y":0.882},"o":{"x":0.167,"y":0.182},"t":22,"s":[118.147,115.373,0],"to":[0.175,0.534,0],"ti":[-0.121,-0.345,0]},{"i":{"x":0.833,"y":0.781},"o":{"x":0.167,"y":0.282},"t":23,"s":[118.652,116.834,0],"to":[0.121,0.345,0],"ti":[-0.1,-0.266,0]},{"i":{"x":0.833,"y":0.857},"o":{"x":0.167,"y":0.135},"t":24,"s":[118.875,117.443,0],"to":[0.1,0.266,0],"ti":[-0.111,-0.281,0]},{"i":{"x":0.833,"y":0.885},"o":{"x":0.167,"y":0.199},"t":25,"s":[119.252,118.427,0],"to":[0.111,0.281,0],"ti":[-0.066,-0.161,0]},{"i":{"x":0.833,"y":0.795},"o":{"x":0.167,"y":0.306},"t":26,"s":[119.539,119.129,0],"to":[0.066,0.161,0],"ti":[-0.047,-0.106,0]},{"i":{"x":0.833,"y":0.857},"o":{"x":0.167,"y":0.141},"t":27,"s":[119.65,119.39,0],"to":[0.047,0.106,0],"ti":[-0.058,-0.102,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.2},"t":28,"s":[119.82,119.767,0],"to":[0.058,0.102,0],"ti":[-0.03,-0.039,0]},{"t":29,"s":[120,120,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.732,0.732,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.868,0.868,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.121,0.121,0]},"t":1,"s":[99.355,99.355,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.749,0.749,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.227,0.227,0]},"t":2,"s":[97.924,97.924,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.841,0.841,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.125,0.125,0]},"t":3,"s":[97.091,97.091,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.848,0.848,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.175,0.175,0]},"t":4,"s":[95.417,95.417,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.882,0.882,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.184,0.184,0]},"t":5,"s":[93.903,93.903,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.826,0.826,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.284,0.284,0]},"t":6,"s":[92.649,92.649,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.972,0.972,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.16,0.16,0]},"t":7,"s":[92.129,92.129,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.548,0.548,1]},"o":{"x":[0.167,0.167,0.167],"y":[-0.042,-0.042,0]},"t":8,"s":[91.564,91.564,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.806,0.806,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.102,0.102,0]},"t":9,"s":[91.94,91.94,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.874,0.874,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.146,0.146,0]},"t":10,"s":[93.6,93.6,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.76,0.76,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.245,0.245,0]},"t":11,"s":[95.805,95.805,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.846,0.846,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.128,0.128,0]},"t":12,"s":[96.941,96.941,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.882,0.882,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.181,0.181,0]},"t":13,"s":[99.076,99.076,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.791,0.791,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.281,0.281,0]},"t":14,"s":[100.893,100.893,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.892,0.892,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.138,0.138,0]},"t":15,"s":[101.659,101.659,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.928,0.928,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.367,0.367,0]},"t":16,"s":[102.818,102.818,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.316,0.316,1]},"o":{"x":[0.167,0.167,0.167],"y":[-0.512,-0.512,0]},"t":17,"s":[103.159,103.159,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.795,0.795,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.095,0.095,0]},"t":18,"s":[103.111,103.111,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.872,0.872,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.14,0.14,0]},"t":19,"s":[102.767,102.767,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.757,0.757,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.24,0.24,0]},"t":20,"s":[102.262,102.262,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.845,0.845,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.127,0.127,0]},"t":21,"s":[101.995,101.995,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.881,0.881,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.18,0.18,0]},"t":22,"s":[101.483,101.483,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.78,0.78,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.279,0.279,0]},"t":23,"s":[101.04,101.04,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.856,0.856,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.134,0.134,0]},"t":24,"s":[100.852,100.852,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.885,0.885,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.197,0.197,0]},"t":25,"s":[100.541,100.541,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.794,0.794,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.303,0.303,0]},"t":26,"s":[100.315,100.315,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.849,0.849,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.14,0.14,0]},"t":27,"s":[100.229,100.229,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.187,0.187,0]},"t":28,"s":[100.102,100.102,100]},{"t":29,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Subtract","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[100]},{"t":12,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-41.387,5,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[80,80,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.173,0.329],[-0.211,0.306],[0,0]],"o":[[0,0],[0,0],[-0.372,0],[-0.173,-0.329],[0,0],[0,0]],"v":[[2.954,0.997],[1.131,2.5],[-1.954,2.5],[-2.839,1.965],[-2.777,0.932],[-0.409,-2.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1000,1000],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Subtract","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Vector 177 (Stroke)","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[100]},{"t":10,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-8.114,56.905,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[80,80,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.828,0.987],[0,0],[0,0],[0,0]],"o":[[-0.183,1.275],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.974,2.727],[-0.727,3.732],[2.989,-0.696],[-0.374,-4.193],[-2.196,-2.69]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1000,1000],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector 177 (Stroke)","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Vector 176","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-15,15,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[7.5,7.5],[-7.5,-7.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"rd","nm":"Round Corners 1","r":{"a":0,"k":1,"ix":1},"ix":2,"mn":"ADBE Vector Filter - RC","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0]},{"t":19,"s":[100]}],"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1000,1000],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector 176","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Vector 177","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-0.948,-0.008,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.905,3.905],[3.905,3.905],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[3.905,3.905],[3.905,-3.905],[0,0],[0,0]],"v":[[0,-120],[120,-120],[120,120],[-120,120],[-120,0],[-70.572,-49.428],[60.429,81.573],[74.571,81.573],[74.571,67.431],[-56.43,-63.57]],"c":true}]},{"t":15,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.905,3.905],[3.905,3.905],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[3.905,3.905],[3.905,-3.905],[0,0],[0,0]],"v":[[0,-120],[120,-120],[120,120],[-120,120],[-120,0],[-70.572,-49.428],[-57.071,-35.926],[-42.929,-35.926],[-42.929,-50.068],[-56.43,-63.57]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.181,0.216],[0,0],[0,0],[0,0],[0.167,-0.242],[0,0]],"o":[[0,0],[-0.04,0.279],[0,0],[0,0],[0,0],[0.038,-0.291],[0,0],[0,0]],"v":[[-1.759,2.001],[-2.701,8.56],[-2.21,8.78],[5.997,-0.999],[0.945,-0.999],[1.933,-8.564],[1.425,-8.759],[-5.997,2.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1000,1000],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector 177","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"ct":1,"bm":0}],"markers":[],"props":{}} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/roundcamera_flip.json b/TMessagesProj/src/main/res/raw/roundcamera_flip.json new file mode 100644 index 00000000000..4005960a907 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/roundcamera_flip.json @@ -0,0 +1 @@ +{"v":"5.12.1","fr":60,"ip":0,"op":30,"w":240,"h":240,"nm":"Flip","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Vector","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-3.919,0],[-1.236,3.496]],"o":[[1.236,3.496],[3.919,0],[0,0]],"v":[[-8.488,3],[0,9],[8.488,3]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[3.919,0],[1.236,-3.496]],"o":[[-1.236,-3.496],[-3.919,0],[0,0]],"v":[[8.488,-3],[0,-9],[-8.488,-3]],"c":false},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-5,-3],[-9,-3],[-9,-7]],"c":false},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[5,3],[9,3],[9,7]],"c":false},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1000,1000],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":2,"ty":3,"nm":"Vector","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.727]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.867]},"o":{"x":[0.167],"y":[0.12]},"t":1,"s":[-8.843]},{"i":{"x":[0.833],"y":[0.743]},"o":{"x":[0.167],"y":[0.223]},"t":2,"s":[-28.989]},{"i":{"x":[0.833],"y":[0.837]},"o":{"x":[0.167],"y":[0.123]},"t":3,"s":[-41.026]},{"i":{"x":[0.833],"y":[0.843]},"o":{"x":[0.167],"y":[0.171]},"t":4,"s":[-66.074]},{"i":{"x":[0.833],"y":[0.88]},"o":{"x":[0.167],"y":[0.178]},"t":5,"s":[-89.999]},{"i":{"x":[0.833],"y":[0.773]},"o":{"x":[0.167],"y":[0.273]},"t":6,"s":[-111.171]},{"i":{"x":[0.833],"y":[0.882]},"o":{"x":[0.167],"y":[0.132]},"t":7,"s":[-120.494]},{"i":{"x":[0.833],"y":[0.779]},"o":{"x":[0.167],"y":[0.282]},"t":8,"s":[-136.516]},{"i":{"x":[0.833],"y":[0.854]},"o":{"x":[0.167],"y":[0.134]},"t":9,"s":[-143.253]},{"i":{"x":[0.833],"y":[0.884]},"o":{"x":[0.167],"y":[0.194]},"t":10,"s":[-154.392]},{"i":{"x":[0.833],"y":[0.786]},"o":{"x":[0.167],"y":[0.294]},"t":11,"s":[-162.793]},{"i":{"x":[0.833],"y":[0.858]},"o":{"x":[0.167],"y":[0.137]},"t":12,"s":[-166.118]},{"i":{"x":[0.833],"y":[0.886]},"o":{"x":[0.167],"y":[0.203]},"t":13,"s":[-171.317]},{"i":{"x":[0.833],"y":[0.795]},"o":{"x":[0.167],"y":[0.308]},"t":14,"s":[-174.947]},{"i":{"x":[0.833],"y":[0.864]},"o":{"x":[0.167],"y":[0.14]},"t":15,"s":[-176.295]},{"i":{"x":[0.833],"y":[0.889]},"o":{"x":[0.167],"y":[0.216]},"t":16,"s":[-178.268]},{"i":{"x":[0.833],"y":[0.81]},"o":{"x":[0.167],"y":[0.332]},"t":17,"s":[-179.506]},{"i":{"x":[0.833],"y":[0.877]},"o":{"x":[0.167],"y":[0.148]},"t":18,"s":[-179.92]},{"i":{"x":[0.833],"y":[0.899]},"o":{"x":[0.167],"y":[0.26]},"t":19,"s":[-180.452]},{"i":{"x":[0.833],"y":[0.892]},"o":{"x":[0.167],"y":[0.468]},"t":20,"s":[-180.704]},{"i":{"x":[0.833],"y":[1.233]},"o":{"x":[0.167],"y":[0.368]},"t":21,"s":[-180.758]},{"i":{"x":[0.833],"y":[0.854]},"o":{"x":[0.167],"y":[0.061]},"t":22,"s":[-180.774]},{"i":{"x":[0.833],"y":[0.725]},"o":{"x":[0.167],"y":[0.193]},"t":23,"s":[-180.714]},{"i":{"x":[0.833],"y":[0.831]},"o":{"x":[0.167],"y":[0.12]},"t":24,"s":[-180.668]},{"i":{"x":[0.833],"y":[0.877]},"o":{"x":[0.167],"y":[0.164]},"t":25,"s":[-180.563]},{"i":{"x":[0.833],"y":[0.765]},"o":{"x":[0.167],"y":[0.258]},"t":26,"s":[-180.455]},{"i":{"x":[0.833],"y":[-159.556]},"o":{"x":[0.167],"y":[0.129]},"t":27,"s":[-180.404]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.083]},"t":28,"s":[-180.31]},{"t":29,"s":[0]}],"ix":10},"p":{"a":0,"k":[120,120,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.715,0.715,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.865,0.865,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.118,0.118,0]},"t":1,"s":[99.306,99.306,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.742,0.742,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.219,0.219,0]},"t":2,"s":[97.63,97.63,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.839,0.839,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.123,0.123,0]},"t":3,"s":[96.597,96.597,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.848,0.848,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.172,0.172,0]},"t":4,"s":[94.427,94.427,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.883,0.883,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.184,0.184,0]},"t":5,"s":[92.396,92.396,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.818,0.818,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.292,0.292,0]},"t":6,"s":[90.723,90.723,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.936,0.936,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.153,0.153,0]},"t":7,"s":[90.055,90.055,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.325,0.325,1]},"o":{"x":[0.167,0.167,0.167],"y":[-0.268,-0.268,0]},"t":8,"s":[89.263,89.263,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.786,0.786,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.095,0.095,0]},"t":9,"s":[89.451,89.451,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.87,0.87,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.136,0.136,0]},"t":10,"s":[90.785,90.785,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.752,0.752,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.233,0.233,0]},"t":11,"s":[92.879,92.879,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.844,0.844,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.126,0.126,0]},"t":12,"s":[94.042,94.042,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.882,0.882,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.178,0.178,0]},"t":13,"s":[96.338,96.338,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.787,0.787,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.282,0.282,0]},"t":14,"s":[98.354,98.354,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.865,0.865,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.137,0.137,0]},"t":15,"s":[99.199,99.199,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.892,0.892,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.218,0.218,0]},"t":16,"s":[100.512,100.512,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.85,0.85,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.371,0.371,0]},"t":17,"s":[101.326,101.326,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.962,0.962,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.188,0.188,0]},"t":18,"s":[101.562,101.562,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.814,0.814,1]},"o":{"x":[0.167,0.167,0.167],"y":[-0.07,-0.07,0]},"t":19,"s":[101.75,101.75,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.693,0.693,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.151,0.151,0]},"t":20,"s":[101.648,101.648,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.822,0.822,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.114,0.114,0]},"t":21,"s":[101.522,101.522,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.876,0.876,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.157,0.157,0]},"t":22,"s":[101.187,101.187,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.767,0.767,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.254,0.254,0]},"t":23,"s":[100.807,100.807,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.851,0.851,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.13,0.13,0]},"t":24,"s":[100.622,100.622,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.885,0.885,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.19,0.19,0]},"t":25,"s":[100.289,100.289,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.801,0.801,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.302,0.302,0]},"t":26,"s":[100.028,100.028,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1.043,1.043,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.143,0.143,0]},"t":27,"s":[99.929,99.929,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.028,0.028,0]},"t":28,"s":[99.791,99.791,100]},{"t":29,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"ip":0,"op":30,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Vector","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[120,120,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.715,0.715,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.865,0.865,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.118,0.118,0]},"t":1,"s":[93.059,101.388,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.742,0.742,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.219,0.219,0]},"t":2,"s":[76.296,104.741,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.839,0.839,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.123,0.123,0]},"t":3,"s":[65.97,106.806,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.848,0.848,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.172,0.172,0]},"t":4,"s":[44.266,111.147,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.883,0.883,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.184,0.184,0]},"t":5,"s":[23.957,115.209,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1.008,1.008,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.292,0.292,0]},"t":6,"s":[7.227,118.555,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.678,0.678,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.007,0.007,0]},"t":7,"s":[0.554,119.889,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.87,0.87,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.112,0.112,0]},"t":8,"s":[7.855,118.429,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.752,0.752,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.233,0.233,0]},"t":9,"s":[28.793,114.241,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.844,0.844,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.126,0.126,0]},"t":10,"s":[40.421,111.916,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.882,0.882,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.178,0.178,0]},"t":11,"s":[63.383,107.323,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.787,0.787,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.282,0.282,0]},"t":12,"s":[83.539,103.292,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.865,0.865,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.137,0.137,0]},"t":13,"s":[91.987,101.603,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.892,0.892,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.218,0.218,0]},"t":14,"s":[105.121,98.976,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.85,0.85,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.371,0.371,0]},"t":15,"s":[113.259,97.348,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.962,0.962,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.188,0.188,0]},"t":16,"s":[115.62,96.876,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.814,0.814,1]},"o":{"x":[0.167,0.167,0.167],"y":[-0.07,-0.07,0]},"t":17,"s":[117.495,96.501,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.693,0.693,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.151,0.151,0]},"t":18,"s":[116.476,96.705,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.822,0.822,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.114,0.114,0]},"t":19,"s":[115.224,96.955,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.876,0.876,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.157,0.157,0]},"t":20,"s":[111.866,97.627,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.767,0.767,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.254,0.254,0]},"t":21,"s":[108.07,98.386,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.851,0.851,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.13,0.13,0]},"t":22,"s":[106.218,98.756,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.885,0.885,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.19,0.19,0]},"t":23,"s":[102.889,99.422,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.801,0.801,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.302,0.302,0]},"t":24,"s":[100.281,99.944,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1.043,1.043,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.143,0.143,0]},"t":25,"s":[99.286,100.143,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.028,0.028,0]},"t":26,"s":[97.905,100.419,100]},{"t":27,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.583,-0.583],[-0.833,0],[-0.583,0.583],[0,0.833],[0.583,0.583],[0.833,0],[0.583,-0.583],[0,-0.833]],"o":[[0.583,0.583],[0.833,0],[0.583,-0.583],[0,-0.833],[-0.583,-0.583],[-0.833,0],[-0.583,0.583],[0,0.833]],"v":[[-2.125,2.125],[0,3],[2.125,2.125],[3,0],[2.125,-2.125],[0,-3],[-2.125,-2.125],[-3,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803926945,0.917647063732,0.929411768913,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[920,920],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Vector","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"ct":1,"bm":0}],"markers":[],"props":{}} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/star_reaction.json b/TMessagesProj/src/main/res/raw/star_reaction.json new file mode 100644 index 00000000000..7570b795da3 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/star_reaction.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":0,"op":163,"w":512,"h":512,"nm":"MAIN","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 10","sr":1,"ks":{"p":{"a":0,"k":[276,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[89.527,-80.914],[-165.567,199.251],[-6.5,-184]],"o":[[-171.5,155],[145,-174.5],[1.033,29.232]],"v":[[-38,142.5],[-180.5,-116],[206,-58.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[87]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[60]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[38]},{"t":23,"s":[10]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[100]},{"t":20,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.811764705882,0.250980392157,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[5]},{"t":22,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.5,-2.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":10,"op":24,"st":2,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 9","sr":1,"ks":{"p":{"a":0,"k":[276,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[89.527,-80.914],[-165.567,199.251],[-6.5,-184]],"o":[[-171.5,155],[145,-174.5],[1.033,29.232]],"v":[[-38,142.5],[-180.5,-116],[206,-58.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[87]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[61.452]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[35.632]},{"t":24,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[100]},{"t":19,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.811764705882,0.250980392157,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[10]},{"t":19,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.5,-2.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":2,"op":24,"st":1,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 8","sr":1,"ks":{"p":{"a":0,"k":[276,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[89.527,-80.914],[-165.567,199.251],[-6.5,-184]],"o":[[-171.5,155],[145,-174.5],[1.033,29.232]],"v":[[-38,142.5],[-180.5,-116],[206,-58.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[94]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[40.632]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[10.895]},{"t":24,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-1,"s":[100]},{"t":17,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.811764705882,0.250980392157,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-1,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[20]},{"t":23,"s":[30]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.5,-2.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":2,"op":24,"st":-1,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 7","sr":1,"ks":{"p":{"a":0,"k":[276,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[89.527,-80.914],[-165.567,199.251],[-6.5,-184]],"o":[[-171.5,155],[145,-174.5],[1.033,29.232]],"v":[[-38,142.5],[-180.5,-116],[206,-58.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-3,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[89]},{"t":23,"s":[2]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-3,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[90]},{"t":15,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.811764705882,0.250980392157,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[5]},{"t":18,"s":[40]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.5,-2.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":1,"op":24,"st":-3,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 6","sr":1,"ks":{"p":{"a":0,"k":[276,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[88.709,-81.81],[-165.567,199.251],[-6.5,-184]],"o":[[-180,166],[145,-174.5],[1.033,29.232]],"v":[[-27,133],[-180.5,-116],[206,-58.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-3,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[82]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[5.857]},{"t":20,"s":[4]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-3,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[90]},{"t":15,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.811764705882,0.250980392157,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[50]},{"t":20,"s":[55]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.5,-2.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":1,"op":24,"st":-3,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Star Main","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.69],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":15,"s":[27]},{"i":{"x":[0.69],"y":[1]},"o":{"x":[0.31],"y":[0]},"t":31,"s":[-5]},{"i":{"x":[0.69],"y":[1]},"o":{"x":[0.31],"y":[0]},"t":37,"s":[2]},{"t":42,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.69,"y":1},"o":{"x":0.31,"y":0},"t":15,"s":[213.061,450.015,0],"to":[1.439,-27.015,0],"ti":[0,0,0]},{"i":{"x":0.69,"y":1},"o":{"x":0.31,"y":0},"t":23,"s":[256.061,414.015,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.69,"y":1},"o":{"x":0.31,"y":0},"t":29,"s":[256.061,453.015,0],"to":[0,0,0],"ti":[0,0,0]},{"t":35,"s":[256.061,443.015,0]}]},"a":{"a":0,"k":[0.061,187.015,0]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":14,"s":[0,31,100]},{"i":{"x":[0.69,0.69,0.69],"y":[1,1,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":23,"s":[65,110,100]},{"i":{"x":[0.69,0.69,0.69],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":29,"s":[110,91,100]},{"i":{"x":[0.69,0.69,0.69],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":35,"s":[97,103,100]},{"t":41,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[-17.673,2.71],[0,0],[-16.014,1.341],[-10.257,0.284],[0,0],[-16.507,-3.751],[0,0],[2.623,-12.415],[6.465,-3.6],[0,0],[1.121,-1.846],[11.851,-3.575],[6.644,0.036],[2.034,0.227],[0,0],[2.687,-0.208],[0,0],[-3.31,0.746],[-0.391,0.401],[0,0],[2.875,6.851],[0,0],[0.231,0.112],[0,0],[26.149,9.441],[0,0],[-14.753,10.161],[-10.596,0.8],[0,0]],"o":[[0,0],[14.088,-2.722],[18.334,-1.306],[0,0],[25.112,1.694],[0,0],[23.526,1.6],[-1.078,5.1],[0,0],[-1.246,1.344],[0,0],[-1.892,0.571],[-2.507,-0.013],[0,0],[-3.42,-0.258],[0,0],[-5.374,0.408],[2.775,-0.625],[0,0],[-0.804,-1.352],[0,0],[-1.012,-0.292],[0,0],[-10.953,-5.593],[0,0],[-17.42,-7.6],[6.824,-4.7],[0,0],[10.416,-0.6]],"v":[[-140.649,-77.791],[-81.992,-87.39],[-28.497,-92.142],[3.159,-92.638],[137.591,-82.067],[186.749,-73.468],[296.256,-43.18],[343.045,-15.101],[322.117,-1.98],[189.95,41.041],[186.474,45.731],[70.519,74.074],[55.167,75.71],[50.123,75.458],[41.573,74.314],[33.073,74.279],[17.416,76.073],[2.992,75.343],[5.816,74.074],[5.642,70.854],[-86.606,65.387],[-175.827,52.193],[-182.432,47.536],[-201.879,37.97],[-271.291,16.563],[-306.556,0.925],[-312.799,-32.093],[-283.928,-43.575],[-181.354,-70.262]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[2.255,-3.776],[25.706,-59.603],[12.564,0.386],[3.846,3.175],[0,0],[5.081,-2.9],[0,0],[-1.872,12.014],[-0.739,5.6],[4.775,19.69],[2.875,6.851],[0,0],[0.129,0.112],[0,0],[14.56,9.441],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[11.084,6.278],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[-3.462,8.027],[-4.741,-0.188],[0,0],[-6.467,-3.6],[0,0],[-7.267,9.107],[1.57,-10.072],[0,0],[-5.061,-20.871],[0,0],[-0.563,-0.292],[0,0],[-6.099,-5.593],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-76.222,-77.791],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[78.709,-82.067],[95.709,-70.267],[167.058,-43.18],[187.958,-16.08],[181.458,-1.98],[116.268,53.887],[102.406,71.097],[58.417,157.926],[29.386,180.795],[19.848,177.263],[3.68,161.288],[-12.393,160.788],[-38.773,179.616],[-61.983,180.846],[-59.716,156.422],[-62.437,115.309],[-86.606,65.387],[-95.81,52.193],[-99.488,47.536],[-110.317,37.97],[-144.389,15.255],[-168.603,0.925],[-171.803,-33.775],[-156.003,-43.575],[-88.422,-68.291]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0},"t":29,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"t":42,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gs","o":{"a":0,"k":100},"w":{"a":0,"k":6},"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[0,0.882,0.486,0,0.5,0.882,0.486,0,1,0.882,0.486,0]},{"t":32,"s":[0,0.914,0.553,0.188,0.5,0.898,0.48,0.106,1,0.882,0.408,0.024]}]}},"s":{"a":0,"k":[-1,-171]},"e":{"a":0,"k":[1.73,184.29]},"t":1,"lc":2,"lj":2,"bm":0,"nm":"Gradient_SNQ0np4KuX","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Outline","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[0,0],[0,0],[-36.33,4.522],[0,0]],"o":[[0,0],[17.779,-1.4],[0,0],[0,0]],"v":[[-273.512,-19.075],[-174.366,-49.603],[-104.372,-62.891],[-39.085,-75.879]],"c":false}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-150.203,-19.075],[-81.722,-44.991],[-56.022,-62.891],[-0.1,-152.2]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0},"t":29,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-162.5,-33],[-71.2,-45.9],[-45.5,-63.8],[-0.1,-152.2]],"c":false}]},{"t":42,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-166.75,-33.375],[-72.95,-47.275],[-46.75,-65.3],[-4.1,-157.45]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":17},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Blik","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[0,0],[55.022,6.372],[0,0],[2.694,0.7],[3.412,-3.9],[0,0],[17.959,-1.3],[0,0],[2.873,-2.1],[-7.722,-3.6],[0,0],[-5.085,-1.946],[0,0],[-8.765,-5.745],[-0.866,-0.705],[-1.882,28.19]],"o":[[-21.73,-1.5],[0,0],[-1.437,-1.6],[-4.849,-1.2],[0,0],[-32.169,5.823],[0,0],[-4.669,0.3],[-5.029,3.8],[0,0],[17.241,7.9],[0,0],[6.558,2.326],[1.04,0.682],[203.83,16.76],[0,0]],"v":[[182.69,-57.05],[110.832,-74.467],[-27.771,-81.679],[-34.416,-85.179],[-52.195,-81.679],[-116.405,-69.091],[-181.909,-57.104],[-274.589,-27.475],[-286.622,-24.075],[-281.773,-8.875],[-243.873,4.6],[-208.97,18.574],[-190.976,24.057],[-159.587,37.26],[-156.816,39.353],[245.018,-28.028]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-2.832,-1.946],[0,0],[-4.898,-5.697],[-0.482,-0.705],[-15.839,21.145]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[3.652,2.326],[0.579,0.682],[64.215,-7.031],[0,0]],"v":[[91.909,-54.167],[63.809,-74.467],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-62.722,-69.091],[-85.922,-52.491],[-150.803,-27.475],[-157.503,-24.075],[-154.803,-8.875],[-133.7,4.6],[-114.265,18.574],[-104.246,24.057],[-86.767,37.26],[-85.224,39.353],[118.293,-39.855]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0},"t":29,"s":[{"i":[[0,0],[5.4,11],[0,0],[3.25,-0.25],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-1.325,-3.625],[-4,-0.75],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[77.4,-53.75],[49.05,-75.3],[10.075,-156.125],[1.625,-161.25],[-8.15,-156],[-52.575,-71.375],[-76.15,-53.65],[-165.6,-42.025],[-173.05,-38.25],[-173.1,-23.175],[-138.95,4.35],[-99.2,12.7],[3.7,-0.3],[21.9,9.2],[22.9,11.6],[118.35,-48.3]],"c":true}]},{"t":42,"s":[{"i":[[0,0],[5.4,11],[0,0],[3.25,-0.25],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-1.325,-3.625],[-4,-0.75],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[77.65,-55.125],[50.8,-75.675],[10.825,-157.375],[1.5,-162.375],[-10.275,-157.25],[-53.825,-72.375],[-77.4,-55.275],[-165.6,-43.275],[-173.8,-38.5],[-173.6,-23.175],[-140.575,4.975],[-97.95,14.2],[3.45,1.825],[21.15,10.45],[22.15,12.85],[118.975,-50.8]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.929411764706,0.564705882353,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":38},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shine","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[-0.092,0.461],[0,0],[-2.719,2.809],[0,0],[0,2.1],[8.8,0.6],[0,0],[51.191,7.154],[0,0],[2.873,0.7],[3.412,-4],[0,0],[17.959,-1.3],[0,0],[2.886,-2.083],[-7.722,-3.6],[0,0],[-5.406,-1.902],[0,0],[-8.796,-5.697],[-3.973,-2.929],[0,0],[-0.488,-1.081],[0,0],[-1.45,-0.196],[-2.149,0.157],[0,0],[-4.445,-0.358],[0,0],[-1.148,0.014]],"o":[[0,0],[1.878,-4.267],[0,0],[2.694,-1.5],[0,-5.1],[0,0],[-21.73,-1.5],[0,0],[-1.437,-1.6],[-3.771,-1],[0,0],[-30.554,4.657],[0,0],[-4.669,0.3],[-4.849,3.5],[0,0],[17.241,7.9],[0,0],[5.678,2.823],[10.603,3.408],[0,0],[4.645,12.652],[0,0],[-0.147,0.136],[1.612,0.265],[0,0],[5.08,-0.379],[0,0],[0.932,0.101],[2.503,-0.03]],"v":[[64.195,72.215],[177.994,44.5],[184.864,33.361],[296.795,-11.78],[300.925,-18.48],[261.137,-23.524],[182.69,-57.05],[110.832,-74.467],[-27.771,-81.679],[-35.673,-85.279],[-50.938,-81.179],[-116.404,-69.091],[-181.909,-57.104],[-274.589,-27.475],[-286.622,-24.075],[-281.773,-8.875],[-243.873,4.6],[-207.471,18.866],[-190.976,24.057],[-159.587,37.261],[-136.69,47.793],[-64.2,72.692],[13.069,69.556],[12.085,72.762],[12.761,73.196],[15.105,73.455],[30.029,71.732],[44.782,71.775],[53.851,72.925],[57.494,73.08]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[-0.112,1.659],[0,0],[-3.455,3.467],[0,0],[0,2.1],[8.241,0.848],[0,0],[42.033,7.923],[0,0],[2.619,0.7],[3.11,-4],[0,0],[16.367,-1.3],[0,0],[2.629,-2.086],[-7.038,-3.6],[0,0],[-4.927,-1.902],[0,0],[-8.017,-5.697],[-3.62,-2.929],[0,0],[-1.473,-2.313],[0,0],[-1.754,-0.706],[-2.6,0.566],[0,0],[-5.376,-1.286],[0,0],[-1.388,0.039]],"o":[[0,0],[2.127,-5.109],[0,0],[2.455,-1.5],[0,-5.1],[0,0],[-19.804,-1.5],[0,0],[-1.309,-1.6],[-3.437,-1],[0,0],[-25.343,5.525],[0,0],[-4.255,0.3],[-4.419,3.5],[0,0],[15.712,7.9],[0,0],[5.174,2.823],[9.663,3.408],[0,0],[3.071,8.243],[0,0],[-0.177,0.489],[1.95,0.952],[0,0],[6.144,-1.363],[0,0],[1.127,0.362],[3.028,-0.108]],"v":[[60.819,87.225],[159.361,49.115],[168.087,36.031],[270.412,-10.661],[274.609,-18.265],[240.04,-24.461],[164.534,-56.473],[101.428,-74.467],[-20.977,-96.944],[-28.178,-100.544],[-42.09,-96.444],[-105.668,-69.091],[-162.711,-56.181],[-249.832,-27.475],[-260.798,-24.075],[-256.379,-8.875],[-221.839,4.6],[-188.663,18.866],[-173.63,24.057],[-145.023,37.261],[-124.897,48.199],[-36.323,70.093],[-1.336,79.918],[-1.646,90.105],[-0.829,91.665],[2.007,92.595],[20.057,86.403],[37.899,86.557],[48.867,90.69],[53.273,91.248]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[-0.15,4.053],[0,0],[-4.927,4.784],[0,0],[0,2.1],[7.124,1.344],[0,0],[23.716,9.462],[0,0],[2.109,0.7],[2.505,-4],[0,0],[13.184,-1.3],[0,0],[2.114,-2.093],[-5.669,-3.6],[0,0],[-3.969,-1.902],[0,0],[-6.457,-5.697],[-2.916,-2.929],[0,0],[-3.444,-4.777],[0,0],[-2.362,-1.726],[-3.5,1.383],[0,0],[-7.238,-3.143],[0,0],[-1.869,0.091]],"o":[[0,0],[2.624,-6.794],[0,0],[1.978,-1.5],[0,-5.1],[0,0],[-15.952,-1.5],[0,0],[-1.055,-1.6],[-2.769,-1],[0,0],[-14.922,7.263],[0,0],[-3.428,0.3],[-3.56,3.5],[0,0],[12.656,7.9],[0,0],[4.168,2.823],[7.784,3.408],[0,0],[-0.078,-0.576],[0,0],[-0.239,1.194],[2.625,2.326],[0,0],[8.272,-3.332],[0,0],[1.517,0.885],[4.076,-0.264]],"v":[[54.066,117.246],[122.095,58.344],[134.533,41.372],[217.646,-8.424],[221.977,-17.835],[197.845,-26.333],[128.222,-55.32],[82.618,-74.467],[-7.388,-127.472],[-13.189,-131.072],[-24.395,-126.972],[-84.195,-69.091],[-124.317,-54.336],[-200.318,-27.475],[-209.151,-24.075],[-205.591,-8.875],[-177.769,4.6],[-151.047,18.866],[-138.938,24.057],[-115.895,37.261],[-101.312,49.01],[-38.041,87.466],[-30.147,100.641],[-29.107,124.791],[-28.007,128.605],[-24.189,130.877],[0.111,115.745],[24.132,116.122],[38.899,126.222],[44.83,127.584]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[-0.189,6.447],[0,0],[-6.4,6.1],[0,0],[0,2.1],[6.007,1.84],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-3.01,-1.902],[0,0],[-4.898,-5.697],[-2.212,-2.929],[0,0],[-0.999,-15.106],[0,0],[-2.969,-2.745],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.349,0.142]],"o":[[0,0],[3.122,-8.479],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[3.161,2.823],[5.904,3.408],[0,0],[4.645,12.652],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[1.907,1.409],[5.125,-0.421]],"v":[[47.314,147.266],[84.83,67.573],[100.98,46.713],[164.88,-6.187],[169.345,-17.405],[155.65,-28.206],[91.909,-54.167],[63.809,-74.467],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-62.722,-69.091],[-85.922,-52.491],[-150.803,-27.475],[-157.503,-24.075],[-154.803,-8.875],[-133.7,4.6],[-113.43,18.866],[-104.246,24.057],[-86.767,37.261],[-77.726,49.821],[-64.2,72.692],[-54.553,114.69],[-56.569,159.477],[-55.185,165.544],[-50.386,169.158],[-19.834,145.088],[10.366,145.688],[28.931,161.753],[36.387,163.92]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0},"t":29,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[5.603,0.192],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-6.444,-5.355],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-6.29,-0.293],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[2.372,5.606],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[10.083,-151.811],[2.285,-159.901],[-9.855,-153.617],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-168.799,-21.101],[-136.855,4.6],[-102.142,16.885],[-2.611,3.584],[16.317,10.171],[10.645,29.345],[-70.728,72.102],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-90.3,166.1],[-15.4,127.5],[14.8,128.1],[87.1,167.8],[94.8,168.8]],"c":true}]},{"t":42,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[5.603,0.192],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-6.444,-5.355],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-6.29,-0.293],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[2.372,5.606],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[104.956,155.7],[93.256,62.9],[101.214,41.5],[170.763,-26.115],[173.063,-32.815],[162.579,-43.842],[76.143,-53.835],[49.499,-73.164],[10.811,-153.024],[2.164,-160.993],[-11.918,-154.83],[-53.414,-70.971],[-76.735,-56.434],[-163.221,-44.07],[-170.528,-38.243],[-169.284,-21.101],[-138.433,5.207],[-100.928,18.341],[-2.853,5.647],[15.589,11.384],[8.703,29.466],[-70.971,71.374],[-99.035,114.457],[-104.935,156.936],[-103.035,164.956],[-89.45,167.071],[-15.351,128.956],[14.849,129.556],[86.493,169.377],[94.193,170.377]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":23,"s":[0,1,0.812,0.251,0.5,1,0.812,0.251,1,1,0.812,0.251,0,1,0.5,1,1,1]},{"t":32,"s":[0,1,1,1,0.5,1,0.99,0.922,1,1,0.98,0.843,0,0,0.5,0.5,1,1]}]}},"s":{"a":0,"k":[55.415,47.417]},"e":{"a":0,"k":[-16.164,-59.226]},"t":1,"nm":"Gradient_JRZHY2LUuM","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[103,103]},"r":{"a":0,"k":0},"o":{"a":0,"k":48},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Front 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[-0.092,0.461],[0,0],[-2.719,2.809],[0,0],[0,2.1],[8.8,0.6],[0,0],[51.191,7.154],[0,0],[2.873,0.7],[3.412,-4],[0,0],[17.959,-1.3],[0,0],[2.886,-2.083],[-7.722,-3.6],[0,0],[-5.406,-1.902],[0,0],[-8.796,-5.697],[-3.973,-2.929],[0,0],[-0.488,-1.081],[0,0],[-1.45,-0.196],[-2.149,0.157],[0,0],[-4.445,-0.358],[0,0],[-1.148,0.014]],"o":[[0,0],[1.878,-4.267],[0,0],[2.694,-1.5],[0,-5.1],[0,0],[-21.73,-1.5],[0,0],[-1.437,-1.6],[-3.771,-1],[0,0],[-30.554,4.657],[0,0],[-4.669,0.3],[-4.849,3.5],[0,0],[17.241,7.9],[0,0],[5.678,2.823],[10.603,3.408],[0,0],[4.645,12.652],[0,0],[-0.147,0.136],[1.612,0.265],[0,0],[5.08,-0.379],[0,0],[0.932,0.101],[2.503,-0.03]],"v":[[64.195,72.215],[177.994,44.5],[184.864,33.361],[296.795,-11.78],[300.925,-18.48],[261.137,-23.524],[182.69,-57.05],[110.832,-74.467],[-27.771,-81.679],[-35.673,-85.279],[-50.938,-81.179],[-116.404,-69.091],[-181.909,-57.104],[-274.589,-27.475],[-286.622,-24.075],[-281.773,-8.875],[-243.873,4.6],[-207.471,18.866],[-190.976,24.057],[-159.587,37.261],[-136.69,47.793],[-64.2,72.692],[13.069,69.556],[12.085,72.762],[12.761,73.196],[15.105,73.455],[30.029,71.732],[44.782,71.775],[53.851,72.925],[57.494,73.08]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[-0.112,1.659],[0,0],[-3.455,3.467],[0,0],[0,2.1],[8.241,0.848],[0,0],[42.033,7.923],[0,0],[2.619,0.7],[3.11,-4],[0,0],[16.367,-1.3],[0,0],[2.629,-2.086],[-7.038,-3.6],[0,0],[-4.927,-1.902],[0,0],[-8.017,-5.697],[-3.62,-2.929],[0,0],[-1.473,-2.313],[0,0],[-1.754,-0.706],[-2.6,0.566],[0,0],[-5.376,-1.286],[0,0],[-1.388,0.039]],"o":[[0,0],[2.127,-5.109],[0,0],[2.455,-1.5],[0,-5.1],[0,0],[-19.804,-1.5],[0,0],[-1.309,-1.6],[-3.437,-1],[0,0],[-25.343,5.525],[0,0],[-4.255,0.3],[-4.419,3.5],[0,0],[15.712,7.9],[0,0],[5.174,2.823],[9.663,3.408],[0,0],[3.071,8.243],[0,0],[-0.177,0.489],[1.95,0.952],[0,0],[6.144,-1.363],[0,0],[1.127,0.362],[3.028,-0.108]],"v":[[60.819,87.225],[159.361,49.115],[168.087,36.031],[270.412,-10.661],[274.609,-18.265],[240.04,-24.461],[164.534,-56.473],[101.428,-74.467],[-20.977,-96.944],[-28.178,-100.544],[-42.09,-96.444],[-105.668,-69.091],[-162.711,-56.181],[-249.832,-27.475],[-260.798,-24.075],[-256.379,-8.875],[-221.839,4.6],[-188.663,18.866],[-173.63,24.057],[-145.023,37.261],[-124.897,48.199],[-36.323,70.093],[-1.336,79.918],[-1.646,90.105],[-0.829,91.665],[2.007,92.595],[20.057,86.403],[37.899,86.557],[48.867,90.69],[53.273,91.248]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[-0.15,4.053],[0,0],[-4.927,4.784],[0,0],[0,2.1],[7.124,1.344],[0,0],[23.716,9.462],[0,0],[2.109,0.7],[2.505,-4],[0,0],[13.184,-1.3],[0,0],[2.114,-2.093],[-5.669,-3.6],[0,0],[-3.969,-1.902],[0,0],[-6.457,-5.697],[-2.916,-2.929],[0,0],[-3.444,-4.777],[0,0],[-2.362,-1.726],[-3.5,1.383],[0,0],[-7.238,-3.143],[0,0],[-1.869,0.091]],"o":[[0,0],[2.624,-6.794],[0,0],[1.978,-1.5],[0,-5.1],[0,0],[-15.952,-1.5],[0,0],[-1.055,-1.6],[-2.769,-1],[0,0],[-14.922,7.263],[0,0],[-3.428,0.3],[-3.56,3.5],[0,0],[12.656,7.9],[0,0],[4.168,2.823],[7.784,3.408],[0,0],[-0.078,-0.576],[0,0],[-0.239,1.194],[2.625,2.326],[0,0],[8.272,-3.332],[0,0],[1.517,0.885],[4.076,-0.264]],"v":[[54.066,117.246],[122.095,58.344],[134.533,41.372],[217.646,-8.424],[221.977,-17.835],[197.845,-26.333],[128.222,-55.32],[82.618,-74.467],[-7.388,-127.472],[-13.189,-131.072],[-24.395,-126.972],[-84.195,-69.091],[-124.317,-54.336],[-200.318,-27.475],[-209.151,-24.075],[-205.591,-8.875],[-177.769,4.6],[-151.047,18.866],[-138.938,24.057],[-115.895,37.261],[-101.312,49.01],[-38.041,87.466],[-30.147,100.641],[-29.107,124.791],[-28.007,128.605],[-24.189,130.877],[0.111,115.745],[24.132,116.122],[38.899,126.222],[44.83,127.584]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[-0.189,6.447],[0,0],[-6.4,6.1],[0,0],[0,2.1],[6.007,1.84],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-3.01,-1.902],[0,0],[-4.898,-5.697],[-2.212,-2.929],[0,0],[-0.999,-15.106],[0,0],[-2.969,-2.745],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.349,0.142]],"o":[[0,0],[3.122,-8.479],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[3.161,2.823],[5.904,3.408],[0,0],[4.645,12.652],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[1.907,1.409],[5.125,-0.421]],"v":[[47.314,147.266],[84.83,67.573],[100.98,46.713],[164.88,-6.187],[169.345,-17.405],[155.65,-28.206],[91.909,-54.167],[63.809,-74.467],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-62.722,-69.091],[-85.922,-52.491],[-150.803,-27.475],[-157.503,-24.075],[-154.803,-8.875],[-133.7,4.6],[-113.43,18.866],[-104.246,24.057],[-86.767,37.261],[-77.726,49.821],[-64.2,72.692],[-54.553,114.69],[-56.569,159.477],[-55.185,165.544],[-50.386,169.158],[-19.834,145.088],[10.366,145.688],[28.931,161.753],[36.387,163.92]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0},"t":29,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[5.603,0.192],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-6.444,-5.355],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-6.29,-0.293],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[2.372,5.606],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[10.083,-151.811],[2.285,-159.901],[-9.855,-153.617],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-168.799,-21.101],[-136.855,4.6],[-102.142,16.885],[-2.611,3.584],[16.317,10.171],[10.645,29.345],[-70.728,72.102],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-90.3,166.1],[-15.4,127.5],[14.8,128.1],[87.1,167.8],[94.8,168.8]],"c":true}]},{"t":42,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[5.603,0.192],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-6.444,-5.355],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-6.29,-0.293],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[2.372,5.606],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[104.956,155.7],[93.256,62.9],[101.214,41.5],[170.763,-26.115],[173.063,-32.815],[162.579,-43.842],[76.143,-53.835],[49.499,-73.164],[10.811,-153.024],[2.164,-160.993],[-11.918,-154.83],[-53.414,-70.971],[-76.614,-54.978],[-163.1,-42.614],[-170.528,-38.243],[-169.284,-21.101],[-138.433,5.207],[-100.928,18.341],[-2.853,5.647],[15.589,11.384],[8.703,29.466],[-70.971,71.374],[-99.035,114.457],[-104.935,156.936],[-103.035,164.956],[-89.45,167.071],[-15.351,128.956],[14.849,129.556],[86.493,169.377],[94.193,170.377]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[0,1,0.812,0.251,0.5,1,0.812,0.251,1,1,0.812,0.251]},{"t":32,"s":[0,1,0.635,0,0.5,1,0.755,0.184,1,1,0.875,0.369]}]}},"s":{"a":0,"k":[93.279,197.903]},"e":{"a":0,"k":[-47.232,-173.304]},"t":1,"nm":"Gradient_4h8pNV3xa2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[103,103]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Front","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[-17.673,2.71],[0,0],[-16.014,1.341],[-10.257,0.284],[0,0],[-16.507,-3.751],[0,0],[2.623,-12.415],[6.465,-3.6],[0,0],[1.121,-1.846],[11.851,-3.575],[6.644,0.036],[2.034,0.227],[0,0],[2.687,-0.208],[0,0],[-3.31,0.746],[-0.391,0.401],[0,0],[2.875,6.851],[0,0],[0.231,0.112],[0,0],[26.149,9.441],[0,0],[-14.753,10.161],[-10.596,0.8],[0,0]],"o":[[0,0],[14.088,-2.722],[18.334,-1.306],[0,0],[25.112,1.694],[0,0],[23.526,1.6],[-1.078,5.1],[0,0],[-1.246,1.344],[0,0],[-1.892,0.571],[-2.507,-0.013],[0,0],[-3.419,-0.258],[0,0],[-5.374,0.408],[2.775,-0.625],[0,0],[-0.804,-1.352],[0,0],[-1.012,-0.292],[0,0],[-10.953,-5.593],[0,0],[-17.42,-7.6],[6.824,-4.7],[0,0],[10.416,-0.6]],"v":[[-140.649,-77.791],[-81.992,-87.39],[-28.497,-92.142],[3.159,-92.638],[137.591,-82.067],[186.749,-73.468],[296.256,-43.18],[333.79,-16.08],[322.117,-1.98],[189.95,41.041],[186.474,45.731],[70.519,74.074],[55.167,75.71],[50.123,75.458],[41.573,74.314],[33.073,74.279],[17.416,76.073],[2.992,75.343],[5.816,74.074],[5.642,70.854],[-86.606,65.387],[-175.827,52.193],[-182.432,47.536],[-201.879,37.97],[-271.291,16.563],[-306.556,0.925],[-312.799,-32.093],[-283.928,-43.575],[-181.354,-70.262]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[2.255,-3.776],[25.706,-59.603],[12.564,0.386],[3.846,3.175],[0,0],[5.081,-2.9],[0,0],[-1.872,12.014],[-0.739,5.6],[4.775,19.69],[2.875,6.851],[0,0],[0.129,0.112],[0,0],[14.56,9.441],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[11.904,5.566],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[-3.462,8.027],[-4.741,-0.188],[0,0],[-6.467,-3.6],[0,0],[-7.267,9.107],[1.57,-10.072],[0,0],[-5.061,-20.871],[0,0],[-0.563,-0.292],[0,0],[-6.099,-5.593],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-76.222,-77.791],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[78.709,-82.067],[95.709,-70.267],[167.058,-43.18],[187.958,-16.08],[181.458,-1.98],[116.268,53.887],[102.406,71.097],[58.417,157.926],[29.386,180.795],[19.848,177.263],[3.68,161.288],[-12.393,160.788],[-38.773,179.616],[-61.983,180.846],[-59.716,156.422],[-62.437,115.309],[-86.606,65.387],[-95.81,52.193],[-99.488,47.536],[-110.317,37.97],[-144.389,15.255],[-168.603,0.925],[-171.803,-33.775],[-156.003,-43.575],[-88.422,-68.291]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":29,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"t":42,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[0.002,1,0.812,0.251,0.501,1,0.812,0.251,1,1,0.812,0.251]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[0,1,0.757,0.149,0.5,0.965,0.633,0.075,1,0.929,0.51,0]},{"t":42,"s":[0,1,0.757,0.149,0.5,0.965,0.633,0.075,1,0.929,0.51,0]}]}},"s":{"a":0,"k":[-0.953,-180.679]},"e":{"a":0,"k":[1.58,188.35]},"t":1,"nm":"Gradient_xwdmwDuieT","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Back","bm":0,"hd":false}],"ip":15,"op":172,"st":-8,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"p":{"a":0,"k":[276,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[89.527,-80.914],[-165.567,199.251],[-6.5,-184]],"o":[[-171.5,155],[145,-174.5],[1.033,29.232]],"v":[[-38,142.5],[-180.5,-116],[206,-58.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[87]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[60]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[38]},{"t":23,"s":[10]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[100]},{"t":20,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.882352941176,0.486274509804,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[17]},{"t":22,"s":[15]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.5,-2.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":10,"op":24,"st":2,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"p":{"a":0,"k":[276,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[89.527,-80.914],[-165.567,199.251],[-6.5,-184]],"o":[[-171.5,155],[145,-174.5],[1.033,29.232]],"v":[[-38,142.5],[-180.5,-116],[206,-58.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[87]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[61.452]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[35.632]},{"t":24,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[100]},{"t":19,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.882352941176,0.486274509804,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[25]},{"t":22,"s":[22]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.5,-2.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":2,"op":24,"st":1,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"p":{"a":0,"k":[276,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[89.527,-80.914],[-165.567,199.251],[-6.5,-184]],"o":[[-171.5,155],[145,-174.5],[1.033,29.232]],"v":[[-38,142.5],[-180.5,-116],[206,-58.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[94]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[40.632]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[10.895]},{"t":24,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-1,"s":[100]},{"t":17,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.882352941176,0.486274509804,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-1,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[38]},{"t":22,"s":[40]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.5,-2.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":2,"op":24,"st":-1,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"p":{"a":0,"k":[276,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[89.527,-80.914],[-165.567,199.251],[-6.5,-184]],"o":[[-171.5,155],[145,-174.5],[1.033,29.232]],"v":[[-38,142.5],[-180.5,-116],[206,-58.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-3,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[89]},{"t":23,"s":[2]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-3,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[90]},{"t":15,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.882352941176,0.486274509804,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[55]},{"t":22,"s":[51]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.5,-2.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":1,"op":24,"st":-3,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"p":{"a":0,"k":[276,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[88.709,-81.81],[-165.567,199.251],[-6.5,-184]],"o":[[-180,166],[145,-174.5],[1.033,29.232]],"v":[[-27,133],[-180.5,-116],[206,-58.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-3,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[82]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[5.857]},{"t":20,"s":[4]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-3,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[90]},{"t":15,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.882352941176,0.486274509804,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[65]},{"t":22,"s":[66]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[14.5,-2.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":1,"op":24,"st":-3,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Circle 4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":89,"s":[70]},{"t":99,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[256,433,0],"to":[0,0,0],"ti":[0,0,0]},{"t":99,"s":[256,155,0]}]},"a":{"a":0,"k":[6,186,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[0,-19.882],[97.754,0],[0,19.882]],"o":[[0,19.882],[-97.754,0],[0,-19.882]],"v":[[177,0],[0,36],[-177,0]],"c":false}]},{"t":99,"s":[{"i":[[0,-23.196],[137.657,0],[0,23.196]],"o":[[0,23.196],[-137.657,0],[0,-23.196]],"v":[[249.25,0],[0,42],[-249.25,0]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.949019607843,0.564705882353,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[30]},{"t":99,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[6,206]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":75,"op":100,"st":75,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Circle 3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":61,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":73,"s":[80]},{"t":83,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":57,"s":[256,443,0],"to":[0,0,0],"ti":[0,0,0]},{"t":83,"s":[256,115,0]}]},"a":{"a":0,"k":[6,186,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[0,-19.882],[97.754,0],[0,19.882]],"o":[[0,19.882],[-97.754,0],[0,-19.882]],"v":[[177,0],[0,36],[-177,0]],"c":false}]},{"t":83,"s":[{"i":[[0,-23.196],[137.657,0],[0,23.196]],"o":[[0,23.196],[-137.657,0],[0,-23.196]],"v":[[249.25,0],[0,42],[-249.25,0]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.949019607843,0.564705882353,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[40]},{"t":83,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[6,186]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":57,"op":84,"st":57,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Circle 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":39,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":51,"s":[80]},{"t":61,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":35,"s":[256,445,0],"to":[0,0,0],"ti":[0,0,0]},{"t":61,"s":[256,95,0]}]},"a":{"a":0,"k":[6,186,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[0,-19.882],[97.754,0],[0,19.882]],"o":[[0,19.882],[-97.754,0],[0,-19.882]],"v":[[177,0],[0,36],[-177,0]],"c":false}]},{"t":61,"s":[{"i":[[0,-23.196],[137.657,0],[0,23.196]],"o":[[0,23.196],[-137.657,0],[0,-23.196]],"v":[[249.25,0],[0,42],[-249.25,0]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.949019607843,0.564705882353,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[50]},{"t":61,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[6,186]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":35,"op":62,"st":35,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Circle 1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[0]},{"i":{"x":[0.843],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":20,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":31,"s":[80]},{"t":41,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[256,453,0],"to":[0,0,0],"ti":[0,0,0]},{"t":41,"s":[256,95,0]}]},"a":{"a":0,"k":[6,186,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[0,-19.882],[97.754,0],[0,19.882]],"o":[[0,19.882],[-97.754,0],[0,-19.882]],"v":[[177,0],[0,36],[-177,0]],"c":false}]},{"t":41,"s":[{"i":[[0,-23.196],[137.657,0],[0,23.196]],"o":[[0,23.196],[-137.657,0],[0,-23.196]],"v":[[249.25,0],[0,42],[-249.25,0]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.949019607843,0.564705882353,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[50]},{"t":41,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[6,186]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":15,"op":42,"st":15,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Star Main","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":13,"s":[0]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":28,"s":[3]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":42,"s":[-3]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":54,"s":[3]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":65,"s":[-3]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":76,"s":[3]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":86,"s":[-2]},{"t":95,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[256.061,443.015,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.3,"y":0},"t":16,"s":[256.061,475.54,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.4,"y":1},"o":{"x":0.15,"y":0},"t":86,"s":[256.061,452.54,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.26,"y":0},"t":98,"s":[256.061,473.015,0],"to":[0,0,0],"ti":[0,0,0]},{"t":107,"s":[256.061,443.015,0]}]},"a":{"a":0,"k":[0.061,187.015,0]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":16,"s":[110,85,100]},{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.15,0.15,0.15],"y":[0,0,0]},"t":87,"s":[75,120,100]},{"i":{"x":[0.74,0.74,0.74],"y":[1,1,1]},"o":{"x":[0.26,0.26,0.26],"y":[0,0,0]},"t":99,"s":[110,90,100]},{"i":{"x":[0.74,0.74,0.74],"y":[1,1,1]},"o":{"x":[0.26,0.26,0.26],"y":[0,0,0]},"t":108,"s":[95,105,100]},{"t":120,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":13,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[0.125,2.808],[2.014,2.708],[0,0],[0,0],[0,0],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[-0.277,-6.215],[-1.54,-2.07],[0,0],[-3.504,-2.696],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-108.999,64.236],[-111.461,53.267],[-119.46,44.701],[-121.168,42.457],[-146.1,18.689],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.15,"y":0},"t":87,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[-0.344,-12.486],[3.043,-4.081],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-10.404,7.939],[-5.922,-0.62],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.194,-0.306],[0.142,5.133],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[0,0],[0,0],[-7.519,-10.38],[0,0],[-10.071,-9.92],[4.805,-3.666],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[165.637,-73.664],[190.226,-49.861],[185.827,-34.971],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-108.315,66.647],[-114.312,51.149],[-119.973,43.389],[-121.168,40.999],[-151.313,7.022],[-187.949,-30.295],[-182.841,-64.766],[-165.17,-70.545],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":91,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[0.671,-12.439],[3.35,-3.816],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-10.459,5.395],[0,0],[11.76,-2.42],[22.629,3.501],[6.991,5.725],[0,0],[-9.191,9.184],[-5.91,0.162],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.142,0.743],[-0.267,5.115],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[9.393,-3.69],[0,0],[-18.981,-2.937],[0,0],[-9.867,-8.643],[4.252,-4.235],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[167.158,-65.041],[189.716,-39.423],[184.161,-24.968],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-91.847,62.199],[-37.104,38.748],[-40.643,26.737],[-109.952,37.159],[-148.443,11.909],[-184.069,-20.774],[-183.534,-55.371],[-166.893,-63.364],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.3,"y":0},"t":98,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,58.567],[26.218,14.805],[24.118,10.005],[-99.344,35.341],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"t":107,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gs","o":{"a":0,"k":100},"w":{"a":0,"k":6},"g":{"p":3,"k":{"a":0,"k":[0,0.914,0.553,0.188,0.5,0.898,0.48,0.106,1,0.882,0.408,0.024]}},"s":{"a":0,"k":[-1,-171]},"e":{"a":0,"k":[1.73,184.29]},"t":1,"lc":2,"lj":2,"bm":0,"nm":"Gradient_3LR35z1uxe","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Outline","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-166.75,-33.375],[-72.95,-47.275],[-46.75,-65.3],[-4.1,-157.45]],"c":false}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":13,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-162.5,-33],[-71.2,-45.9],[-45.5,-63.8],[-0.1,-152.2]],"c":false}]},{"i":{"x":0.4,"y":1},"o":{"x":0.15,"y":0},"t":87,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-162.5,-46.75],[-71.2,-45.9],[-45.5,-63.8],[-0.1,-152.2]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.3,"y":0},"t":98,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-162.5,-33],[-71.2,-45.9],[-45.5,-63.8],[-0.1,-152.2]],"c":false}]},{"t":107,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-166.75,-33.375],[-72.95,-47.275],[-46.75,-65.3],[-4.1,-157.45]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":17},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Blik","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[5.4,11],[0,0],[3.25,-0.25],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-1.325,-3.625],[-4,-0.75],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[77.65,-55.125],[50.8,-75.675],[10.825,-157.375],[1.5,-162.375],[-10.275,-157.25],[-53.825,-72.375],[-77.4,-55.275],[-165.6,-43.275],[-173.8,-38.5],[-173.6,-23.175],[-140.575,4.975],[-97.95,14.2],[3.45,1.825],[21.15,10.45],[22.15,12.85],[118.975,-50.8]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":13,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[0,0],[0,0],[0,0],[0,0],[-98.482,72.589]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[75.9,-52.5],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-135.837,6.531],[-115.87,23.71],[-104.244,35.132],[-95.847,45.185],[-92.594,65.266],[151.389,-43.793]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.15,"y":0},"t":87,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[2.052,-1.661],[-3.325,-4.516],[0,0],[0,0],[0,0],[0,0],[0,0],[-62.452,93.525]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.597,-0.324],[-3.62,3.029],[0,0],[9.6,7.9],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[75.9,-52.5],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.93,-53.672],[-171.245,-51.955],[-172.221,-36.548],[-138.717,-3.261],[-113.87,22.46],[-102.071,36.384],[-93.487,48.459],[-94.87,68.258],[168.027,-59.406]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.3,"y":0},"t":98,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[75.9,-52.5],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-99.516,16.915],[27.417,-6.395],[45.618,3.105],[46.617,5.505],[118.1,-47.3]],"c":true}]},{"t":107,"s":[{"i":[[0,0],[5.4,11],[0,0],[3.25,-0.25],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-1.325,-3.625],[-4,-0.75],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[77.65,-55.125],[50.8,-75.675],[10.825,-157.375],[1.5,-162.375],[-10.275,-157.25],[-53.825,-72.375],[-77.4,-55.275],[-165.6,-43.275],[-173.8,-38.5],[-173.6,-23.175],[-140.575,4.975],[-97.95,14.2],[3.45,1.825],[21.15,10.45],[22.15,12.85],[118.975,-50.8]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.929411764706,0.564705882353,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":38},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shine","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[5.603,0.192],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-6.444,-5.355],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-6.29,-0.293],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[2.372,5.606],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[104.956,155.7],[93.256,62.9],[101.214,41.5],[170.763,-26.115],[173.063,-32.815],[162.579,-43.842],[76.143,-53.835],[49.499,-73.164],[10.811,-153.024],[2.164,-160.993],[-11.918,-154.83],[-53.414,-70.971],[-76.735,-56.434],[-163.221,-44.07],[-170.528,-38.243],[-169.284,-21.101],[-138.433,5.207],[-100.928,18.341],[-2.853,5.647],[15.589,11.384],[8.703,29.466],[-70.971,71.374],[-99.035,114.457],[-104.935,156.936],[-103.035,164.956],[-89.45,167.071],[-15.351,128.956],[14.849,129.556],[86.493,169.377],[94.193,170.377]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":13,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[0,0],[0,0],[-3.334,-5.586],[-0.647,-3.074],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[0.548,0.373],[1.554,3.662],[0,0],[0,0],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[106.157,155.7],[94.457,62.9],[102.657,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-135.837,6.531],[-115.514,23.925],[-102.072,36.385],[-96.395,43.812],[-93.042,57.852],[-94.205,68.389],[-99.471,114.7],[-104.928,157.016],[-103.028,163.216],[-90.3,166.1],[-15.4,127.5],[14.8,129.802],[87.1,167.8],[94.8,168.8]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.15,"y":0},"t":87,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0.303,2.078],[4.935,-0.113],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[2.062,-1.649],[-3.325,-4.516],[0,0],[0,0],[0,0],[-3.4,-6.7],[-0.649,-3.68],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.268,-1.701],[-0.735,-5.047],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.597,-0.324],[-3.452,2.761],[0,0],[9.6,7.9],[0,0],[0.548,0.373],[1.579,4.389],[0,0],[0,0],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[171.386,-43.512],[172.771,-51.889],[163.318,-59.202],[75.9,-52.5],[47.8,-72.8],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-52.2,-70],[-75.4,-53.4],[-163.93,-53.672],[-171.245,-51.955],[-172.221,-36.548],[-138.717,-3.261],[-112.514,22.883],[-102.072,36.385],[-94.199,46.957],[-93.687,65.739],[-94.344,76.311],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-86.742,166.175],[-15.886,130.525],[14.314,131.125],[81.903,168.096],[94.8,168.8]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.3,"y":0},"t":98,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[5.603,0.192],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-6.444,-5.355],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-6.29,-0.293],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[2.372,5.606],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[10.083,-151.811],[2.285,-159.901],[-9.855,-153.617],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-168.799,-21.101],[-136.855,4.6],[-96.835,23.612],[26.134,-3.413],[45.062,5.058],[38.505,25.846],[-70.728,72.102],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-90.3,166.1],[-15.4,127.5],[14.8,128.1],[87.1,167.8],[94.8,168.8]],"c":true}]},{"t":107,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[5.603,0.192],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-6.444,-5.355],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-6.29,-0.293],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[2.372,5.606],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[104.956,155.7],[93.256,62.9],[101.214,41.5],[170.763,-26.115],[173.063,-32.815],[162.579,-43.842],[76.143,-53.835],[49.499,-73.164],[10.811,-153.024],[2.164,-160.993],[-11.918,-154.83],[-53.414,-70.971],[-76.735,-56.434],[-163.221,-44.07],[-170.528,-38.243],[-169.284,-21.101],[-138.433,5.207],[-100.928,18.341],[-2.853,5.647],[15.589,11.384],[8.703,29.466],[-70.971,71.374],[-99.035,114.457],[-104.935,156.936],[-103.035,164.956],[-89.45,167.071],[-15.351,128.956],[14.849,129.556],[86.493,169.377],[94.193,170.377]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,0.99,0.922,1,1,0.98,0.843,0,0,0.5,0.5,1,1]}},"s":{"a":0,"k":[55.415,47.417]},"e":{"a":0,"k":[-16.164,-59.226]},"t":1,"nm":"Gradient_QNQMKVBQfT","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[103,103]},"r":{"a":0,"k":0},"o":{"a":0,"k":48},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Front 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[5.603,0.192],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-6.444,-5.355],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-6.29,-0.293],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[2.372,5.606],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[104.956,155.7],[93.256,62.9],[101.214,41.5],[170.763,-26.115],[173.063,-32.815],[162.579,-43.842],[76.143,-53.835],[49.499,-73.164],[10.811,-153.024],[2.164,-160.993],[-11.918,-154.83],[-53.414,-70.971],[-76.614,-54.978],[-163.1,-42.614],[-170.528,-38.243],[-169.284,-21.101],[-138.433,5.207],[-100.928,18.341],[-2.853,5.647],[15.589,11.384],[8.703,29.466],[-70.971,71.374],[-99.035,114.457],[-104.935,156.936],[-103.035,164.956],[-89.45,167.071],[-15.351,128.956],[14.849,129.556],[86.493,169.377],[94.193,170.377]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":13,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[0,0],[0,0],[-3.334,-5.586],[-0.647,-3.074],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[0.548,0.373],[1.554,3.662],[0,0],[0,0],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[106.157,155.7],[94.457,62.9],[102.657,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-135.837,6.531],[-115.514,23.925],[-102.072,36.385],[-96.395,43.812],[-93.042,57.852],[-94.205,68.389],[-99.471,114.7],[-104.928,157.016],[-103.028,163.216],[-90.3,166.1],[-15.4,127.5],[14.8,129.802],[87.1,167.8],[94.8,168.8]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.15,"y":0},"t":87,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0.303,2.078],[4.935,-0.113],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[2.062,-1.649],[-3.325,-4.516],[0,0],[0,0],[0,0],[-3.4,-6.7],[-0.649,-3.68],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.268,-1.701],[-0.735,-5.047],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.597,-0.324],[-3.452,2.761],[0,0],[9.6,7.9],[0,0],[0.548,0.373],[1.579,4.389],[0,0],[0,0],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[171.386,-43.512],[172.771,-51.889],[163.318,-59.202],[75.9,-52.5],[47.8,-72.8],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-52.2,-70],[-75.4,-53.4],[-163.93,-53.672],[-171.245,-51.955],[-172.221,-36.548],[-138.717,-3.261],[-112.514,22.883],[-102.072,36.385],[-94.199,46.957],[-93.687,65.739],[-94.344,76.311],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-86.742,166.175],[-15.886,130.525],[14.314,131.125],[81.903,168.096],[94.8,168.8]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.3,"y":0},"t":98,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[5.603,0.192],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-6.444,-5.355],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-6.29,-0.293],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[2.372,5.606],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[10.083,-151.811],[2.285,-159.901],[-9.855,-153.617],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-168.799,-21.101],[-136.855,4.6],[-96.835,23.612],[26.134,-3.413],[45.062,5.058],[38.505,25.846],[-70.728,72.102],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-90.3,166.1],[-15.4,127.5],[14.8,128.1],[87.1,167.8],[94.8,168.8]],"c":true}]},{"t":107,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[5.603,0.192],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-6.444,-5.355],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-6.29,-0.293],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[2.372,5.606],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[104.956,155.7],[93.256,62.9],[101.214,41.5],[170.763,-26.115],[173.063,-32.815],[162.579,-43.842],[76.143,-53.835],[49.499,-73.164],[10.811,-153.024],[2.164,-160.993],[-11.918,-154.83],[-53.414,-70.971],[-76.614,-54.978],[-163.1,-42.614],[-170.528,-38.243],[-169.284,-21.101],[-138.433,5.207],[-100.928,18.341],[-2.853,5.647],[15.589,11.384],[8.703,29.466],[-70.971,71.374],[-99.035,114.457],[-104.935,156.936],[-103.035,164.956],[-89.45,167.071],[-15.351,128.956],[14.849,129.556],[86.493,169.377],[94.193,170.377]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.635,0,0.5,1,0.755,0.184,1,1,0.875,0.369]}},"s":{"a":0,"k":[93.279,197.903]},"e":{"a":0,"k":[-47.232,-173.304]},"t":1,"nm":"Gradient_mnhPmvM8T8","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[103,103]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Front","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":13,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[0,0],[0,0],[-3.504,-2.696],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-108.315,66.647],[-114.312,51.149],[-119.973,44.847],[-121.168,42.457],[-146.1,18.689],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.15,"y":0},"t":87,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[-0.344,-12.486],[3.043,-4.081],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-10.404,7.939],[-5.922,-0.62],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.194,-0.306],[0.142,5.133],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[0,0],[0,0],[-7.519,-10.38],[0,0],[-10.071,-9.92],[4.805,-3.666],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[165.637,-73.664],[190.226,-49.861],[185.827,-34.971],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-108.315,66.647],[-114.312,51.149],[-119.973,43.389],[-121.168,40.999],[-151.313,7.022],[-187.949,-30.295],[-182.841,-64.766],[-165.17,-70.545],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":91,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[0.671,-12.439],[3.35,-3.816],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-10.459,5.395],[0,0],[11.725,-0.275],[0,0],[6.991,5.725],[0,0],[-9.191,9.184],[-5.91,0.162],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.142,0.743],[-0.267,5.115],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[7.9,-3.232],[0,0],[-12.298,-3.4],[0,0],[-9.867,-8.643],[4.252,-4.235],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[167.158,-65.041],[189.716,-39.423],[184.161,-24.968],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-91.847,62.199],[-37.104,38.748],[-40.643,26.737],[-109.154,37.884],[-148.443,11.909],[-184.069,-20.774],[-183.534,-55.371],[-166.893,-63.364],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.3,"y":0},"t":98,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,58.567],[26.218,14.805],[24.118,10.005],[-99.344,35.341],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"t":107,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.757,0.149,0.5,0.965,0.633,0.075,1,0.929,0.51,0]}},"s":{"a":0,"k":[-0.953,-180.679]},"e":{"a":0,"k":[1.58,188.35]},"t":1,"nm":"Gradient_meaT7JBx2M","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Back","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Circle 8","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":89,"s":[70]},{"t":99,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[256,433,0],"to":[0,0,0],"ti":[0,0,0]},{"t":99,"s":[256,155,0]}]},"a":{"a":0,"k":[6,186,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[-97.754,0],[0,-19.882],[97.754,0],[0,19.882]],"o":[[97.754,0],[0,19.882],[-97.754,0],[0,-19.882]],"v":[[0,-36],[177,0],[0,36],[-177,0]],"c":true}]},{"t":99,"s":[{"i":[[-137.657,0],[0,-23.196],[137.657,0],[0,23.196]],"o":[[137.657,0],[0,23.196],[-137.657,0],[0,-23.196]],"v":[[0,-42],[249.25,0],[0,42],[-249.25,0]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.949019607843,0.564705882353,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[30]},{"t":99,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[6,206]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":75,"op":100,"st":75,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Circle 7","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":61,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":73,"s":[80]},{"t":83,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":57,"s":[256,443,0],"to":[0,0,0],"ti":[0,0,0]},{"t":83,"s":[256,115,0]}]},"a":{"a":0,"k":[6,186,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[-97.754,0],[0,-19.882],[97.754,0],[0,19.882]],"o":[[97.754,0],[0,19.882],[-97.754,0],[0,-19.882]],"v":[[0,-36],[177,0],[0,36],[-177,0]],"c":true}]},{"t":83,"s":[{"i":[[-137.657,0],[0,-23.196],[137.657,0],[0,23.196]],"o":[[137.657,0],[0,23.196],[-137.657,0],[0,-23.196]],"v":[[0,-42],[249.25,0],[0,42],[-249.25,0]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.949019607843,0.564705882353,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[40]},{"t":83,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[6,186]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":57,"op":83,"st":57,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Circle 6","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":39,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":51,"s":[80]},{"t":61,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":35,"s":[256,445,0],"to":[0,0,0],"ti":[0,0,0]},{"t":61,"s":[256,95,0]}]},"a":{"a":0,"k":[6,186,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[-97.754,0],[0,-19.882],[97.754,0],[0,19.882]],"o":[[97.754,0],[0,19.882],[-97.754,0],[0,-19.882]],"v":[[0,-36],[177,0],[0,36],[-177,0]],"c":true}]},{"t":61,"s":[{"i":[[-137.657,0],[0,-23.196],[137.657,0],[0,23.196]],"o":[[137.657,0],[0,23.196],[-137.657,0],[0,-23.196]],"v":[[0,-42],[249.25,0],[0,42],[-249.25,0]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.949019607843,0.564705882353,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[50]},{"t":61,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[6,186]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":35,"op":61,"st":35,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Circle 5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[0]},{"i":{"x":[0.843],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":20,"s":[80]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":31,"s":[80]},{"t":41,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[256,453,0],"to":[0,0,0],"ti":[0,0,0]},{"t":41,"s":[256,95,0]}]},"a":{"a":0,"k":[6,186,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[-97.754,0],[0,-19.882],[97.754,0],[0,19.882]],"o":[[97.754,0],[0,19.882],[-97.754,0],[0,-19.882]],"v":[[0,-36],[177,0],[0,36],[-177,0]],"c":true}]},{"t":41,"s":[{"i":[[-137.657,0],[0,-23.196],[137.657,0],[0,23.196]],"o":[[137.657,0],[0,23.196],[-137.657,0],[0,-23.196]],"v":[[0,-42],[249.25,0],[0,42],[-249.25,0]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.949019607843,0.564705882353,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[50]},{"t":41,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[6,186]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":15,"op":41,"st":15,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Prem Star Appear 4","refId":"comp_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[100]},{"t":43,"s":[0]}]},"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[256,256,0]}},"ao":0,"w":512,"h":512,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"Prem Star Move 3","refId":"comp_1","sr":1,"ks":{"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[256,256,0]}},"ao":0,"w":512,"h":512,"ip":42,"op":222,"st":42,"bm":0}]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/star_reaction_click.json b/TMessagesProj/src/main/res/raw/star_reaction_click.json new file mode 100644 index 00000000000..c58988d2539 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/star_reaction_click.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":0,"op":125,"w":512,"h":512,"nm":"Prem Star Move 5","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Star Main 3","sr":1,"ks":{"p":{"a":0,"k":[256.061,259.332,0]},"a":{"a":0,"k":[0.061,3.332,0]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.1,0.1,0.1],"y":[0,0,0]},"t":89,"s":[25,25,100]},{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":103,"s":[120,120,100]},{"i":{"x":[0.5,0.5,0.5],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":112,"s":[90,90,100]},{"t":124,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-162.5,-33],[-71.2,-45.9],[-45.5,-63.8],[-0.1,-152.2]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":17},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[0]},{"t":124,"s":[100]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Blik","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.1,"y":0},"t":89,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[32.419,-18.071],[-6.498,-15.36],[-5.92,1.887]],"o":[[-40.332,-2.996],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[11.743,-2.071],[-17.581,6.179],[27.927,-15.026],[17.83,-20.363]],"v":[[104.65,-49],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[8.4,36.075],[-92.683,101.114],[168.738,-27.633]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":93,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.927,-15.409],[24.662,-9.89],[-4.717,2.248]],"o":[[-26.7,-2.6],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[9.938,-1.658],[-3.085,2.323],[16.048,-8.635],[4.933,-8.207]],"v":[[92.236,-50.674],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[-9.893,1.642],[23.53,12.576],[5.89,38.772],[128.984,-40.492]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":95,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-6.702,0.917],[-4.054,-7.358],[-4.048,2.448]],"o":[[-19.12,-2.38],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[8.935,-1.428],[4.975,0.178],[9.443,-5.081],[-2.239,-1.448]],"v":[[85.334,-51.604],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[-17.451,2.722],[4.917,-0.491],[21.337,7.046],[106.878,-47.643]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":103,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[0,0],[0,0],[-3.092,2.735]],"o":[[-29.805,-1.848],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0,0],[0,0],[0,0]],"v":[[93.509,-50.543],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[-28.257,4.265],[-10.709,1.374],[-0.361,0.078],[90.056,-51.213]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":108,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-4.011,-1.969],[-0.939,-2.083],[-17.77,9.867]],"o":[[-10.279,-1.77],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.42,0.206],[14.603,-7.857],[0,0]],"v":[[75.693,-52.707],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[-11.546,1.878],[11.739,0.561],[20.432,6.288],[105.366,-48.835]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.3,"y":0},"t":112,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-1.796,-3.984],[-31.162,16.374]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27.927,-15.026],[0,0]],"v":[[75.9,-52.5],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[23.456,15.003],[129.905,-45.633]],"c":true}]},{"t":124,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[75.9,-52.5],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[22.9,11.6],[118.1,-47.3]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.850980401039,0.403921574354,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shine","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[4.3,8.6],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[13.8,32.5],[-70,75.5],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-90.3,166.1],[-15.4,127.5],[14.8,128.1],[87.1,167.8],[94.8,168.8]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.635,0,0.5,1,0.755,0.184,1,1,0.875,0.369]}},"s":{"a":0,"k":[93.279,197.903]},"e":{"a":0,"k":[-47.232,-173.304]},"t":1,"nm":"Gradient_vXQH2uPf7C","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Front","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gs","o":{"a":0,"k":100},"w":{"a":0,"k":8},"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[0,1,1,1,0.5,1,1,1,1,1,1,1]},{"t":112,"s":[0,0.796,0.439,0,0.5,0.782,0.4,0,1,0.769,0.361,0]}]}},"s":{"a":0,"k":[-1,-171]},"e":{"a":0,"k":[1.73,184.29]},"t":1,"lc":2,"lj":2,"bm":0,"nm":"Gradient_oh7KTufb2R","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[0.002,1,1,1,0.501,1,1,1,1,1,1,1]},{"t":112,"s":[0,1,0.714,0,0.5,0.965,0.612,0,1,0.929,0.51,0]}]}},"s":{"a":0,"k":[-0.953,-180.679]},"e":{"a":0,"k":[1.58,188.35]},"t":1,"nm":"Gradient_UUJnFZtDrL","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Back","bm":0,"hd":false}],"ip":89,"op":250,"st":70,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Circle","sr":1,"ks":{"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[27,-21,0]},"s":{"a":0,"k":[90,90,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.3,"y":0.937},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[-32.523,0],[0,-32.523],[32.523,0],[0,32.523]],"o":[[32.523,0],[0,32.523],[-32.523,0],[0,-32.523]],"v":[[0,-58.889],[58.889,0],[0,58.889],[-58.889,0]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.064,"y":0.006},"t":87,"s":[{"i":[[-149.117,0],[0,-149.117],[149.117,0],[0,149.117]],"o":[[149.117,0],[0,149.117],[-149.117,0],[0,-149.117]],"v":[[0,-270],[270,0],[0,270],[-270,0]],"c":true}]},{"t":93,"s":[{"i":[[-155.867,0],[0,-155.867],[155.867,0],[0,155.867]],"o":[[155.867,0],[0,155.867],[-155.867,0],[0,-155.867]],"v":[[0,-282.222],[282.222,0],[0,282.222],[-282.222,0]],"c":true}]}]},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[-0.276,0],[0,0.276],[0.276,0],[0,-0.276]],"o":[[0.276,0],[0,-0.276],[-0.276,0],[0,0.276]],"v":[[0,0.5],[0.5,0],[0,-0.5],[-0.5,0]],"c":true}]},{"t":93,"s":[{"i":[[154.64,0],[0,-154.64],[-154.64,0],[0,154.64]],"o":[[-154.64,0],[0,154.64],[154.64,0],[0,-154.64]],"v":[[0,-280],[-280,0],[0,280],[280,0]],"c":true}]}]},"nm":"Path 2","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[27,-21]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":71,"op":91,"st":71,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Lines","sr":1,"ks":{"p":{"a":0,"k":[256.045,256.045,0]},"a":{"a":0,"k":[0.05,0.05,0]},"s":{"a":0,"k":[90,90,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[280.296,47.88],[31.05,2.05]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[100]},{"t":99,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[256.515,247.158],[21.606,17.606]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[100]},{"t":99,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.293,280.767],[0.8,33.05]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[100]},{"t":99,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-229.244,256.137],[-21.061,24.494]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[100]},{"t":99,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-274.668,73.448],[-27.506,5.05]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[100]},{"t":99,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-282.302,-157.983],[0.05,0.05]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[100]},{"t":99,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[116.54,-278.667],[11.272,-35.839]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[100]},{"t":99,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-119.501,-274.658],[-10.95,-32.839]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[100]},{"t":99,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 10","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[282.413,-190.005],[0.05,0.05]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[100]},{"t":99,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 9","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":85,"s":[100]},{"t":100,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":84,"s":[100]},{"t":99,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":87,"op":101,"st":42,"bm":0},{"ddd":0,"ind":4,"ty":3,"nm":"Null 4","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":0,"k":[258,269,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":1,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":6,"s":[102,98,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":11,"s":[98,102,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":16,"s":[103,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[98,102,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":26,"s":[102,98,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":31,"s":[98,102,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":36,"s":[104,95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[98,102,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":46,"s":[103,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":50,"s":[98,102,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":54,"s":[102,98,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":58,"s":[96,104,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":62,"s":[102,98,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[104,96,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[96,104,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[103,96,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":77,"s":[98,102,100]},{"t":79,"s":[109.421,99,100]}]}},"ao":0,"ip":0,"op":77,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Star Main Flash","parent":6,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.29],"y":[0]},"t":58,"s":[0]},{"t":76,"s":[80]}]},"p":{"a":0,"k":[1.061,17.332,0]},"a":{"a":0,"k":[1.061,17.332,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"t":72,"s":[{"i":[[-5.335,6.709],[0,0],[-9.326,-5.7],[-2.823,-3.052],[-15.103,-22.59],[-9.745,-4.891],[-25.757,-17.992],[2.862,-12.158],[2.241,-4.473],[25.151,-33.027],[1.248,-5.236],[6.609,-46.211],[15.419,-1.7],[8.158,0.721],[0,0],[7.848,-2.504],[0,0],[6.352,11.122],[1.145,10.361],[0,0],[-18.081,12.437],[-41.786,22.189],[8.594,-2.988],[26.025,-1.286],[13.727,4.954],[0,0],[-6.802,11.181],[-7.155,5.381],[0,0]],"o":[[24.186,-30.416],[11.248,-10.665],[4.112,2],[0,0],[4.782,7.152],[0,0],[9.905,6.919],[-1.177,4.999],[0,0],[-3.535,4.642],[0,0],[-1.486,10.39],[-5.825,0.6],[-39.568,-3.499],[-5.448,-1.8],[-32.596,10.399],[-15.188,2.11],[-2.399,-4.2],[-1.145,-10.361],[3.655,-23.3],[0,0],[7.065,-3.752],[0,0],[-15.438,0.763],[-17.009,-6.138],[-7.962,-7.387],[3.141,-5.164],[23.53,-17.697],[3.994,-3.159]],"v":[[-80.807,-104.57],[-23.131,-169.111],[10.437,-177.273],[22.547,-168.711],[76.225,-108.082],[98.129,-91.431],[172.572,-51.042],[189.584,-20.302],[185.083,-6.006],[145.48,58.297],[141.433,70.736],[137.091,158.8],[111.163,186.8],[92.9,186.56],[10.96,168.3],[-13.276,167.69],[-97.078,184.855],[-134.403,172.9],[-137.83,158.7],[-136.007,120.598],[-106.65,73.032],[-15.725,16.025],[-19.968,6.315],[-102.678,18.338],[-145.357,13.948],[-173.971,-4.324],[-181.535,-37.88],[-165.399,-52.981],[-96.395,-92.779]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.968626972273,0.788234994926,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.969274004768,0.788234994926,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Back","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[-100.939,176.332]},"a":{"a":0,"k":[-100.939,176.332]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":77,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Star Main","parent":4,"sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[-0.939,4.332,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[5.061,4.332,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[-3.939,11.332,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[-0.939,-2.668,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[-9.939,1.332,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[-0.939,4.332,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[10.341,4.332,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[-8.871,12.582,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[-0.564,-10.138,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[-12.439,1.332,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[1.579,11.795,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[10.511,-5.744,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[-7.689,17.46,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[2.811,-10.558,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[-18.779,2.582,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[11.356,9.374,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[5.061,-4.352,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[-7.656,17.616,0],"to":[0,0,0],"ti":[0,0,0]},{"t":76,"s":[-4.689,-10.219,0]}]},"a":{"a":0,"k":[1.061,17.332,0]},"s":{"a":1,"k":[{"i":{"x":[0.71,0.71,0.71],"y":[1,1,1]},"o":{"x":[0.4,0.4,0.4],"y":[0,0,0]},"t":10,"s":[100,100,100]},{"t":72,"s":[117,117,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-162.5,-33],[-71.2,-45.9],[-45.5,-63.8],[-0.1,-152.2]],"c":false}]},{"t":72,"s":[{"i":[[-6.84,6.129],[0,0],[-8.429,8.131],[-14.006,13.31]],"o":[[17.027,-15.257],[9.37,-6.18],[0,0],[1.908,-1.813]],"v":[[-156.67,-28.712],[-92.161,-67.944],[-58.248,-88.65],[-0.325,-152.2]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":17},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Blik","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[75.9,-52.5],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[22.9,11.6],[118.1,-47.3]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29,"s":[{"i":[[0,0],[7.817,13.122],[0,0],[1.502,0.7],[1.902,-3.9],[0,0],[9.544,-2.426],[0,0],[1.485,-2.176],[-4.472,-3.364],[0,0],[-12.111,1.679],[0,0],[-2.848,-13.629],[3.074,-7.224],[-33.542,13.684]],"o":[[-33.001,-6.607],[0,0],[-0.801,-1.6],[-2.703,-1.2],[0,0],[-5.725,7.95],[0,0],[-2.575,0.434],[-2.593,3.933],[0,0],[9.978,7.373],[0,0],[9.577,-1.405],[0.292,1.083],[50.605,-27.322],[-5.778,-3.712]],"v":[[112.919,-51.537],[51.879,-81.772],[6.206,-158],[2.502,-161.5],[-7.409,-158],[-56.845,-78.731],[-82.069,-60.705],[-161.254,-39.662],[-167.754,-35.925],[-164.272,-20.918],[-136.631,-0.567],[-102.523,8.424],[-3.029,-4.819],[19.15,9.225],[18.394,20.836],[154.133,-40.42]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":51,"s":[{"i":[[0,0],[10.569,15.538],[0,0],[1.503,0.7],[1.905,-3.9],[0,0],[9.025,-3.708],[0,0],[1.354,-2.262],[-4.669,-3.095],[0,0],[-11.895,1.654],[0,0],[-2.22,-21.518],[20.051,-14.936],[-26.425,5.4]],"o":[[-11.836,-6.276],[0,0],[-0.802,-1.6],[-2.706,-1.2],[0,0],[-7.119,6.755],[0,0],[-2.547,0.587],[-2.356,4.083],[0,0],[10.408,6.773],[0,0],[11.943,-1.752],[0.169,1.405],[77.481,-40.554],[9.299,-10.85]],"v":[[145.72,-42.529],[56.523,-91.987],[6.213,-158],[2.504,-161.5],[-7.42,-158],[-62.135,-88.672],[-89.663,-69.023],[-159.152,-37.683],[-165.424,-33.562],[-161.053,-18.776],[-139.968,-6.451],[-105.168,1.278],[-10.692,-9.964],[16.018,9.254],[-10.879,37.226],[168.93,-23.097]],"c":true}]},{"t":72,"s":[{"i":[[0,0],[11.578,16.424],[0,0],[1.504,0.7],[1.905,-3.9],[0,0],[8.834,-4.178],[-0.71,-2.234],[1.306,-2.294],[-4.741,-2.996],[0,0],[-11.697,0.917],[0,0],[-1.989,-24.411],[26.275,-17.764],[-23.816,2.363]],"o":[[-7.875,-5.251],[0,0],[-0.802,-1.6],[-2.708,-1.2],[0,0],[-7.631,6.317],[0,0],[0.71,2.234],[-2.27,4.139],[0,0],[10.565,6.553],[37.943,-2.974],[12.81,-1.879],[0.124,1.523],[87.334,-45.406],[11.018,-13.252]],"v":[[155.581,-38.923],[58.225,-95.731],[6.215,-158],[2.505,-161.5],[-7.423,-158],[-64.074,-92.317],[-95.563,-74.538],[-158.382,-36.957],[-164.57,-32.696],[-159.872,-17.99],[-142.304,-6.965],[-106.138,1.329],[-19.065,-10.206],[14.87,9.265],[-21.611,43.235],[166.625,-16.746]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.850980401039,0.403921574354,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shine","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[4.3,8.6],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[13.8,32.5],[-70,75.5],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-90.3,166.1],[-15.4,127.5],[14.8,128.1],[87.1,167.8],[94.8,168.8]],"c":true}]},{"t":72,"s":[{"i":[[-1.249,7.637],[5.189,38.103],[-5.495,7.011],[0,0],[-0.239,2.086],[2.438,1.075],[14.055,6.648],[7.207,9.231],[0,0],[1.604,0.7],[1.905,-4],[0,0],[9.962,-5.803],[0,0],[1.32,-2.286],[-4.741,-2.996],[0,0],[-12.035,2.293],[0,0],[-4.272,-9.991],[12.407,-8.756],[16.277,-14.097],[3.138,-11.826],[0,0],[-1.485,-1.4],[-6.926,0.73],[-40.273,14.794],[-14.07,-3.275],[-35.269,-3.024],[-2.627,0.5]],"o":[[0,0],[-1.236,-9.076],[14.738,-18.803],[1.661,-1.32],[0.58,-5.067],[0,0],[-15.443,-7.305],[0,0],[-0.802,-1.6],[-2.106,-1],[0,0],[-6.252,5.817],[0,0],[-2.537,0.643],[-2.21,3.828],[0,0],[10.565,6.553],[0,0],[12.81,-1.879],[6.014,11.604],[0,0],[-7.189,6.226],[-3.347,12.615],[-0.343,1.9],[3.769,3.7],[0,0],[8.2,-3.012],[0,0],[4.778,0.41],[5.711,-1.2]],"v":[[120.242,153.851],[119.368,69.761],[130.074,43.663],[167.961,-18.374],[170.118,-24.666],[164.187,-35.079],[95.708,-72.618],[58.226,-95.731],[6.215,-158],[1.803,-161.6],[-6.721,-157.5],[-64.074,-92.317],[-95.563,-74.538],[-158.382,-36.957],[-164.57,-32.696],[-159.872,-17.99],[-142.304,-6.964],[-106.138,1.329],[-19.065,-10.206],[11.719,-2.446],[-0.146,28.063],[-93.597,89.909],[-115.596,119.493],[-118.527,157.3],[-116.357,163.5],[-100.443,168.155],[-15.458,149.16],[11.696,148.453],[97.95,168.827],[108.08,168.8]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.635,0,0.5,1,0.755,0.184,1,1,0.875,0.369]}},"s":{"a":0,"k":[93.279,197.903]},"e":{"a":0,"k":[-47.232,-173.304]},"t":1,"nm":"Gradient_Ez2phmKzS3","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Front","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"t":72,"s":[{"i":[[-5.335,6.709],[0,0],[-9.326,-5.7],[-2.823,-3.052],[-15.103,-22.59],[-9.745,-4.891],[-25.757,-17.992],[2.862,-12.158],[2.241,-4.473],[25.151,-33.027],[1.248,-5.236],[6.609,-46.211],[15.419,-1.7],[8.158,0.721],[0,0],[7.848,-2.504],[0,0],[6.352,11.122],[1.145,10.361],[0,0],[-18.081,12.437],[-41.786,22.189],[8.594,-2.988],[26.025,-1.286],[13.727,4.954],[0,0],[-6.802,11.181],[-7.155,5.381],[0,0]],"o":[[24.186,-30.416],[11.248,-10.665],[4.112,2],[0,0],[4.782,7.152],[0,0],[9.905,6.919],[-1.177,4.999],[0,0],[-3.535,4.642],[0,0],[-1.486,10.39],[-5.825,0.6],[-39.568,-3.499],[-5.448,-1.8],[-32.596,10.399],[-15.188,2.11],[-2.399,-4.2],[-1.145,-10.361],[3.655,-23.3],[0,0],[7.065,-3.752],[0,0],[-15.438,0.763],[-17.009,-6.138],[-7.962,-7.387],[3.141,-5.164],[23.53,-17.697],[3.994,-3.159]],"v":[[-80.807,-104.57],[-23.131,-169.111],[10.437,-177.273],[22.547,-168.711],[76.225,-108.082],[98.129,-91.431],[172.572,-51.042],[189.584,-20.302],[185.083,-6.006],[145.48,58.297],[141.433,70.736],[137.091,158.8],[111.163,186.8],[92.9,186.56],[10.96,168.3],[-13.276,167.69],[-97.078,184.855],[-134.403,172.9],[-137.83,158.7],[-136.007,120.598],[-106.65,73.032],[-15.725,16.025],[-19.968,6.315],[-102.678,18.338],[-145.357,13.948],[-173.971,-4.324],[-181.535,-37.88],[-165.399,-52.981],[-96.395,-92.779]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gs","o":{"a":0,"k":100},"w":{"a":0,"k":8},"g":{"p":3,"k":{"a":0,"k":[0,0.796,0.439,0,0.5,0.782,0.4,0,1,0.769,0.361,0]}},"s":{"a":0,"k":[-1,-171]},"e":{"a":0,"k":[1.73,184.29]},"t":1,"lc":2,"lj":2,"bm":0,"nm":"Gradient_qhoXqWB7bm","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.714,0,0.5,0.965,0.612,0,1,0.929,0.51,0]}},"s":{"a":0,"k":[-0.953,-180.679]},"e":{"a":0,"k":[1.58,188.35]},"t":1,"nm":"Gradient_wycXGuHQTp","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Back","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[-100.939,176.332]},"a":{"a":0,"k":[-100.939,176.332]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":77,"st":0,"bm":0}]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/star_reaction_effect1.json b/TMessagesProj/src/main/res/raw/star_reaction_effect1.json new file mode 100644 index 00000000000..3931d34fdbf --- /dev/null +++ b/TMessagesProj/src/main/res/raw/star_reaction_effect1.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":60,"op":150,"w":512,"h":512,"nm":"Reaction +","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"sred 13","sr":1,"ks":{"p":{"a":0,"k":[424.898,270.775,0]},"a":{"a":0,"k":[634.726,-520.066,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":128,"s":[24.42,24.42,100]},{"t":146,"s":[55.769,55.769,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[643.643,-311.038]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":129,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":138,"s":[152,152]},{"t":148,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[672.05,-449.466]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":126,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":137,"s":[152,152]},{"t":148,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[521.835,-653.776]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":123,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":135,"s":[152,152]},{"t":148,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 1","bm":0,"hd":false}],"ip":123,"op":149,"st":-112,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Splash8","sr":1,"ks":{"r":{"a":0,"k":15.063},"p":{"a":0,"k":[114.323,321.218,0]},"a":{"a":0,"k":[188.644,383.042,0]},"s":{"a":0,"k":[76.633,76.633,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[16.315,7.996],[0,0]],"o":[[-50.738,-85.26],[0,0]],"v":[[343.1,453.608],[187.723,383.833]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[0.668097138405,0.145098030567,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[1,0.945421040058,0.337254911661,1]},{"t":138,"s":[0.580392181873,1,0.035294119269,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[13]},{"t":142,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.308,21.519],[0,0]],"o":[[-0.647,-97.877],[0,0]],"v":[[100.481,524.121],[163.398,392.329]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[0.668097138405,0.145098030567,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[1,0.945421040058,0.337254911661,1]},{"t":138,"s":[0.580392181873,1,0.035294119269,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[13]},{"t":142,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[20.184,143.776],[0,0]],"o":[[37.778,-141.807],[0,0]],"v":[[227.607,568.091],[177.212,391.069]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[0.668097138405,0.145098030567,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[1,0.945421040058,0.337254911661,1]},{"t":138,"s":[0.580392181873,1,0.035294119269,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[13]},{"t":142,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-88.831,38.601],[0,0]],"o":[[88.831,-38.601],[0,0]],"v":[[29.508,287.566],[160.542,367.297]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[0.668097138405,0.145098030567,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[1,0.945421040058,0.337254911661,1]},{"t":138,"s":[0.580392181873,1,0.035294119269,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[13]},{"t":142,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[13.737,-7.008],[0,0]],"o":[[-78.08,35.062],[0,0]],"v":[[237.709,221.709],[189.238,365.248]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[0.668097138405,0.145098030567,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[1,0.945421040058,0.337254911661,1]},{"t":138,"s":[0.580392181873,1,0.035294119269,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":131,"s":[13]},{"t":142,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.569],"y":[0.788]},"o":{"x":[0.183],"y":[0.095]},"t":123,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.326],"y":[0.93]},"t":131,"s":[19.154]},{"t":142,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.569],"y":[0.775]},"o":{"x":[0.183],"y":[0.102]},"t":121,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.327],"y":[0.889]},"t":131,"s":[14.964]},{"t":143,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":122,"op":144,"st":35,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"StarStr 9","sr":1,"ks":{"r":{"a":0,"k":-19},"p":{"a":0,"k":[97.622,326.968,0]},"a":{"a":0,"k":[169.919,89.494,0]},"s":{"a":1,"k":[{"i":{"x":[0.012,0.012,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.642]},"t":121,"s":[64,64,100]},{"t":143,"s":[88.5,88.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":121,"s":[{"i":[[0,0],[-6.056,-1.521],[0,0],[-2.926,-3.32],[0,0],[1.933,-6.143],[0,0],[7.732,-0.297],[0,0],[-1.127,4.932]],"o":[[0,0],[6.436,1.412],[0,0],[2.926,3.32],[0,0],[-2.183,6.451],[0,0],[-8.305,0.11],[0,0],[1.127,-4.932]],"v":[[5.416,-28.737],[28.051,-10.46],[46.536,-44.684],[41.812,-3.268],[71.935,-6.676],[38.542,10.458],[36.381,36.076],[24.43,10.825],[0.78,12.282],[20.891,1.525]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":134,"s":[{"i":[[0,0],[-17.536,-5.967],[0,0],[-8.044,-9.129],[0,0],[4.575,-18.33],[0,0],[22.872,-2.055],[0,0],[-3.098,13.56]],"o":[[0,0],[17.636,5.938],[0,0],[8.043,9.128],[0,0],[-4.64,18.409],[0,0],[-23.023,2.006],[0,0],[3.097,-13.559]],"v":[[-45.461,-56.604],[16.182,-29.731],[77.156,-96.399],[56.787,-13.757],[109.184,12.91],[44.785,30.207],[46.367,83.8],[4.742,29.853],[-43.207,40.88],[-3.03,4.759]],"c":true}]},{"t":143,"s":[{"i":[[0,0],[-21.612,-7.546],[0,0],[-9.861,-11.191],[0,0],[5.513,-22.657],[0,0],[28.248,-2.679],[0,0],[-3.797,16.623]],"o":[[0,0],[21.612,7.546],[0,0],[9.86,11.19],[0,0],[-5.513,22.655],[0,0],[-28.248,2.679],[0,0],[3.797,-16.622]],"v":[[-64.266,-70.083],[11.968,-36.573],[102.145,-138.915],[62.104,-17.481],[126.703,16.614],[47.002,37.219],[49.217,103.446],[-2.248,36.609],[-61.136,50.31],[-11.523,5.907]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[0.666666686535,0.145098045468,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[1,0.964705882353,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[0.580392181873,1,0.035294119269,1]},{"t":134,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.012],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":121,"s":[64.185]},{"t":143,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[0.666666686535,0.145098045468,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[1,0.964705882353,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[0.580392181873,1,0.035294119269,1]},{"t":134,"s":[1,1,1,1]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[100]},{"t":132,"s":[0]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[149.003,97.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 16","bm":0,"hd":false}],"ip":121,"op":143,"st":121,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"star 31","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[-20]},{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[10]},{"t":112,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.837,"y":0.605},"o":{"x":0.167,"y":0.161},"t":67,"s":[260.046,119.899,0],"to":[3.954,-20.399,0],"ti":[31.546,-2.101,0]},{"i":{"x":0.695,"y":1},"o":{"x":0.333,"y":0.253},"t":88,"s":[236.171,68.774,0],"to":[-49.046,6.101,0],"ti":[-47.546,-140.899,0]},{"t":120,"s":[107.046,327.399,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":67,"s":[50,50,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":71,"s":[160,160,100]},{"i":{"x":[0.48,0.48,0.48],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":88,"s":[200,200,100]},{"t":120,"s":[140,140,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":88,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":89,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":92,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":100,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":105,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":107,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":109,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":110,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":113,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"t":121,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.167],"y":[0.063]},"t":118,"s":[100]},{"t":121,"s":[1]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[3.526,-0.28],[0,0],[1.276,-5.963],[0,0],[-3.89,-2.244],[0,0],[-3.793,1.314],[0,0],[0,0],[0,0],[1.096,6.059],[0,0]],"o":[[-3.526,0.28],[0,0],[-1.276,5.963],[0,0],[3.89,2.243],[0,0],[3.793,-1.314],[0,0],[0,0],[0,0],[-1.096,-6.059],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.009,9.178],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[1.734,7.443],[12.317,5.701],[17.928,-3.189],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[3.381,0.053],[0,0],[0,0],[0,0],[-1.148,-3.454],[0,0],[-1.354,3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-3.381,-0.053],[0,0],[0,0],[0,0],[1.148,3.454],[0,0],[1.354,-3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-5.246,28.827],[-0.44,32.392],[4.189,28.519],[8.041,14.814],[9.284,10.122],[9.441,6.567],[9.039,-2.524],[6.438,-11.289]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[-5.292,-0.15],[0,0],[0,0],[0,0],[0.947,-1.66],[2.199,-0.028],[1.243,2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.292,0.15],[0,0],[0,0],[0,0],[-0.947,1.659],[-2.199,0.028],[-1.243,-2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[5.094,28.84],[-0.361,32.767],[-4.746,28.157],[-8.212,14.814],[-9.478,9.372],[-10.318,7.442],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[-4.537,-0.419],[0,0],[-0.757,-4.757],[0,0],[2.864,-2.269],[0,0],[3.349,1.611],[0,0],[0,0],[0,0],[-0.979,4.323],[0,0]],"o":[[4.537,0.419],[0,0],[0.757,4.757],[0,0],[-2.864,2.269],[0,0],[-3.349,-1.611],[0,0],[0,0],[0,0],[0.979,-4.323],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-1.443,7.007],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[{"i":[[-4.496,0.238],[0,0],[-1.428,-4.917],[0,0],[4.11,-2.869],[0,0],[4.288,2.546],[0,0],[0,0],[0,0],[-1.256,3.466],[0,0]],"o":[[4.496,-0.238],[0,0],[1.428,4.917],[0,0],[-4.11,2.869],[0,0],[-4.288,-2.546],[0,0],[0,0],[0,0],[1.256,-3.466],[0,0]],"v":[[0,-32.767],[10.647,-11.195],[34.454,-7.735],[17.227,9.057],[21.294,32.767],[0,21.573],[-21.294,32.767],[-18.28,15.199],[2.954,1.101],[-22.318,4.094],[-34.454,-7.735],[-10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[-2.884,-0.203],[0,0],[-1.731,-3.582],[0,0],[3.701,-2.45],[0,0],[3.447,0.351],[0,0],[0,0],[0,0],[-0.736,4.096],[0,0]],"o":[[2.884,0.203],[0,0],[1.731,3.582],[0,0],[-3.701,2.45],[0,0],[-3.447,-0.351],[0,0],[0,0],[0,0],[0.736,-4.096],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-2.186,5.266],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":88,"s":[{"i":[[-4.89,0.025],[0,0],[0,0],[0,0],[0.753,-2.683],[0,0],[0.736,2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.89,-0.025],[0,0],[0,0],[0,0],[-0.753,2.683],[0,0],[-0.736,-2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[3.92,29.841],[-0.361,32.767],[-4.385,29.626],[-8.212,14.814],[-1.353,12.685],[-9.193,8.942],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":89,"s":[{"i":[[5.068,0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-5.068,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-3.815,30.466],[-0.44,32.392],[3.055,30.554],[8.041,14.814],[2.034,12.747],[8.816,10.567],[9.039,-2.524],[5.423,-12.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[3.483,0.994],[0,0],[0.114,-2.696],[0,0],[-2.253,-2.497],[0,0],[-3.093,1.238],[0,0],[0,0],[0,0],[1.01,3.65],[0,0]],"o":[[-3.483,-0.994],[0,0],[-0.114,2.696],[0,0],[2.253,2.497],[0,0],[3.093,-1.238],[0,0],[0,0],[0,0],[-1.01,-3.65],[0,0]],"v":[[0.071,-32.434],[-7.054,-10.375],[-12.457,-2.066],[-8.663,9.513],[-6.035,30.583],[-0.349,27.065],[5.109,30.855],[9.012,12.649],[0.207,10.339],[9.899,6.778],[11.835,-3.158],[5.726,-11.667]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":92,"s":[{"i":[[3.823,1.326],[0,0],[1.607,-3.893],[0,0],[-2.185,-2.941],[0,0],[-4.208,-0.222],[0,0],[0,0],[0,0],[2.07,5.343],[0,0]],"o":[[-3.823,-1.326],[0,0],[-1.607,3.893],[0,0],[2.185,2.941],[0,0],[4.208,0.222],[0,0],[0,0],[0,0],[-2.07,-5.343],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.767,11.746],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[-0.497,4.128],[12.317,5.701],[17.427,-4.427],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[{"i":[[3.526,-0.28],[0,0],[1.276,-5.963],[0,0],[-3.89,-2.244],[0,0],[-3.793,1.314],[0,0],[0,0],[0,0],[1.096,6.059],[0,0]],"o":[[-3.526,0.28],[0,0],[-1.276,5.963],[0,0],[3.89,2.243],[0,0],[3.793,-1.314],[0,0],[0,0],[0,0],[-1.096,-6.059],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.009,9.178],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[1.734,7.443],[12.317,5.701],[17.928,-3.189],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[{"i":[[3.381,0.053],[0,0],[0,0],[0,0],[-1.148,-3.454],[0,0],[-1.354,3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-3.381,-0.053],[0,0],[0,0],[0,0],[1.148,3.454],[0,0],[1.354,-3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-5.246,28.827],[-0.44,32.392],[4.189,28.519],[8.041,14.814],[9.284,10.122],[9.441,6.567],[9.039,-2.524],[6.438,-11.289]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":100,"s":[{"i":[[-5.292,-0.15],[0,0],[0,0],[0,0],[0.947,-1.66],[2.199,-0.028],[1.243,2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.292,0.15],[0,0],[0,0],[0,0],[-0.947,1.659],[-2.199,0.028],[-1.243,-2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[5.094,28.84],[-0.361,32.767],[-4.746,28.157],[-8.212,14.814],[-9.478,9.372],[-10.318,7.442],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[-4.537,-0.419],[0,0],[-0.757,-4.757],[0,0],[2.864,-2.269],[0,0],[3.349,1.611],[0,0],[0,0],[0,0],[-0.979,4.323],[0,0]],"o":[[4.537,0.419],[0,0],[0.757,4.757],[0,0],[-2.864,2.269],[0,0],[-3.349,-1.611],[0,0],[0,0],[0,0],[0.979,-4.323],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-1.443,7.007],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":105,"s":[{"i":[[-4.496,0.238],[0,0],[-1.428,-4.917],[0,0],[4.11,-2.869],[0,0],[4.288,2.546],[0,0],[0,0],[0,0],[-1.256,3.466],[0,0]],"o":[[4.496,-0.238],[0,0],[1.428,4.917],[0,0],[-4.11,2.869],[0,0],[-4.288,-2.546],[0,0],[0,0],[0,0],[1.256,-3.466],[0,0]],"v":[[0,-32.767],[10.647,-11.195],[34.454,-7.735],[17.227,9.057],[21.294,32.767],[0,21.573],[-21.294,32.767],[-18.28,15.199],[2.954,1.101],[-22.318,4.094],[-34.454,-7.735],[-10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":107,"s":[{"i":[[-2.884,-0.203],[0,0],[-1.731,-3.582],[0,0],[3.701,-2.45],[0,0],[3.447,0.351],[0,0],[0,0],[0,0],[-0.736,4.096],[0,0]],"o":[[2.884,0.203],[0,0],[1.731,3.582],[0,0],[-3.701,2.45],[0,0],[-3.447,-0.351],[0,0],[0,0],[0,0],[0.736,-4.096],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-2.186,5.266],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":109,"s":[{"i":[[-4.89,0.025],[0,0],[0,0],[0,0],[0.753,-2.683],[0,0],[0.736,2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.89,-0.025],[0,0],[0,0],[0,0],[-0.753,2.683],[0,0],[-0.736,-2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[3.92,29.841],[-0.361,32.767],[-4.385,29.626],[-8.212,14.814],[-1.353,12.685],[-9.193,8.942],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":110,"s":[{"i":[[5.068,0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-5.068,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-3.815,30.466],[-0.44,32.392],[3.055,30.554],[8.041,14.814],[2.034,12.747],[8.816,10.567],[9.039,-2.524],[5.423,-12.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[3.483,0.994],[0,0],[0.114,-2.696],[0,0],[-2.253,-2.497],[0,0],[-3.093,1.238],[0,0],[0,0],[0,0],[1.01,3.65],[0,0]],"o":[[-3.483,-0.994],[0,0],[-0.114,2.696],[0,0],[2.253,2.497],[0,0],[3.093,-1.238],[0,0],[0,0],[0,0],[-1.01,-3.65],[0,0]],"v":[[0.071,-32.434],[-7.054,-10.375],[-12.457,-2.066],[-8.663,9.513],[-6.035,30.583],[-0.349,27.065],[5.109,30.855],[9.012,12.649],[0.207,10.339],[9.899,6.778],[11.835,-3.158],[5.726,-11.667]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":113,"s":[{"i":[[3.823,1.326],[0,0],[1.607,-3.893],[0,0],[-2.185,-2.941],[0,0],[-4.208,-0.222],[0,0],[0,0],[0,0],[2.07,5.343],[0,0]],"o":[[-3.823,-1.326],[0,0],[-1.607,3.893],[0,0],[2.185,2.941],[0,0],[4.208,0.222],[0,0],[0,0],[0,0],[-2.07,-5.343],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.767,11.746],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[-0.497,4.128],[12.317,5.701],[17.427,-4.427],[6.331,-10.861]],"c":true}]},{"t":121,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":75,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":79,"s":[0.650980353355,0.946620464325,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":83,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":87,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":92,"s":[1,0.770103812218,0.407843112946,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":97,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":106,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":111,"s":[0.938408374786,0.650980353355,1,1]},{"t":116,"s":[1,0.555570960045,0.337254911661,1]}]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":70,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":75,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":79,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":83,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":85,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":87,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":92,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":97,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":101,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":106,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":111,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":116,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":118,"s":[1,0.733333349228,0.180392161012,1]},{"t":120,"s":[1,0.555570960045,0.337254911661,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star","bm":0,"hd":false}],"ip":67,"op":120,"st":58,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Crcl10","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":97,"s":[-9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":107,"s":[-55]},{"t":122,"s":[-117]}]},"p":{"a":0,"k":[256.5,258.5,0]},"a":{"a":0,"k":[152,-2,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":97,"s":[630.333,630.333,100]},{"t":122,"s":[542.667,542.667,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[46,46]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":97,"s":[0.650980353355,0.946620464325,1,1],"h":1},{"t":101,"s":[0.733102619648,1,0.650980353355,1],"h":1},{"t":108,"s":[1,0.650980353355,0.930196046829,1],"h":1},{"t":114,"s":[1,0.770103812218,0.407843112946,1],"h":1},{"t":119,"s":[1,1,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":97,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[3.1]},{"t":122,"s":[0.5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":97,"s":[5.857]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":112,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[5]},{"t":122,"s":[2]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":97,"s":[5]},{"t":107,"s":[2]}]},"o":{"a":0,"k":-10},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[152,-2]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":97,"op":120,"st":-85,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Crcl9","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[-9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":106,"s":[-55]},{"t":121,"s":[-117]}]},"p":{"a":0,"k":[256.5,258.5,0]},"a":{"a":0,"k":[152,-2,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":96,"s":[773.333,773.333,100]},{"t":121,"s":[685.667,685.667,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[46,46]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":96,"s":[1,1,1,1],"h":1},{"t":102,"s":[1,0.770103812218,0.407843112946,1],"h":1},{"t":108,"s":[0.733102619648,1,0.650980353355,1],"h":1},{"t":114,"s":[0.650980353355,0.946620464325,1,1],"h":1},{"t":119,"s":[1,0.650980353355,0.930196046829,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":99,"s":[3.1]},{"t":121,"s":[0.5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[5.857]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":111,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":118,"s":[5]},{"t":121,"s":[2]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[5]},{"t":106,"s":[2]}]},"o":{"a":0,"k":-10},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[152,-2]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":96,"op":120,"st":-86,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"sred 12","sr":1,"ks":{"p":{"a":0,"k":[283.898,426.775,0]},"a":{"a":0,"k":[634.726,-520.066,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":127,"s":[24.42,24.42,100]},{"t":145,"s":[55.769,55.769,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[801.402,-485.529]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":129,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":138,"s":[152,152]},{"t":148,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[753.32,-695.665]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":125,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":136,"s":[152,152]},{"t":147,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[521.835,-653.776]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":122,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":134,"s":[152,152]},{"t":147,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 1","bm":0,"hd":false}],"ip":122,"op":149,"st":-113,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Splash 6","sr":1,"ks":{"r":{"a":0,"k":15.063},"p":{"a":0,"k":[288.323,419.218,0]},"a":{"a":0,"k":[188.644,383.042,0]},"s":{"a":0,"k":[76.633,76.633,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[29.127,45.13],[0,0]],"o":[[-68.168,-6.92],[0,0]],"v":[[340.325,325.3],[188.643,382.233]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[0.431372578939,0.337254901961,1,1]},{"t":137,"s":[0.415686309338,0.964705944061,1,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":130,"s":[13]},{"t":141,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.308,21.519],[0,0]],"o":[[-96.125,-55.965],[0,0]],"v":[[403.657,405.364],[190.392,397.226]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[0.431372578939,0.337254901961,1,1]},{"t":137,"s":[0.415686309338,0.964705944061,1,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":130,"s":[13]},{"t":141,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.365,8.996],[0,0]],"o":[[-60.426,34.369],[0,0]],"v":[[226.21,230.206],[180.317,365.568]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[0.431372578939,0.337254901961,1,1]},{"t":137,"s":[0.415686309338,0.964705944061,1,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":130,"s":[13]},{"t":141,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-61.909,30.679],[0,0]],"o":[[84.466,0.412],[0,0]],"v":[[25.144,309.01],[178.715,374.569]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[0.431372578939,0.337254901961,1,1]},{"t":137,"s":[0.415686309338,0.964705944061,1,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":130,"s":[13]},{"t":141,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[13.737,-7.008],[0,0]],"o":[[69.482,-112.084],[0,0]],"v":[[6.34,514.384],[160.253,408.184]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[0.431372578939,0.337254901961,1,1]},{"t":137,"s":[0.415686309338,0.964705944061,1,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":130,"s":[13]},{"t":141,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.569],"y":[0.788]},"o":{"x":[0.183],"y":[0.095]},"t":122,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.326],"y":[0.93]},"t":130,"s":[19.154]},{"t":141,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.569],"y":[0.775]},"o":{"x":[0.183],"y":[0.102]},"t":120,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.327],"y":[0.889]},"t":130,"s":[14.964]},{"t":142,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":121,"op":143,"st":34,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"StarStr 6","sr":1,"ks":{"r":{"a":0,"k":-97},"p":{"a":0,"k":[273.372,431.468,0]},"a":{"a":0,"k":[169.919,89.494,0]},"s":{"a":1,"k":[{"i":{"x":[0.012,0.012,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.154]},"t":120,"s":[73,73,100]},{"t":142,"s":[88.5,88.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":120,"s":[{"i":[[0,0],[-6.056,-1.521],[0,0],[-2.926,-3.32],[0,0],[1.933,-6.143],[0,0],[7.732,-0.297],[0,0],[-1.127,4.932]],"o":[[0,0],[6.436,1.412],[0,0],[2.926,3.32],[0,0],[-2.183,6.451],[0,0],[-8.305,0.11],[0,0],[1.127,-4.932]],"v":[[9.752,-21.929],[28.051,-10.46],[42.963,-31.296],[41.812,-3.268],[66.113,7.686],[38.542,10.458],[38.843,25.281],[24.429,10.825],[7.487,11.856],[20.891,1.525]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":133,"s":[{"i":[[0,0],[-17.536,-5.967],[0,0],[-8.044,-9.129],[0,0],[4.575,-18.33],[0,0],[22.872,-2.055],[0,0],[-3.098,13.56]],"o":[[0,0],[17.636,5.938],[0,0],[8.043,9.128],[0,0],[-4.64,18.409],[0,0],[-23.023,2.006],[0,0],[3.097,-13.559]],"v":[[-45.461,-56.604],[16.182,-29.731],[77.156,-96.399],[56.787,-13.757],[109.184,12.91],[44.785,30.207],[46.367,83.8],[4.742,29.853],[-43.207,40.88],[-3.03,4.759]],"c":true}]},{"t":142,"s":[{"i":[[0,0],[-21.612,-7.546],[0,0],[-9.861,-11.191],[0,0],[5.513,-22.657],[0,0],[28.248,-2.679],[0,0],[-3.797,16.623]],"o":[[0,0],[21.612,7.546],[0,0],[9.86,11.19],[0,0],[-5.513,22.655],[0,0],[-28.248,2.679],[0,0],[3.797,-16.622]],"v":[[-64.266,-70.083],[11.968,-36.573],[102.145,-138.915],[62.104,-17.481],[139.39,17.089],[47.002,37.219],[46.587,93.737],[-2.248,36.609],[-58.913,49.413],[-11.523,5.907]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[0.431372582912,0.337254911661,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[0.415686309338,0.964705944061,1,1]},{"t":131,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.012],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[64.185]},{"t":142,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[0.431372582912,0.337254911661,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[0.415686309338,0.964705944061,1,1]},{"t":131,"s":[1,1,1,1]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":126,"s":[100]},{"t":131,"s":[0]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[149.003,97.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 16","bm":0,"hd":false}],"ip":120,"op":142,"st":120,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"star 30","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[-10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[20]},{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[-10]},{"t":111,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.837,"y":0.672},"o":{"x":0.167,"y":0.133},"t":66,"s":[152.296,201.399,0],"to":[-23.046,-17.899,0],"ti":[17.546,-26.601,0]},{"i":{"x":0.695,"y":1},"o":{"x":0.333,"y":0.241},"t":87,"s":[80.296,203.649,0],"to":[-17.546,26.601,0],"ti":[-173.546,14.101,0]},{"t":119,"s":[275.546,421.899,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[50,50,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":70,"s":[160,160,100]},{"i":{"x":[0.48,0.48,0.48],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":87,"s":[200,200,100]},{"t":119,"s":[140,140,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":91,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":94,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":101,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":104,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":108,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":110,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":112,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":113,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":116,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"t":120,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.167],"y":[0.063]},"t":117,"s":[100]},{"t":120,"s":[1]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[3.526,-0.28],[0,0],[1.276,-5.963],[0,0],[-3.89,-2.244],[0,0],[-3.793,1.314],[0,0],[0,0],[0,0],[1.096,6.059],[0,0]],"o":[[-3.526,0.28],[0,0],[-1.276,5.963],[0,0],[3.89,2.243],[0,0],[3.793,-1.314],[0,0],[0,0],[0,0],[-1.096,-6.059],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.009,9.178],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[1.734,7.443],[12.317,5.701],[17.928,-3.189],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[3.381,0.053],[0,0],[0,0],[0,0],[-1.148,-3.454],[0,0],[-1.354,3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-3.381,-0.053],[0,0],[0,0],[0,0],[1.148,3.454],[0,0],[1.354,-3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-5.246,28.827],[-0.44,32.392],[4.189,28.519],[8.041,14.814],[9.284,10.122],[9.441,6.567],[9.039,-2.524],[6.438,-11.289]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[-5.292,-0.15],[0,0],[0,0],[0,0],[0.947,-1.66],[2.199,-0.028],[1.243,2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.292,0.15],[0,0],[0,0],[0,0],[-0.947,1.659],[-2.199,0.028],[-1.243,-2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[5.094,28.84],[-0.361,32.767],[-4.746,28.157],[-8.212,14.814],[-9.478,9.372],[-10.318,7.442],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[-4.537,-0.419],[0,0],[-0.757,-4.757],[0,0],[2.864,-2.269],[0,0],[3.349,1.611],[0,0],[0,0],[0,0],[-0.979,4.323],[0,0]],"o":[[4.537,0.419],[0,0],[0.757,4.757],[0,0],[-2.864,2.269],[0,0],[-3.349,-1.611],[0,0],[0,0],[0,0],[0.979,-4.323],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-1.443,7.007],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[-4.496,0.238],[0,0],[-1.428,-4.917],[0,0],[4.11,-2.869],[0,0],[4.288,2.546],[0,0],[0,0],[0,0],[-1.256,3.466],[0,0]],"o":[[4.496,-0.238],[0,0],[1.428,4.917],[0,0],[-4.11,2.869],[0,0],[-4.288,-2.546],[0,0],[0,0],[0,0],[1.256,-3.466],[0,0]],"v":[[0,-32.767],[10.647,-11.195],[34.454,-7.735],[17.227,9.057],[21.294,32.767],[0,21.573],[-21.294,32.767],[-18.28,15.199],[2.954,1.101],[-22.318,4.094],[-34.454,-7.735],[-10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[{"i":[[-2.884,-0.203],[0,0],[-1.731,-3.582],[0,0],[3.701,-2.45],[0,0],[3.447,0.351],[0,0],[0,0],[0,0],[-0.736,4.096],[0,0]],"o":[[2.884,0.203],[0,0],[1.731,3.582],[0,0],[-3.701,2.45],[0,0],[-3.447,-0.351],[0,0],[0,0],[0,0],[0.736,-4.096],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-2.186,5.266],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[-4.89,0.025],[0,0],[0,0],[0,0],[0.753,-2.683],[0,0],[0.736,2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.89,-0.025],[0,0],[0,0],[0,0],[-0.753,2.683],[0,0],[-0.736,-2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[3.92,29.841],[-0.361,32.767],[-4.385,29.626],[-8.212,14.814],[-1.353,12.685],[-9.193,8.942],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":91,"s":[{"i":[[5.068,0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-5.068,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-3.815,30.466],[-0.44,32.392],[3.055,30.554],[8.041,14.814],[2.034,12.747],[8.816,10.567],[9.039,-2.524],[5.423,-12.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":92,"s":[{"i":[[3.483,0.994],[0,0],[0.114,-2.696],[0,0],[-2.253,-2.497],[0,0],[-3.093,1.238],[0,0],[0,0],[0,0],[1.01,3.65],[0,0]],"o":[[-3.483,-0.994],[0,0],[-0.114,2.696],[0,0],[2.253,2.497],[0,0],[3.093,-1.238],[0,0],[0,0],[0,0],[-1.01,-3.65],[0,0]],"v":[[0.071,-32.434],[-7.054,-10.375],[-12.457,-2.066],[-8.663,9.513],[-6.035,30.583],[-0.349,27.065],[5.109,30.855],[9.012,12.649],[0.207,10.339],[9.899,6.778],[11.835,-3.158],[5.726,-11.667]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":94,"s":[{"i":[[3.823,1.326],[0,0],[1.607,-3.893],[0,0],[-2.185,-2.941],[0,0],[-4.208,-0.222],[0,0],[0,0],[0,0],[2.07,5.343],[0,0]],"o":[[-3.823,-1.326],[0,0],[-1.607,3.893],[0,0],[2.185,2.941],[0,0],[4.208,0.222],[0,0],[0,0],[0,0],[-2.07,-5.343],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.767,11.746],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[-0.497,4.128],[12.317,5.701],[17.427,-4.427],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[{"i":[[3.526,-0.28],[0,0],[1.276,-5.963],[0,0],[-3.89,-2.244],[0,0],[-3.793,1.314],[0,0],[0,0],[0,0],[1.096,6.059],[0,0]],"o":[[-3.526,0.28],[0,0],[-1.276,5.963],[0,0],[3.89,2.243],[0,0],[3.793,-1.314],[0,0],[0,0],[0,0],[-1.096,-6.059],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.009,9.178],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[1.734,7.443],[12.317,5.701],[17.928,-3.189],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":101,"s":[{"i":[[3.381,0.053],[0,0],[0,0],[0,0],[-1.148,-3.454],[0,0],[-1.354,3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-3.381,-0.053],[0,0],[0,0],[0,0],[1.148,3.454],[0,0],[1.354,-3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-5.246,28.827],[-0.44,32.392],[4.189,28.519],[8.041,14.814],[9.284,10.122],[9.441,6.567],[9.039,-2.524],[6.438,-11.289]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[-5.292,-0.15],[0,0],[0,0],[0,0],[0.947,-1.66],[2.199,-0.028],[1.243,2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.292,0.15],[0,0],[0,0],[0,0],[-0.947,1.659],[-2.199,0.028],[-1.243,-2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[5.094,28.84],[-0.361,32.767],[-4.746,28.157],[-8.212,14.814],[-9.478,9.372],[-10.318,7.442],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":104,"s":[{"i":[[-4.537,-0.419],[0,0],[-0.757,-4.757],[0,0],[2.864,-2.269],[0,0],[3.349,1.611],[0,0],[0,0],[0,0],[-0.979,4.323],[0,0]],"o":[[4.537,0.419],[0,0],[0.757,4.757],[0,0],[-2.864,2.269],[0,0],[-3.349,-1.611],[0,0],[0,0],[0,0],[0.979,-4.323],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-1.443,7.007],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":108,"s":[{"i":[[-4.496,0.238],[0,0],[-1.428,-4.917],[0,0],[4.11,-2.869],[0,0],[4.288,2.546],[0,0],[0,0],[0,0],[-1.256,3.466],[0,0]],"o":[[4.496,-0.238],[0,0],[1.428,4.917],[0,0],[-4.11,2.869],[0,0],[-4.288,-2.546],[0,0],[0,0],[0,0],[1.256,-3.466],[0,0]],"v":[[0,-32.767],[10.647,-11.195],[34.454,-7.735],[17.227,9.057],[21.294,32.767],[0,21.573],[-21.294,32.767],[-18.28,15.199],[2.954,1.101],[-22.318,4.094],[-34.454,-7.735],[-10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":110,"s":[{"i":[[-2.884,-0.203],[0,0],[-1.731,-3.582],[0,0],[3.701,-2.45],[0,0],[3.447,0.351],[0,0],[0,0],[0,0],[-0.736,4.096],[0,0]],"o":[[2.884,0.203],[0,0],[1.731,3.582],[0,0],[-3.701,2.45],[0,0],[-3.447,-0.351],[0,0],[0,0],[0,0],[0.736,-4.096],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-2.186,5.266],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":112,"s":[{"i":[[-4.89,0.025],[0,0],[0,0],[0,0],[0.753,-2.683],[0,0],[0.736,2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.89,-0.025],[0,0],[0,0],[0,0],[-0.753,2.683],[0,0],[-0.736,-2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[3.92,29.841],[-0.361,32.767],[-4.385,29.626],[-8.212,14.814],[-1.353,12.685],[-9.193,8.942],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":113,"s":[{"i":[[5.068,0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-5.068,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-3.815,30.466],[-0.44,32.392],[3.055,30.554],[8.041,14.814],[2.034,12.747],[8.816,10.567],[9.039,-2.524],[5.423,-12.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":114,"s":[{"i":[[3.483,0.994],[0,0],[0.114,-2.696],[0,0],[-2.253,-2.497],[0,0],[-3.093,1.238],[0,0],[0,0],[0,0],[1.01,3.65],[0,0]],"o":[[-3.483,-0.994],[0,0],[-0.114,2.696],[0,0],[2.253,2.497],[0,0],[3.093,-1.238],[0,0],[0,0],[0,0],[-1.01,-3.65],[0,0]],"v":[[0.071,-32.434],[-7.054,-10.375],[-12.457,-2.066],[-8.663,9.513],[-6.035,30.583],[-0.349,27.065],[5.109,30.855],[9.012,12.649],[0.207,10.339],[9.899,6.778],[11.835,-3.158],[5.726,-11.667]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":116,"s":[{"i":[[3.823,1.326],[0,0],[1.607,-3.893],[0,0],[-2.185,-2.941],[0,0],[-4.208,-0.222],[0,0],[0,0],[0,0],[2.07,5.343],[0,0]],"o":[[-3.823,-1.326],[0,0],[-1.607,3.893],[0,0],[2.185,2.941],[0,0],[4.208,0.222],[0,0],[0,0],[0,0],[-2.07,-5.343],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.767,11.746],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[-0.497,4.128],[12.317,5.701],[17.427,-4.427],[6.331,-10.861]],"c":true}]},{"t":120,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":69,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":73,"s":[0.733102619648,1,0.650980353355,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":77,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":92,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":97,"s":[0.938408374786,0.650980353355,1,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":102,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":107,"s":[0.733102619648,1,0.650980353355,1]},{"t":112,"s":[1,0.555570960045,0.337254911661,1]}]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":66,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":69,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":73,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":77,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":87,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":92,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":97,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":102,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":107,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":112,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":117,"s":[1,0.733333349228,0.180392161012,1]},{"t":119,"s":[1,0.555570960045,0.337254911661,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star","bm":0,"hd":false}],"ip":66,"op":119,"st":57,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Crcl8","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[-93]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":105,"s":[-139]},{"t":120,"s":[-201]}]},"p":{"a":0,"k":[256.5,258.5,0]},"a":{"a":0,"k":[152,-2,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":95,"s":[923.333,923.333,100]},{"t":116,"s":[853.667,853.667,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[46,46]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":95,"s":[0.733102619648,1,0.650980353355,1],"h":1},{"t":99,"s":[1,0.770103812218,0.407843112946,1],"h":1},{"t":104,"s":[0.650980353355,0.946620464325,1,1],"h":1},{"t":108,"s":[0.938408374786,0.650980353355,1,1],"h":1},{"t":112,"s":[1,1,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":98,"s":[2]},{"t":120,"s":[0.5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[5.857]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[8]},{"t":120,"s":[5]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[4]},{"t":105,"s":[5]}]},"o":{"a":0,"k":-10},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[152,-2]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":95,"op":119,"st":-87,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"Crcl7","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[-93]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":104,"s":[-139]},{"t":119,"s":[-201]}]},"p":{"a":0,"k":[256.5,258.5,0]},"a":{"a":0,"k":[152,-2,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":94,"s":[773.333,773.333,100]},{"t":116,"s":[713.667,713.667,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[46,46]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":94,"s":[1,1,1,1],"h":1},{"t":99,"s":[0.938408374786,0.650980353355,1,1],"h":1},{"t":104,"s":[1,0.770103812218,0.407843112946,1],"h":1},{"t":108,"s":[0.650980353355,0.946620464325,1,1],"h":1},{"t":112,"s":[0.733102619648,1,0.650980353355,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":97,"s":[3.1]},{"t":119,"s":[0.5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":109,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":116,"s":[5]},{"t":119,"s":[2]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[4]},{"t":102,"s":[7]}]},"o":{"a":0,"k":-10},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[152,-2]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":94,"op":119,"st":-88,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"sred 11","sr":1,"ks":{"p":{"a":0,"k":[103.898,328.775,0]},"a":{"a":0,"k":[634.726,-520.066,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":126,"s":[24.42,24.42,100]},{"t":144,"s":[55.769,55.769,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[576.715,-375.576]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":129,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":140,"s":[152,152]},{"t":148,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[566.878,-638.298]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":124,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":135,"s":[152,152]},{"t":146,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[739.351,-285.672]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":121,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":133,"s":[152,152]},{"t":146,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 1","bm":0,"hd":false}],"ip":121,"op":149,"st":-114,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Splash 7","sr":1,"ks":{"r":{"a":0,"k":15.063},"p":{"a":0,"k":[420.323,265.218,0]},"a":{"a":0,"k":[188.644,383.042,0]},"s":{"a":0,"k":[76.633,76.633,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.308,21.52],[0,0]],"o":[[-41.546,-154.438],[0,0]],"v":[[337.341,590.78],[192.669,400.667]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[0,0.823529481888,0.486274540424,1]},{"t":137,"s":[0.992202997208,1,0.337254881859,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":121,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[13]},{"t":141,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[37.975,94.393],[0,0]],"o":[[-37.975,-94.393],[0,0]],"v":[[145.825,570.506],[180.943,404.93]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[0,0.823529481888,0.486274540424,1]},{"t":137,"s":[0.992202997208,1,0.337254881859,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":121,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[13]},{"t":141,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-71.034,-13.179],[0,0]],"o":[[71.034,13.179],[0,0]],"v":[[64.794,310.81],[185.404,384.469]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[0,0.823529481888,0.486274540424,1]},{"t":137,"s":[0.992202997208,1,0.337254881859,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":121,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[13]},{"t":141,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[13.737,-7.008],[0,0]],"o":[[-45.489,43.183],[0,0]],"v":[[248.487,284.35],[190.448,379.787]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[0,0.823529481888,0.486274540424,1]},{"t":137,"s":[0.992202997208,1,0.337254881859,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":121,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[13]},{"t":141,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.569],"y":[0.788]},"o":{"x":[0.183],"y":[0.095]},"t":121,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.326],"y":[1.014]},"t":129,"s":[19.154]},{"t":141,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.569],"y":[0.775]},"o":{"x":[0.183],"y":[0.102]},"t":119,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.327],"y":[0.963]},"t":129,"s":[14.964]},{"t":142,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":120,"op":143,"st":33,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"StarStr 8","sr":1,"ks":{"r":{"a":0,"k":-171},"p":{"a":0,"k":[422.872,278.968,0]},"a":{"a":0,"k":[169.919,89.494,0]},"s":{"a":1,"k":[{"i":{"x":[0.079,0.079,0.678],"y":[1,1,1]},"o":{"x":[0.106,0.106,0.209],"y":[1.468,1.468,0.976]},"t":119,"s":[83.902,83.902,100]},{"t":141,"s":[88.5,88.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":119,"s":[{"i":[[0,0],[-6.056,-1.521],[0,0],[-2.926,-3.32],[0,0],[1.933,-6.143],[0,0],[7.732,-0.297],[0,0],[-1.127,4.932]],"o":[[0,0],[6.436,1.412],[0,0],[2.926,3.32],[0,0],[-2.183,6.451],[0,0],[-8.305,0.11],[0,0],[1.127,-4.932]],"v":[[12.747,-15.513],[28.051,-10.46],[43.509,-25.916],[41.812,-3.268],[59.754,-3.047],[38.542,10.458],[37.974,26.148],[24.43,10.825],[11.149,13.707],[20.891,1.525]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":132,"s":[{"i":[[0,0],[-17.536,-5.967],[0,0],[-8.044,-9.129],[0,0],[4.575,-18.33],[0,0],[22.872,-2.055],[0,0],[-3.098,13.56]],"o":[[0,0],[17.636,5.938],[0,0],[8.043,9.128],[0,0],[-4.64,18.409],[0,0],[-23.023,2.006],[0,0],[3.097,-13.559]],"v":[[-45.461,-56.604],[16.182,-29.731],[66.374,-72.564],[56.787,-13.757],[109.184,12.91],[44.785,30.207],[40.023,73.159],[4.742,29.853],[-43.207,40.88],[-3.03,4.759]],"c":true}]},{"t":141,"s":[{"i":[[0,0],[-21.612,-7.546],[0,0],[-9.861,-11.191],[0,0],[5.513,-22.657],[0,0],[28.248,-2.679],[0,0],[-3.797,16.623]],"o":[[0,0],[21.612,7.546],[0,0],[9.86,11.19],[0,0],[-5.513,22.655],[0,0],[-28.248,2.679],[0,0],[3.797,-16.622]],"v":[[-93.707,-93.448],[11.968,-36.573],[76.553,-98.253],[62.104,-17.481],[126.703,16.614],[47.002,37.219],[40.864,79.601],[-2.248,36.609],[-61.136,50.31],[-11.523,5.907]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":121,"s":[0,0.823529422283,0.484429001808,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[0.971072614193,1,0.180392146111,1]},{"t":130,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.012],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[64.185]},{"t":141,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":121,"s":[0,0.823529422283,0.484429001808,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[0.971072614193,1,0.180392146111,1]},{"t":130,"s":[1,1,1,1]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":125,"s":[100]},{"t":130,"s":[0]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[149.003,97.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 16","bm":0,"hd":false}],"ip":119,"op":142,"st":119,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"star 29","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[-20]},{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[10]},{"t":110,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.837,"y":0.734},"o":{"x":0.167,"y":0.108},"t":65,"s":[182.046,341.899,0],"to":[-21.046,24.601,0],"ti":[-30.454,-15.601,0]},{"i":{"x":0.695,"y":1},"o":{"x":0.333,"y":0.239},"t":86,"s":[163.046,428.899,0],"to":[30.454,15.601,0],"ti":[-23.046,177.601,0]},{"t":118,"s":[413.546,263.899,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":65,"s":[-50,50,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":69,"s":[-160,160,100]},{"i":{"x":[0.48,0.48,0.48],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":86,"s":[-200,200,100]},{"t":118,"s":[-140,140,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":89,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":93,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":98,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.48,"y":1},"o":{"x":0.167,"y":0.167},"t":101,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":106,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":109,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":112,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.48,"y":1},"o":{"x":0.167,"y":0.167},"t":114,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"t":119,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.167],"y":[0.063]},"t":116,"s":[100]},{"t":119,"s":[1]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[3.823,1.326],[0,0],[1.607,-3.893],[0,0],[-2.185,-2.941],[0,0],[-4.208,-0.222],[0,0],[0,0],[0,0],[2.07,5.343],[0,0]],"o":[[-3.823,-1.326],[0,0],[-1.607,3.893],[0,0],[2.185,2.941],[0,0],[4.208,0.222],[0,0],[0,0],[0,0],[-2.07,-5.343],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.767,11.746],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[-0.497,4.128],[12.317,5.701],[17.427,-4.427],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[3.483,0.994],[0,0],[0.114,-2.696],[0,0],[-2.253,-2.497],[0,0],[-3.093,1.238],[0,0],[0,0],[0,0],[1.01,3.65],[0,0]],"o":[[-3.483,-0.994],[0,0],[-0.114,2.696],[0,0],[2.253,2.497],[0,0],[3.093,-1.238],[0,0],[0,0],[0,0],[-1.01,-3.65],[0,0]],"v":[[0.071,-32.434],[-7.054,-10.375],[-12.457,-2.066],[-8.663,9.513],[-6.035,30.583],[-0.349,27.065],[5.109,30.855],[9.012,12.649],[0.207,10.339],[9.899,6.778],[11.835,-3.158],[5.726,-11.667]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[5.068,0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-5.068,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-3.815,30.466],[-0.44,32.392],[3.055,30.554],[8.041,14.814],[2.034,12.747],[8.816,10.567],[9.039,-2.524],[5.423,-12.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[-4.89,0.025],[0,0],[0,0],[0,0],[0.753,-2.683],[0,0],[0.736,2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.89,-0.025],[0,0],[0,0],[0,0],[-0.753,2.683],[0,0],[-0.736,-2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[3.92,29.841],[-0.361,32.767],[-4.385,29.626],[-8.212,14.814],[-1.353,12.685],[-9.193,8.942],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[-2.884,-0.203],[0,0],[-1.731,-3.582],[0,0],[3.701,-2.45],[0,0],[3.447,0.351],[0,0],[0,0],[0,0],[-0.736,4.096],[0,0]],"o":[[2.884,0.203],[0,0],[1.731,3.582],[0,0],[-3.701,2.45],[0,0],[-3.447,-0.351],[0,0],[0,0],[0,0],[0.736,-4.096],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-2.186,5.266],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[{"i":[[-4.496,0.238],[0,0],[-1.428,-4.917],[0,0],[4.11,-2.869],[0,0],[4.288,2.546],[0,0],[0,0],[0,0],[-1.256,3.466],[0,0]],"o":[[4.496,-0.238],[0,0],[1.428,4.917],[0,0],[-4.11,2.869],[0,0],[-4.288,-2.546],[0,0],[0,0],[0,0],[1.256,-3.466],[0,0]],"v":[[0,-32.767],[10.647,-11.195],[34.454,-7.735],[17.227,9.057],[21.294,32.767],[0,21.573],[-21.294,32.767],[-18.28,15.199],[2.954,1.101],[-22.318,4.094],[-34.454,-7.735],[-10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[-4.537,-0.419],[0,0],[-0.757,-4.757],[0,0],[2.864,-2.269],[0,0],[3.349,1.611],[0,0],[0,0],[0,0],[-0.979,4.323],[0,0]],"o":[[4.537,0.419],[0,0],[0.757,4.757],[0,0],[-2.864,2.269],[0,0],[-3.349,-1.611],[0,0],[0,0],[0,0],[0.979,-4.323],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-1.443,7.007],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[{"i":[[-5.292,-0.15],[0,0],[0,0],[0,0],[0.947,-1.66],[2.199,-0.028],[1.243,2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.292,0.15],[0,0],[0,0],[0,0],[-0.947,1.659],[-2.199,0.028],[-1.243,-2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[5.094,28.84],[-0.361,32.767],[-4.746,28.157],[-8.212,14.814],[-9.478,9.372],[-10.318,7.442],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[{"i":[[3.381,0.053],[0,0],[0,0],[0,0],[-1.148,-3.454],[0,0],[-1.354,3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-3.381,-0.053],[0,0],[0,0],[0,0],[1.148,3.454],[0,0],[1.354,-3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-5.246,28.827],[-0.44,32.392],[4.189,28.519],[8.041,14.814],[9.284,10.122],[9.441,6.567],[9.039,-2.524],[6.438,-11.289]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":89,"s":[{"i":[[3.526,-0.28],[0,0],[1.276,-5.963],[0,0],[-3.89,-2.244],[0,0],[-3.793,1.314],[0,0],[0,0],[0,0],[1.096,6.059],[0,0]],"o":[[-3.526,0.28],[0,0],[-1.276,5.963],[0,0],[3.89,2.243],[0,0],[3.793,-1.314],[0,0],[0,0],[0,0],[-1.096,-6.059],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.009,9.178],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[1.734,7.443],[12.317,5.701],[17.928,-3.189],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":93,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[{"i":[[3.823,1.326],[0,0],[1.607,-3.893],[0,0],[-2.185,-2.941],[0,0],[-4.208,-0.222],[0,0],[0,0],[0,0],[2.07,5.343],[0,0]],"o":[[-3.823,-1.326],[0,0],[-1.607,3.893],[0,0],[2.185,2.941],[0,0],[4.208,0.222],[0,0],[0,0],[0,0],[-2.07,-5.343],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.767,11.746],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[-0.497,4.128],[12.317,5.701],[17.427,-4.427],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":96,"s":[{"i":[[3.483,0.994],[0,0],[0.114,-2.696],[0,0],[-2.253,-2.497],[0,0],[-3.093,1.238],[0,0],[0,0],[0,0],[1.01,3.65],[0,0]],"o":[[-3.483,-0.994],[0,0],[-0.114,2.696],[0,0],[2.253,2.497],[0,0],[3.093,-1.238],[0,0],[0,0],[0,0],[-1.01,-3.65],[0,0]],"v":[[0.071,-32.434],[-7.054,-10.375],[-12.457,-2.066],[-8.663,9.513],[-6.035,30.583],[-0.349,27.065],[5.109,30.855],[9.012,12.649],[0.207,10.339],[9.899,6.778],[11.835,-3.158],[5.726,-11.667]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[{"i":[[5.068,0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-5.068,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-3.815,30.466],[-0.44,32.392],[3.055,30.554],[8.041,14.814],[2.034,12.747],[8.816,10.567],[9.039,-2.524],[5.423,-12.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":98,"s":[{"i":[[-4.89,0.025],[0,0],[0,0],[0,0],[0.753,-2.683],[0,0],[0.736,2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.89,-0.025],[0,0],[0,0],[0,0],[-0.753,2.683],[0,0],[-0.736,-2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[3.92,29.841],[-0.361,32.767],[-4.385,29.626],[-8.212,14.814],[-1.353,12.685],[-9.193,8.942],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.48,"y":1},"o":{"x":0.167,"y":0.167},"t":101,"s":[{"i":[[-2.884,-0.203],[0,0],[-1.731,-3.582],[0,0],[3.701,-2.45],[0,0],[3.447,0.351],[0,0],[0,0],[0,0],[-0.736,4.096],[0,0]],"o":[[2.884,0.203],[0,0],[1.731,3.582],[0,0],[-3.701,2.45],[0,0],[-3.447,-0.351],[0,0],[0,0],[0,0],[0.736,-4.096],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-2.186,5.266],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":106,"s":[{"i":[[-4.496,0.238],[0,0],[-1.428,-4.917],[0,0],[4.11,-2.869],[0,0],[4.288,2.546],[0,0],[0,0],[0,0],[-1.256,3.466],[0,0]],"o":[[4.496,-0.238],[0,0],[1.428,4.917],[0,0],[-4.11,2.869],[0,0],[-4.288,-2.546],[0,0],[0,0],[0,0],[1.256,-3.466],[0,0]],"v":[[0,-32.767],[10.647,-11.195],[34.454,-7.735],[17.227,9.057],[21.294,32.767],[0,21.573],[-21.294,32.767],[-18.28,15.199],[2.954,1.101],[-22.318,4.094],[-34.454,-7.735],[-10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":109,"s":[{"i":[[-4.537,-0.419],[0,0],[-0.757,-4.757],[0,0],[2.864,-2.269],[0,0],[3.349,1.611],[0,0],[0,0],[0,0],[-0.979,4.323],[0,0]],"o":[[4.537,0.419],[0,0],[0.757,4.757],[0,0],[-2.864,2.269],[0,0],[-3.349,-1.611],[0,0],[0,0],[0,0],[0.979,-4.323],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-1.443,7.007],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[-5.292,-0.15],[0,0],[0,0],[0,0],[0.947,-1.66],[2.199,-0.028],[1.243,2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.292,0.15],[0,0],[0,0],[0,0],[-0.947,1.659],[-2.199,0.028],[-1.243,-2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[5.094,28.84],[-0.361,32.767],[-4.746,28.157],[-8.212,14.814],[-9.478,9.372],[-10.318,7.442],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":112,"s":[{"i":[[3.381,0.053],[0,0],[0,0],[0,0],[-1.148,-3.454],[0,0],[-1.354,3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-3.381,-0.053],[0,0],[0,0],[0,0],[1.148,3.454],[0,0],[1.354,-3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-5.246,28.827],[-0.44,32.392],[4.189,28.519],[8.041,14.814],[9.284,10.122],[9.441,6.567],[9.039,-2.524],[6.438,-11.289]],"c":true}]},{"i":{"x":0.48,"y":1},"o":{"x":0.167,"y":0.167},"t":114,"s":[{"i":[[3.526,-0.28],[0,0],[1.276,-5.963],[0,0],[-3.89,-2.244],[0,0],[-3.793,1.314],[0,0],[0,0],[0,0],[1.096,6.059],[0,0]],"o":[[-3.526,0.28],[0,0],[-1.276,5.963],[0,0],[3.89,2.243],[0,0],[3.793,-1.314],[0,0],[0,0],[0,0],[-1.096,-6.059],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.009,9.178],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[1.734,7.443],[12.317,5.701],[17.928,-3.189],[6.331,-10.861]],"c":true}]},{"t":119,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":71,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":75,"s":[1,0.810657441616,0.403921544552,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":79,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":85,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":90,"s":[0.938408374786,0.650980353355,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":94,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":106,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":110,"s":[1,0.8948097229,0.403921544552,1]},{"t":114,"s":[1,0.555570960045,0.337254911661,1]}]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":65,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":71,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":75,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":79,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":82,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":85,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":90,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":94,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":100,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":106,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":110,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":114,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":116,"s":[1,0.733333349228,0.180392161012,1]},{"t":118,"s":[1,0.555570960045,0.337254911661,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star","bm":0,"hd":false}],"ip":65,"op":118,"st":56,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Crcl6","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[-144]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":103,"s":[-190]},{"t":118,"s":[-252]}]},"p":{"a":0,"k":[256.5,258.5,0]},"a":{"a":0,"k":[152,-2,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":93,"s":[630.333,630.333,100]},{"t":118,"s":[542.667,542.667,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[46,46]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":93,"s":[0.650980353355,0.946620464325,1,1],"h":1},{"t":97,"s":[0.733102619648,1,0.650980353355,1],"h":1},{"t":104,"s":[1,0.650980353355,0.930196046829,1],"h":1},{"t":110,"s":[1,0.770103812218,0.407843112946,1],"h":1},{"t":115,"s":[1,1,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[3.1]},{"t":118,"s":[0.5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[5.857]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":108,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":115,"s":[5]},{"t":118,"s":[2]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[5]},{"t":103,"s":[2]}]},"o":{"a":0,"k":-10},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[152,-2]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":93,"op":118,"st":-89,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"Crcl5","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[-144]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":102,"s":[-190]},{"t":117,"s":[-252]}]},"p":{"a":0,"k":[256.5,258.5,0]},"a":{"a":0,"k":[152,-2,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":92,"s":[773.333,773.333,100]},{"t":117,"s":[685.667,685.667,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[46,46]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":92,"s":[1,1,1,1],"h":1},{"t":98,"s":[1,0.770103812218,0.407843112946,1],"h":1},{"t":104,"s":[0.733102619648,1,0.650980353355,1],"h":1},{"t":110,"s":[0.650980353355,0.946620464325,1,1],"h":1},{"t":115,"s":[1,0.650980353355,0.930196046829,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":95,"s":[3.1]},{"t":117,"s":[0.5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[5.857]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":107,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":114,"s":[5]},{"t":117,"s":[2]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[5]},{"t":102,"s":[2]}]},"o":{"a":0,"k":-10},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[152,-2]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":92,"op":117,"st":-90,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"sred 10","sr":1,"ks":{"p":{"a":0,"k":[332.898,110.775,0]},"a":{"a":0,"k":[634.726,-520.066,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":125,"s":[24.42,24.42,100]},{"t":143,"s":[55.769,55.769,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[836.948,-629.662]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":128,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":139,"s":[152,152]},{"t":149,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[566.878,-638.298]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":123,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":134,"s":[152,152]},{"t":145,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[876.233,-427.322]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":120,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":132,"s":[152,152]},{"t":145,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 1","bm":0,"hd":false}],"ip":120,"op":149,"st":-115,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"Splash","sr":1,"ks":{"r":{"a":0,"k":15.063},"p":{"a":0,"k":[340.323,107.218,0]},"a":{"a":0,"k":[188.644,383.042,0]},"s":{"a":0,"k":[76.633,76.633,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[16.315,7.996],[0,0]],"o":[[45.464,-104.394],[0,0]],"v":[[25.992,545.707],[159.03,407.771]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[0.29411765933,0.627451002598,1,1]},{"t":135,"s":[1,0.415686309338,0.993125855923,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[13]},{"t":139,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.308,21.519],[0,0]],"o":[[-71.937,-101.664],[0,0]],"v":[[394.248,480.87],[195.771,397.13]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[0.29411765933,0.627451002598,1,1]},{"t":135,"s":[1,0.415686309338,0.993125855923,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[13]},{"t":139,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.389,48.834],[0,0]],"o":[[-1.389,-48.834],[0,0]],"v":[[157.365,507.941],[183.898,410.891]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[0.29411765933,0.627451002598,1,1]},{"t":135,"s":[1,0.415686309338,0.993125855923,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[13]},{"t":139,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.365,8.996],[0,0]],"o":[[-110.655,-4.14],[0,0]],"v":[[377.579,313.117],[207.843,382.484]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[0.29411765933,0.627451002598,1,1]},{"t":135,"s":[1,0.415686309338,0.993125855923,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[13]},{"t":139,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-61.909,30.679],[0,0]],"o":[[84.466,0.412],[0,0]],"v":[[16.322,328.952],[157.875,377.474]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[0.29411765933,0.627451002598,1,1]},{"t":135,"s":[1,0.415686309338,0.993125855923,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[13]},{"t":139,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[68.363,-38.528],[0,0]],"o":[[-68.363,38.528],[0,0]],"v":[[259.492,244.901],[190.448,379.787]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[0.29411765933,0.627451002598,1,1]},{"t":135,"s":[1,0.415686309338,0.993125855923,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":128,"s":[13]},{"t":139,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.569],"y":[0.788]},"o":{"x":[0.183],"y":[0.095]},"t":120,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.326],"y":[0.93]},"t":128,"s":[19.154]},{"t":139,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.569],"y":[0.775]},"o":{"x":[0.183],"y":[0.102]},"t":118,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.327],"y":[0.889]},"t":128,"s":[14.964]},{"t":140,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":119,"op":141,"st":32,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"StarStr","sr":1,"ks":{"r":{"a":0,"k":-170},"p":{"a":0,"k":[339.372,113.968,0]},"a":{"a":0,"k":[169.919,89.494,0]},"s":{"a":1,"k":[{"i":{"x":[0.012,0.012,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,1.548]},"t":118,"s":[80,80,100]},{"t":140,"s":[88.5,88.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":118,"s":[{"i":[[0,0],[-6.056,-1.521],[0,0],[-2.926,-3.32],[0,0],[1.933,-6.143],[0,0],[7.732,-0.297],[0,0],[-1.127,4.932]],"o":[[0,0],[6.436,1.412],[0,0],[2.926,3.32],[0,0],[-2.183,6.451],[0,0],[-8.305,0.11],[0,0],[1.127,-4.932]],"v":[[7.506,-18.638],[28.051,-10.46],[52.074,-36.765],[41.812,-3.268],[59.838,2.476],[38.542,10.458],[38.341,28.463],[24.429,10.825],[7.291,14.318],[20.891,1.525]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":131,"s":[{"i":[[0,0],[-17.536,-5.967],[0,0],[-8.044,-9.129],[0,0],[4.575,-18.33],[0,0],[22.872,-2.055],[0,0],[-3.098,13.56]],"o":[[0,0],[17.636,5.938],[0,0],[8.043,9.128],[0,0],[-4.64,18.409],[0,0],[-23.023,2.006],[0,0],[3.097,-13.559]],"v":[[-45.461,-56.604],[16.182,-29.731],[77.156,-96.399],[56.787,-13.757],[109.184,12.91],[44.785,30.207],[46.367,83.8],[4.742,29.853],[-43.207,40.88],[-3.03,4.759]],"c":true}]},{"t":140,"s":[{"i":[[0,0],[-21.612,-7.546],[0,0],[-9.861,-11.191],[0,0],[5.513,-22.657],[0,0],[28.248,-2.679],[0,0],[-3.797,16.623]],"o":[[0,0],[21.612,7.546],[0,0],[9.86,11.19],[0,0],[-5.513,22.655],[0,0],[-28.248,2.679],[0,0],[3.797,-16.622]],"v":[[-64.266,-70.083],[11.968,-36.573],[102.145,-138.915],[62.104,-17.481],[126.703,16.614],[47.002,37.219],[49.217,103.446],[-2.248,36.609],[-61.136,50.31],[-11.523,5.907]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[0.294117629528,0.626297533512,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[1,0.415686309338,0.993125855923,1]},{"t":129,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.012],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":118,"s":[64.185]},{"t":140,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[0.294117629528,0.626297533512,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[1,0.415686309338,0.993125855923,1]},{"t":129,"s":[1,1,1,1]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":124,"s":[100]},{"t":129,"s":[0]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[149.003,97.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 16","bm":0,"hd":false}],"ip":118,"op":140,"st":118,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"star 28","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[-10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[20]},{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[-10]},{"t":109,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.837,"y":0.725},"o":{"x":0.167,"y":0.112},"t":64,"s":[325.046,349.899,0],"to":[16.454,51.101,0],"ti":[-25.954,25.899,0]},{"i":{"x":0.695,"y":1},"o":{"x":0.333,"y":0.242},"t":85,"s":[393.046,380.899,0],"to":[25.954,-25.899,0],"ti":[171.454,56.101,0]},{"t":117,"s":[336.546,103.899,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[50,50,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":68,"s":[160,160,100]},{"i":{"x":[0.48,0.48,0.48],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":85,"s":[200,200,100]},{"t":117,"s":[140,140,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":67,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":88,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":89,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":92,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":100,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":106,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":108,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":110,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":114,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"t":118,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.167],"y":[0.063]},"t":115,"s":[100]},{"t":118,"s":[1]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":67,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69,"s":[{"i":[[3.526,-0.28],[0,0],[1.276,-5.963],[0,0],[-3.89,-2.244],[0,0],[-3.793,1.314],[0,0],[0,0],[0,0],[1.096,6.059],[0,0]],"o":[[-3.526,0.28],[0,0],[-1.276,5.963],[0,0],[3.89,2.243],[0,0],[3.793,-1.314],[0,0],[0,0],[0,0],[-1.096,-6.059],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.009,9.178],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[1.734,7.443],[12.317,5.701],[17.928,-3.189],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[3.381,0.053],[0,0],[0,0],[0,0],[-1.148,-3.454],[0,0],[-1.354,3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-3.381,-0.053],[0,0],[0,0],[0,0],[1.148,3.454],[0,0],[1.354,-3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-5.246,28.827],[-0.44,32.392],[4.189,28.519],[8.041,14.814],[9.284,10.122],[9.441,6.567],[9.039,-2.524],[6.438,-11.289]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-5.292,-0.15],[0,0],[0,0],[0,0],[0.947,-1.66],[2.199,-0.028],[1.243,2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.292,0.15],[0,0],[0,0],[0,0],[-0.947,1.659],[-2.199,0.028],[-1.243,-2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[5.094,28.84],[-0.361,32.767],[-4.746,28.157],[-8.212,14.814],[-9.478,9.372],[-10.318,7.442],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[-4.537,-0.419],[0,0],[-0.757,-4.757],[0,0],[2.864,-2.269],[0,0],[3.349,1.611],[0,0],[0,0],[0,0],[-0.979,4.323],[0,0]],"o":[[4.537,0.419],[0,0],[0.757,4.757],[0,0],[-2.864,2.269],[0,0],[-3.349,-1.611],[0,0],[0,0],[0,0],[0.979,-4.323],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-1.443,7.007],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[{"i":[[-4.496,0.238],[0,0],[-1.428,-4.917],[0,0],[4.11,-2.869],[0,0],[4.288,2.546],[0,0],[0,0],[0,0],[-1.256,3.466],[0,0]],"o":[[4.496,-0.238],[0,0],[1.428,4.917],[0,0],[-4.11,2.869],[0,0],[-4.288,-2.546],[0,0],[0,0],[0,0],[1.256,-3.466],[0,0]],"v":[[0,-32.767],[10.647,-11.195],[34.454,-7.735],[17.227,9.057],[21.294,32.767],[0,21.573],[-21.294,32.767],[-18.28,15.199],[2.954,1.101],[-22.318,4.094],[-34.454,-7.735],[-10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[-2.884,-0.203],[0,0],[-1.731,-3.582],[0,0],[3.701,-2.45],[0,0],[3.447,0.351],[0,0],[0,0],[0,0],[-0.736,4.096],[0,0]],"o":[[2.884,0.203],[0,0],[1.731,3.582],[0,0],[-3.701,2.45],[0,0],[-3.447,-0.351],[0,0],[0,0],[0,0],[0.736,-4.096],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-2.186,5.266],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":88,"s":[{"i":[[-4.89,0.025],[0,0],[0,0],[0,0],[0.753,-2.683],[0,0],[0.736,2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.89,-0.025],[0,0],[0,0],[0,0],[-0.753,2.683],[0,0],[-0.736,-2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[3.92,29.841],[-0.361,32.767],[-4.385,29.626],[-8.212,14.814],[-1.353,12.685],[-9.193,8.942],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":89,"s":[{"i":[[5.068,0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-5.068,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-3.815,30.466],[-0.44,32.392],[3.055,30.554],[8.041,14.814],[2.034,12.747],[8.816,10.567],[9.039,-2.524],[5.423,-12.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[3.483,0.994],[0,0],[0.114,-2.696],[0,0],[-2.253,-2.497],[0,0],[-3.093,1.238],[0,0],[0,0],[0,0],[1.01,3.65],[0,0]],"o":[[-3.483,-0.994],[0,0],[-0.114,2.696],[0,0],[2.253,2.497],[0,0],[3.093,-1.238],[0,0],[0,0],[0,0],[-1.01,-3.65],[0,0]],"v":[[0.071,-32.434],[-7.054,-10.375],[-12.457,-2.066],[-8.663,9.513],[-6.035,30.583],[-0.349,27.065],[5.109,30.855],[9.012,12.649],[0.207,10.339],[9.899,6.778],[11.835,-3.158],[5.726,-11.667]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":92,"s":[{"i":[[3.823,1.326],[0,0],[1.607,-3.893],[0,0],[-2.185,-2.941],[0,0],[-4.208,-0.222],[0,0],[0,0],[0,0],[2.07,5.343],[0,0]],"o":[[-3.823,-1.326],[0,0],[-1.607,3.893],[0,0],[2.185,2.941],[0,0],[4.208,0.222],[0,0],[0,0],[0,0],[-2.07,-5.343],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.767,11.746],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[-0.497,4.128],[12.317,5.701],[17.427,-4.427],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":95,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[{"i":[[3.526,-0.28],[0,0],[1.276,-5.963],[0,0],[-3.89,-2.244],[0,0],[-3.793,1.314],[0,0],[0,0],[0,0],[1.096,6.059],[0,0]],"o":[[-3.526,0.28],[0,0],[-1.276,5.963],[0,0],[3.89,2.243],[0,0],[3.793,-1.314],[0,0],[0,0],[0,0],[-1.096,-6.059],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.009,9.178],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[1.734,7.443],[12.317,5.701],[17.928,-3.189],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99,"s":[{"i":[[3.381,0.053],[0,0],[0,0],[0,0],[-1.148,-3.454],[0,0],[-1.354,3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-3.381,-0.053],[0,0],[0,0],[0,0],[1.148,3.454],[0,0],[1.354,-3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-5.246,28.827],[-0.44,32.392],[4.189,28.519],[8.041,14.814],[9.284,10.122],[9.441,6.567],[9.039,-2.524],[6.438,-11.289]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":100,"s":[{"i":[[-5.292,-0.15],[0,0],[0,0],[0,0],[0.947,-1.66],[2.199,-0.028],[1.243,2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.292,0.15],[0,0],[0,0],[0,0],[-0.947,1.659],[-2.199,0.028],[-1.243,-2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[5.094,28.84],[-0.361,32.767],[-4.746,28.157],[-8.212,14.814],[-9.478,9.372],[-10.318,7.442],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[-4.537,-0.419],[0,0],[-0.757,-4.757],[0,0],[2.864,-2.269],[0,0],[3.349,1.611],[0,0],[0,0],[0,0],[-0.979,4.323],[0,0]],"o":[[4.537,0.419],[0,0],[0.757,4.757],[0,0],[-2.864,2.269],[0,0],[-3.349,-1.611],[0,0],[0,0],[0,0],[0.979,-4.323],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-1.443,7.007],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":106,"s":[{"i":[[-4.496,0.238],[0,0],[-1.428,-4.917],[0,0],[4.11,-2.869],[0,0],[4.288,2.546],[0,0],[0,0],[0,0],[-1.256,3.466],[0,0]],"o":[[4.496,-0.238],[0,0],[1.428,4.917],[0,0],[-4.11,2.869],[0,0],[-4.288,-2.546],[0,0],[0,0],[0,0],[1.256,-3.466],[0,0]],"v":[[0,-32.767],[10.647,-11.195],[34.454,-7.735],[17.227,9.057],[21.294,32.767],[0,21.573],[-21.294,32.767],[-18.28,15.199],[2.954,1.101],[-22.318,4.094],[-34.454,-7.735],[-10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":108,"s":[{"i":[[-2.884,-0.203],[0,0],[-1.731,-3.582],[0,0],[3.701,-2.45],[0,0],[3.447,0.351],[0,0],[0,0],[0,0],[-0.736,4.096],[0,0]],"o":[[2.884,0.203],[0,0],[1.731,3.582],[0,0],[-3.701,2.45],[0,0],[-3.447,-0.351],[0,0],[0,0],[0,0],[0.736,-4.096],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-2.186,5.266],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":110,"s":[{"i":[[-4.89,0.025],[0,0],[0,0],[0,0],[0.753,-2.683],[0,0],[0.736,2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.89,-0.025],[0,0],[0,0],[0,0],[-0.753,2.683],[0,0],[-0.736,-2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[3.92,29.841],[-0.361,32.767],[-4.385,29.626],[-8.212,14.814],[-1.353,12.685],[-9.193,8.942],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[5.068,0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-5.068,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-3.815,30.466],[-0.44,32.392],[3.055,30.554],[8.041,14.814],[2.034,12.747],[8.816,10.567],[9.039,-2.524],[5.423,-12.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":112,"s":[{"i":[[3.483,0.994],[0,0],[0.114,-2.696],[0,0],[-2.253,-2.497],[0,0],[-3.093,1.238],[0,0],[0,0],[0,0],[1.01,3.65],[0,0]],"o":[[-3.483,-0.994],[0,0],[-0.114,2.696],[0,0],[2.253,2.497],[0,0],[3.093,-1.238],[0,0],[0,0],[0,0],[-1.01,-3.65],[0,0]],"v":[[0.071,-32.434],[-7.054,-10.375],[-12.457,-2.066],[-8.663,9.513],[-6.035,30.583],[-0.349,27.065],[5.109,30.855],[9.012,12.649],[0.207,10.339],[9.899,6.778],[11.835,-3.158],[5.726,-11.667]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":114,"s":[{"i":[[3.823,1.326],[0,0],[1.607,-3.893],[0,0],[-2.185,-2.941],[0,0],[-4.208,-0.222],[0,0],[0,0],[0,0],[2.07,5.343],[0,0]],"o":[[-3.823,-1.326],[0,0],[-1.607,3.893],[0,0],[2.185,2.941],[0,0],[4.208,0.222],[0,0],[0,0],[0,0],[-2.07,-5.343],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.767,11.746],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[-0.497,4.128],[12.317,5.701],[17.427,-4.427],[6.331,-10.861]],"c":true}]},{"t":118,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":67,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":71,"s":[0.733102619648,1,0.650980353355,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":75,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":94,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":99,"s":[0.938408374786,0.650980353355,1,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":103,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":108,"s":[1,0.770103812218,0.407843112946,1]},{"t":113,"s":[1,0.555570960045,0.337254911661,1]}]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":64,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":67,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":71,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":75,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":79,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":94,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":99,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":103,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":108,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":113,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":115,"s":[1,0.733333349228,0.180392161012,1]},{"t":117,"s":[1,0.555570960045,0.337254911661,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star","bm":0,"hd":false}],"ip":64,"op":117,"st":55,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"Crcl4","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[-228]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":101,"s":[-274]},{"t":116,"s":[-336]}]},"p":{"a":0,"k":[256.5,258.5,0]},"a":{"a":0,"k":[152,-2,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":91,"s":[923.333,923.333,100]},{"t":112,"s":[853.667,853.667,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[46,46]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":91,"s":[0.733102619648,1,0.650980353355,1],"h":1},{"t":95,"s":[1,0.770103812218,0.407843112946,1],"h":1},{"t":102,"s":[0.650980353355,0.946620464325,1,1],"h":1},{"t":108,"s":[0.938408374786,0.650980353355,1,1],"h":1},{"t":112,"s":[1,1,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":94,"s":[2]},{"t":116,"s":[0.5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[5.857]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":106,"s":[8]},{"t":116,"s":[5]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[4]},{"t":101,"s":[5]}]},"o":{"a":0,"k":-10},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[152,-2]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":91,"op":115,"st":-91,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"Crcl3","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[-228]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[-274]},{"t":115,"s":[-336]}]},"p":{"a":0,"k":[256.5,258.5,0]},"a":{"a":0,"k":[152,-2,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[773.333,773.333,100]},{"t":112,"s":[713.667,713.667,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[46,46]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":90,"s":[1,1,1,1],"h":1},{"t":95,"s":[0.938408374786,0.650980353355,1,1],"h":1},{"t":102,"s":[1,0.770103812218,0.407843112946,1],"h":1},{"t":108,"s":[0.650980353355,0.946620464325,1,1],"h":1},{"t":112,"s":[0.733102619648,1,0.650980353355,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[3.1]},{"t":115,"s":[0.5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":98,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":105,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":112,"s":[5]},{"t":115,"s":[2]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[4]},{"t":98,"s":[7]}]},"o":{"a":0,"k":-10},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[152,-2]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":90,"op":115,"st":-92,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"sred 9","sr":1,"ks":{"p":{"a":0,"k":[147.898,136.775,0]},"a":{"a":0,"k":[634.726,-520.066,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":124,"s":[24.42,24.42,100]},{"t":142,"s":[55.769,55.769,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[818.506,-559.993]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":127,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":138,"s":[152,152]},{"t":149,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[464.619,-458.722]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":122,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":133,"s":[152,152]},{"t":144,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-6.935,-6.935],[0,-34.195],[6.935,-6.935],[32.194,0],[6.935,6.935],[0,34.195],[-6.935,6.935],[-32.194,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[484.295,-735.969]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":119,"s":[0,0]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":131,"s":[152,152]},{"t":144,"s":[0,0]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star 1","bm":0,"hd":false}],"ip":119,"op":149,"st":-116,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"Splash 9","sr":1,"ks":{"r":{"a":0,"k":15.063},"p":{"a":0,"k":[161.323,133.218,0]},"a":{"a":0,"k":[188.644,383.042,0]},"s":{"a":0,"k":[76.633,76.633,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-11.265,102.239],[0,0]],"o":[[11.265,-102.239],[0,0]],"v":[[54.959,534.15],[152.931,396.252]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[1,0.337254901961,0.556862745098,1]},{"t":134,"s":[1,0.945421040058,0.337254911661,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[13]},{"t":138,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.365,8.995],[0,0]],"o":[[-69.564,63.18],[0,0]],"v":[[258.415,216.808],[171.497,367.942]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[1,0.337254901961,0.556862745098,1]},{"t":134,"s":[1,0.945421040058,0.337254911661,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[13]},{"t":138,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-57.379,45.001],[0,0]],"o":[[57.379,-45.001],[0,0]],"v":[[13.749,379.645],[155.598,374.033]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[1,0.337254901961,0.556862745098,1]},{"t":134,"s":[1,0.945421040058,0.337254911661,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[13]},{"t":138,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[87.215,-28.737],[0,0]],"o":[[-87.215,28.737],[0,0]],"v":[[328.89,266.765],[190.448,379.787]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[1,0.337254901961,0.556862745098,1]},{"t":134,"s":[1,0.945421040058,0.337254911661,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":127,"s":[13]},{"t":138,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.569],"y":[0.788]},"o":{"x":[0.183],"y":[0.095]},"t":119,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.326],"y":[0.93]},"t":127,"s":[19.154]},{"t":138,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.569],"y":[0.775]},"o":{"x":[0.183],"y":[0.102]},"t":117,"s":[80]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.327],"y":[0.889]},"t":127,"s":[14.964]},{"t":139,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":118,"op":140,"st":31,"bm":0},{"ddd":0,"ind":27,"ty":4,"nm":"StarStr 10","sr":1,"ks":{"r":{"a":0,"k":-172},"p":{"a":0,"k":[154.372,140.468,0]},"a":{"a":0,"k":[169.919,89.494,0]},"s":{"a":1,"k":[{"i":{"x":[0.012,0.012,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.642]},"t":117,"s":[64,64,100]},{"t":139,"s":[88.5,88.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":117,"s":[{"i":[[0,0],[-6.056,-1.521],[0,0],[-2.926,-3.32],[0,0],[1.933,-6.143],[0,0],[7.732,-0.297],[0,0],[-1.127,4.932]],"o":[[0,0],[6.436,1.412],[0,0],[2.926,3.32],[0,0],[-2.183,6.451],[0,0],[-8.305,0.11],[0,0],[1.127,-4.932]],"v":[[2.924,-34.831],[28.051,-10.46],[58.861,-41.55],[41.812,-3.268],[74.355,6.359],[38.542,10.458],[41.614,42.162],[24.429,10.825],[-4.077,17.837],[20.891,1.525]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":130,"s":[{"i":[[0,0],[-17.536,-5.967],[0,0],[-8.044,-9.129],[0,0],[4.575,-18.33],[0,0],[22.872,-2.055],[0,0],[-3.098,13.56]],"o":[[0,0],[17.636,5.938],[0,0],[8.043,9.128],[0,0],[-4.64,18.409],[0,0],[-23.023,2.006],[0,0],[3.097,-13.559]],"v":[[-45.461,-56.604],[16.182,-29.731],[77.156,-96.399],[56.787,-13.757],[109.184,12.91],[44.785,30.207],[46.367,83.8],[4.742,29.853],[-43.207,40.88],[-3.03,4.759]],"c":true}]},{"t":139,"s":[{"i":[[0,0],[-21.612,-7.546],[0,0],[-9.861,-11.191],[0,0],[5.513,-22.657],[0,0],[28.248,-2.679],[0,0],[-3.797,16.623]],"o":[[0,0],[21.612,7.546],[0,0],[9.86,11.19],[0,0],[-5.513,22.655],[0,0],[-28.248,2.679],[0,0],[3.797,-16.622]],"v":[[-64.266,-70.083],[11.968,-36.573],[102.145,-138.915],[62.104,-17.481],[126.703,16.614],[47.002,37.219],[49.217,103.446],[-2.248,36.609],[-61.136,50.31],[-11.523,5.907]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[1,0.337254911661,0.556862771511,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[1,0.964705882353,0,1]},{"t":128,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.012],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[64.185]},{"t":139,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":119,"s":[1,0.337254911661,0.556862771511,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":122,"s":[1,0.964705882353,0,1]},{"t":128,"s":[1,1,1,1]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[100]},{"t":128,"s":[0]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[149.003,97.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 16","bm":0,"hd":false}],"ip":117,"op":139,"st":117,"bm":0},{"ddd":0,"ind":28,"ty":4,"nm":"star 27","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[-10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[20]},{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[-10]},{"t":108,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.837,"y":0.731},"o":{"x":0.167,"y":0.109},"t":63,"s":[347.046,169.899,0],"to":[25.454,17.101,0],"ti":[-1.413,21.336,0]},{"i":{"x":0.695,"y":1},"o":{"x":0.333,"y":0.221},"t":84,"s":[428.046,214.899,0],"to":[5.954,-89.899,0],"ti":[99.454,-123.899,0]},{"t":116,"s":[147.204,132.385,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[-50,50,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":67,"s":[-160,160,100]},{"i":{"x":[0.48,0.48,0.48],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":84,"s":[-200,200,100]},{"t":116,"s":[-140,140,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":66,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":79,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":89,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":92,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":94,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":96,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":99,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":104,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":106,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":107,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[0.821,-1.268],[-1.492,0],[0.671,1.268],[0,1.94]],"o":[[-0.597,-0.895],[-0.597,1.567],[-0.821,1.268],[1.492,0],[-0.671,-1.268],[0,-1.94]],"v":[[0.081,-28.086],[-1.933,-10.18],[-4.694,-5.331],[-0.143,-3.913],[4.11,-5.405],[1.424,-10.255]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":110,"s":[{"i":[[0.597,0.895],[0.597,-1.567],[1.791,-0.597],[1.641,-0.895],[-3.134,0.821],[-0.224,3.059]],"o":[[-0.597,-0.895],[-0.597,1.567],[-1.791,0.597],[-1.641,0.895],[3.134,-0.821],[0.224,-3.059]],"v":[[0.081,-28.086],[-2.754,-9.658],[-8.126,-6.972],[-12.975,-4.883],[-3.873,-3.764],[0.603,-9.583]],"c":true}]},{"t":117,"s":[{"i":[[0.597,0.895],[0.746,-1.791],[3.283,0],[1.641,-0.895],[-4.476,0.149],[-1.194,4.178]],"o":[[-0.597,-0.895],[-0.746,1.791],[-3.283,0],[-1.641,0.895],[4.476,-0.149],[1.194,-4.178]],"v":[[0.081,-28.086],[-7.081,-10.18],[-11.856,-8.091],[-29.762,-6.599],[-12.155,-4.212],[-3.5,-9.882]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"i":{"x":[0.49],"y":[1]},"o":{"x":[0.167],"y":[0.063]},"t":114,"s":[100]},{"t":117,"s":[1]}]},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":66,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[3.526,-0.28],[0,0],[1.276,-5.963],[0,0],[-3.89,-2.244],[0,0],[-3.793,1.314],[0,0],[0,0],[0,0],[1.096,6.059],[0,0]],"o":[[-3.526,0.28],[0,0],[-1.276,5.963],[0,0],[3.89,2.243],[0,0],[3.793,-1.314],[0,0],[0,0],[0,0],[-1.096,-6.059],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.009,9.178],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[1.734,7.443],[12.317,5.701],[17.928,-3.189],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[3.381,0.053],[0,0],[0,0],[0,0],[-1.148,-3.454],[0,0],[-1.354,3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-3.381,-0.053],[0,0],[0,0],[0,0],[1.148,3.454],[0,0],[1.354,-3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-5.246,28.827],[-0.44,32.392],[4.189,28.519],[8.041,14.814],[9.284,10.122],[9.441,6.567],[9.039,-2.524],[6.438,-11.289]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[-5.292,-0.15],[0,0],[0,0],[0,0],[0.947,-1.66],[2.199,-0.028],[1.243,2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.292,0.15],[0,0],[0,0],[0,0],[-0.947,1.659],[-2.199,0.028],[-1.243,-2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[5.094,28.84],[-0.361,32.767],[-4.746,28.157],[-8.212,14.814],[-9.478,9.372],[-10.318,7.442],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[-4.537,-0.419],[0,0],[-0.757,-4.757],[0,0],[2.864,-2.269],[0,0],[3.349,1.611],[0,0],[0,0],[0,0],[-0.979,4.323],[0,0]],"o":[[4.537,0.419],[0,0],[0.757,4.757],[0,0],[-2.864,2.269],[0,0],[-3.349,-1.611],[0,0],[0,0],[0,0],[0.979,-4.323],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-1.443,7.007],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":79,"s":[{"i":[[-4.496,0.238],[0,0],[-1.428,-4.917],[0,0],[4.11,-2.869],[0,0],[4.288,2.546],[0,0],[0,0],[0,0],[-1.256,3.466],[0,0]],"o":[[4.496,-0.238],[0,0],[1.428,4.917],[0,0],[-4.11,2.869],[0,0],[-4.288,-2.546],[0,0],[0,0],[0,0],[1.256,-3.466],[0,0]],"v":[[0,-32.767],[10.647,-11.195],[34.454,-7.735],[17.227,9.057],[21.294,32.767],[0,21.573],[-21.294,32.767],[-18.28,15.199],[2.954,1.101],[-22.318,4.094],[-34.454,-7.735],[-10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":82,"s":[{"i":[[-2.884,-0.203],[0,0],[-1.731,-3.582],[0,0],[3.701,-2.45],[0,0],[3.447,0.351],[0,0],[0,0],[0,0],[-0.736,4.096],[0,0]],"o":[[2.884,0.203],[0,0],[1.731,3.582],[0,0],[-3.701,2.45],[0,0],[-3.447,-0.351],[0,0],[0,0],[0,0],[0.736,-4.096],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-2.186,5.266],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[-4.89,0.025],[0,0],[0,0],[0,0],[0.753,-2.683],[0,0],[0.736,2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.89,-0.025],[0,0],[0,0],[0,0],[-0.753,2.683],[0,0],[-0.736,-2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[3.92,29.841],[-0.361,32.767],[-4.385,29.626],[-8.212,14.814],[-1.353,12.685],[-9.193,8.942],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[{"i":[[5.068,0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-5.068,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-3.815,30.466],[-0.44,32.392],[3.055,30.554],[8.041,14.814],[2.034,12.747],[8.816,10.567],[9.039,-2.524],[5.423,-12.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[{"i":[[3.483,0.994],[0,0],[0.114,-2.696],[0,0],[-2.253,-2.497],[0,0],[-3.093,1.238],[0,0],[0,0],[0,0],[1.01,3.65],[0,0]],"o":[[-3.483,-0.994],[0,0],[-0.114,2.696],[0,0],[2.253,2.497],[0,0],[3.093,-1.238],[0,0],[0,0],[0,0],[-1.01,-3.65],[0,0]],"v":[[0.071,-32.434],[-7.054,-10.375],[-12.457,-2.066],[-8.663,9.513],[-6.035,30.583],[-0.349,27.065],[5.109,30.855],[9.012,12.649],[0.207,10.339],[9.899,6.778],[11.835,-3.158],[5.726,-11.667]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":89,"s":[{"i":[[3.823,1.326],[0,0],[1.607,-3.893],[0,0],[-2.185,-2.941],[0,0],[-4.208,-0.222],[0,0],[0,0],[0,0],[2.07,5.343],[0,0]],"o":[[-3.823,-1.326],[0,0],[-1.607,3.893],[0,0],[2.185,2.941],[0,0],[4.208,0.222],[0,0],[0,0],[0,0],[-2.07,-5.343],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.767,11.746],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[-0.497,4.128],[12.317,5.701],[17.427,-4.427],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":92,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":94,"s":[{"i":[[3.526,-0.28],[0,0],[1.276,-5.963],[0,0],[-3.89,-2.244],[0,0],[-3.793,1.314],[0,0],[0,0],[0,0],[1.096,6.059],[0,0]],"o":[[-3.526,0.28],[0,0],[-1.276,5.963],[0,0],[3.89,2.243],[0,0],[3.793,-1.314],[0,0],[0,0],[0,0],[-1.096,-6.059],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.009,9.178],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[1.734,7.443],[12.317,5.701],[17.928,-3.189],[6.331,-10.861]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":96,"s":[{"i":[[3.381,0.053],[0,0],[0,0],[0,0],[-1.148,-3.454],[0,0],[-1.354,3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-3.381,-0.053],[0,0],[0,0],[0,0],[1.148,3.454],[0,0],[1.354,-3.037],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-5.246,28.827],[-0.44,32.392],[4.189,28.519],[8.041,14.814],[9.284,10.122],[9.441,6.567],[9.039,-2.524],[6.438,-11.289]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":97,"s":[{"i":[[-5.292,-0.15],[0,0],[0,0],[0,0],[0.947,-1.66],[2.199,-0.028],[1.243,2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.292,0.15],[0,0],[0,0],[0,0],[-0.947,1.659],[-2.199,0.028],[-1.243,-2.989],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[5.094,28.84],[-0.361,32.767],[-4.746,28.157],[-8.212,14.814],[-9.478,9.372],[-10.318,7.442],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":99,"s":[{"i":[[-4.537,-0.419],[0,0],[-0.757,-4.757],[0,0],[2.864,-2.269],[0,0],[3.349,1.611],[0,0],[0,0],[0,0],[-0.979,4.323],[0,0]],"o":[[4.537,0.419],[0,0],[0.757,4.757],[0,0],[-2.864,2.269],[0,0],[-3.349,-1.611],[0,0],[0,0],[0,0],[0.979,-4.323],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-1.443,7.007],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":102,"s":[{"i":[[-4.496,0.238],[0,0],[-1.428,-4.917],[0,0],[4.11,-2.869],[0,0],[4.288,2.546],[0,0],[0,0],[0,0],[-1.256,3.466],[0,0]],"o":[[4.496,-0.238],[0,0],[1.428,4.917],[0,0],[-4.11,2.869],[0,0],[-4.288,-2.546],[0,0],[0,0],[0,0],[1.256,-3.466],[0,0]],"v":[[0,-32.767],[10.647,-11.195],[34.454,-7.735],[17.227,9.057],[21.294,32.767],[0,21.573],[-21.294,32.767],[-18.28,15.199],[2.954,1.101],[-22.318,4.094],[-34.454,-7.735],[-10.647,-11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":104,"s":[{"i":[[-2.884,-0.203],[0,0],[-1.731,-3.582],[0,0],[3.701,-2.45],[0,0],[3.447,0.351],[0,0],[0,0],[0,0],[-0.736,4.096],[0,0]],"o":[[2.884,0.203],[0,0],[1.731,3.582],[0,0],[-3.701,2.45],[0,0],[-3.447,-0.351],[0,0],[0,0],[0,0],[0.736,-4.096],[0,0]],"v":[[0.018,-32.767],[7.067,-10.207],[17,-3.664],[8.715,11.881],[9.132,30.719],[0.31,24.471],[-8.986,31.393],[-9.232,13.93],[-2.186,5.266],[-10.918,5.562],[-16.65,-4.262],[-6.158,-11.007]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":106,"s":[{"i":[[-4.89,0.025],[0,0],[0,0],[0,0],[0.753,-2.683],[0,0],[0.736,2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[4.89,-0.025],[0,0],[0,0],[0,0],[-0.753,2.683],[0,0],[-0.736,-2.476],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.026,-32.767],[6.605,-10.32],[9.52,-1.92],[8.639,13.091],[3.92,29.841],[-0.361,32.767],[-4.385,29.626],[-8.212,14.814],[-1.353,12.685],[-9.193,8.942],[-9.02,-2.774],[-6.02,-11.82]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":107,"s":[{"i":[[5.068,0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-5.068,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.392,-32.267],[-6.589,-10.32],[-9.239,-1.17],[-8.912,8.466],[-3.815,30.466],[-0.44,32.392],[3.055,30.554],[8.041,14.814],[2.034,12.747],[8.816,10.567],[9.039,-2.524],[5.423,-12.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":108,"s":[{"i":[[3.483,0.994],[0,0],[0.114,-2.696],[0,0],[-2.253,-2.497],[0,0],[-3.093,1.238],[0,0],[0,0],[0,0],[1.01,3.65],[0,0]],"o":[[-3.483,-0.994],[0,0],[-0.114,2.696],[0,0],[2.253,2.497],[0,0],[3.093,-1.238],[0,0],[0,0],[0,0],[-1.01,-3.65],[0,0]],"v":[[0.071,-32.434],[-7.054,-10.375],[-12.457,-2.066],[-8.663,9.513],[-6.035,30.583],[-0.349,27.065],[5.109,30.855],[9.012,12.649],[0.207,10.339],[9.899,6.778],[11.835,-3.158],[5.726,-11.667]],"c":true}]},{"i":{"x":0.49,"y":1},"o":{"x":0.167,"y":0.167},"t":110,"s":[{"i":[[3.823,1.326],[0,0],[1.607,-3.893],[0,0],[-2.185,-2.941],[0,0],[-4.208,-0.222],[0,0],[0,0],[0,0],[2.07,5.343],[0,0]],"o":[[-3.823,-1.326],[0,0],[-1.607,3.893],[0,0],[2.185,2.941],[0,0],[4.208,0.222],[0,0],[0,0],[0,0],[-2.07,-5.343],[0,0]],"v":[[-0.572,-32.767],[-7.983,-10.486],[-18.894,-3.858],[-10.767,11.746],[-10.474,30.816],[-0.168,24.661],[9.218,31.458],[10.204,13.567],[-0.497,4.128],[12.317,5.701],[17.427,-4.427],[6.331,-10.861]],"c":true}]},{"t":117,"s":[{"i":[[4.184,0.266],[0,0],[1.282,-5.639],[0,0],[-3.847,-4.413],[0,0],[-3.629,3.779],[0,0],[0,0],[0,0],[0.282,4.061],[0,0]],"o":[[-4.184,-0.266],[0,0],[-1.282,5.639],[0,0],[3.847,4.413],[0,0],[3.629,-3.779],[0,0],[0,0],[0,0],[-0.282,-4.061],[0,0]],"v":[[0,-32.767],[-10.647,-11.195],[-34.454,-7.735],[-17.227,9.057],[-21.294,32.767],[0,21.573],[21.294,32.767],[18.28,15.199],[-2.954,1.101],[22.318,4.094],[34.454,-7.735],[10.647,-11.195]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":70,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":75,"s":[0.938408374786,0.650980353355,1,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":80,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":89,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":93,"s":[0.733102619648,1,0.650980353355,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":99,"s":[1,0.555570960045,0.337254911661,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":104,"s":[0.650980353355,0.946620464325,1,1]},{"t":109,"s":[1,0.555570960045,0.337254911661,1]}]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":64,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":70,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":75,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":80,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":84,"s":[1,0.733333349228,0.180392161012,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":89,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":93,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":99,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":104,"s":[1,1,1,1]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":109,"s":[1,0.941176474094,0,1]},{"i":{"x":[0.468],"y":[1]},"o":{"x":[0.54],"y":[0]},"t":113,"s":[1,0.733333349228,0.180392161012,1]},{"t":116,"s":[1,0.555570960045,0.337254911661,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"star","bm":0,"hd":false}],"ip":63,"op":116,"st":54,"bm":0},{"ddd":0,"ind":29,"ty":4,"nm":"Crcl2","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[-275]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":99,"s":[-321]},{"t":114,"s":[-383]}]},"p":{"a":0,"k":[256.5,258.5,0]},"a":{"a":0,"k":[152,-2,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":89,"s":[630.333,630.333,100]},{"t":114,"s":[542.667,542.667,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[46,46]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":89,"s":[0.650980353355,0.946620464325,1,1],"h":1},{"t":93,"s":[0.733102619648,1,0.650980353355,1],"h":1},{"t":100,"s":[1,0.650980353355,0.930196046829,1],"h":1},{"t":106,"s":[1,0.770103812218,0.407843112946,1],"h":1},{"t":111,"s":[1,1,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[3.1]},{"t":114,"s":[0.5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[5.857]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":104,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":111,"s":[5]},{"t":114,"s":[2]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[5]},{"t":99,"s":[2]}]},"o":{"a":0,"k":-10},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[152,-2]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":89,"op":114,"st":-93,"bm":0},{"ddd":0,"ind":30,"ty":4,"nm":"Crcl1","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[-275]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":98,"s":[-321]},{"t":113,"s":[-383]}]},"p":{"a":0,"k":[256.5,258.5,0]},"a":{"a":0,"k":[152,-2,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":88,"s":[773.333,773.333,100]},{"t":113,"s":[685.667,685.667,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[46,46]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":88,"s":[1,1,1,1],"h":1},{"t":94,"s":[1,0.770103812218,0.407843112946,1],"h":1},{"t":100,"s":[0.733102619648,1,0.650980353355,1],"h":1},{"t":106,"s":[0.650980353355,0.946620464325,1,1],"h":1},{"t":111,"s":[1,0.650980353355,0.930196046829,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":91,"s":[3.1]},{"t":113,"s":[0.5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[5.857]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":103,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":110,"s":[5]},{"t":113,"s":[2]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[5]},{"t":98,"s":[2]}]},"o":{"a":0,"k":-10},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152,-2]},"a":{"a":0,"k":[152,-2]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":88,"op":113,"st":-94,"bm":0},{"ddd":0,"ind":31,"ty":4,"nm":"PF1","sr":1,"ks":{"p":{"a":0,"k":[243.5,253,0]},"a":{"a":0,"k":[135.5,-3,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":62,"s":[100,100,100]},{"t":66,"s":[111,111,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":62,"s":[{"i":[[0,0],[6.5,-1.25],[0,0],[3.75,-4.25],[0,0],[-1.5,-7.75],[0,0],[-3,-5],[0,0],[-6.25,-4.5],[0,0],[-10,0.75],[0,0],[-5.5,6.5],[0,0],[-4.25,8.5],[0,0],[21.25,-1.625],[0,0],[1.25,-1.563],[0,0],[1.25,-1],[0,0],[1.875,0.5],[0,0],[1.75,0.5],[0,0],[0.25,1.75],[0,0],[-0.25,1.875],[0,0],[-2.25,0.75],[0,0],[-2.75,-0.5],[0,0],[-2,-2.375],[0,0],[4.5,7],[0,0],[11,-0.75]],"o":[[0,0],[-6.5,1.25],[0,0],[-3.75,4.25],[0,0],[1.5,7.75],[0,0],[3,5],[0,0],[6.25,4.5],[0,0],[10,-0.75],[0,0],[5.5,-6.5],[0,0],[4.25,-8.5],[0,0],[-3.625,0.625],[0,0],[-1.25,1.562],[0,0],[-1.25,1],[0,0],[-1.875,-0.5],[0,0],[-1.75,-0.5],[0,0],[-0.25,-1.75],[0,0],[0.25,-1.875],[0,0],[2.25,-0.75],[0,0],[2.75,0.5],[0,0],[2,2.375],[0,0],[-4.5,-7],[0,0],[-11,0.75]],"v":[[156,-58],[143,-39.25],[125.5,-46],[124.75,-29.25],[101.75,-18.75],[113,-6.75],[94.75,17.25],[122.75,14.5],[110.5,34.25],[131.75,26.25],[135.75,53.25],[154.5,34.5],[171,39],[174,24.75],[193.75,26.5],[183.25,4.5],[204.5,-10],[159.125,-6],[158.25,-1.625],[154.75,-2.25],[154,1.5],[151.438,-1.563],[150.5,3.5],[150.125,-0.875],[146.5,3.25],[147.25,-2.25],[142.25,1.5],[145,-3],[142.375,-5.5],[145.375,-8.25],[144,-12.75],[148.5,-10.5],[151.5,-14.5],[152.75,-10.25],[157.625,-12.625],[156,-6.625],[204.5,-10.25],[177.25,-19],[183.75,-42.5],[165,-34.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":67,"s":[{"i":[[0,0],[18,-6.2],[0,0],[10.65,-11.15],[0,0],[1.2,-19.05],[0,0],[-6.75,-11.75],[0,0],[-11.95,-7.85],[0,0],[-12.85,2.1],[0,0],[-6.3,4.65],[0,0],[-4.4,9.05],[0,0],[11.15,-14.8],[0,0],[7.3,-6.95],[0,0],[9.85,-0.4],[0,0],[9.35,5.25],[0,0],[5.8,7.05],[0,0],[0.45,11.05],[0,0],[-6.4,8.4],[0,0],[-15.2,2.3],[0,0],[-16.8,-4.5],[0,0],[-16.7,-12.7],[0,0],[12,20.2],[0,0],[17.8,13.2]],"o":[[0,0],[-18,6.2],[0,0],[-10.65,11.15],[0,0],[-1.2,19.05],[0,0],[6.75,11.75],[0,0],[11.95,7.85],[0,0],[12.85,-2.1],[0,0],[6.3,-4.65],[0,0],[4.4,-9.05],[0,0],[-11.15,14.8],[0,0],[-7.3,6.95],[0,0],[-9.85,0.4],[0,0],[-9.35,-5.25],[0,0],[-5.8,-7.05],[0,0],[-0.45,-11.05],[0,0],[6.4,-8.4],[0,0],[15.2,-2.3],[0,0],[16.8,4.5],[0,0],[16.7,12.7],[0,0],[-12,-20.2],[0,0],[-17.8,-13.2]],"v":[[176.5,-140.4],[139.5,-94.2],[91.3,-107.6],[76.25,-57.65],[29.2,-41.85],[54.2,0.85],[10.05,49.6],[77.65,45.1],[56.7,94.2],[108.35,77.05],[122.4,135.8],[162.35,88.2],[206.8,106.9],[209,68.55],[255.9,68.2],[229.4,28.95],[289.5,-13.6],[204.15,2.2],[214.6,41.5],[189.3,38.55],[183.6,61.5],[154.75,51.3],[135.35,71.4],[125.35,43.85],[96.75,52.4],[105,25.25],[74.45,22.8],[93.15,-2.65],[83.5,-24.85],[105.1,-32.7],[108.9,-72.25],[140.3,-60.2],[167,-92.6],[176.9,-55.5],[206.7,-63.7],[204.8,-15.7],[288.9,-13.3],[222.5,-35.3],[234.2,-84.7],[191.8,-87.3]],"c":true}]},{"t":72,"s":[{"i":[[0,0],[35,-8.7],[0,0],[19.25,-26.15],[0,0],[-3.3,-32.65],[0,0],[-13.35,-14.4],[0,0],[-26.65,-13.95],[0,0],[-28.65,10.7],[0,0],[-19,21.05],[0,0],[-5.6,24.45],[0,0],[6.65,-26.3],[0,0],[20.3,-19.95],[0,0],[26.25,-3.7],[0,0],[18.35,10.85],[0,0],[11,16.25],[0,0],[-0.35,26.35],[0,0],[-18.9,23.8],[0,0],[-31.7,6.8],[0,0],[-33.1,-13.5],[0,0],[-7.7,-30.2],[0,0],[9,29.2],[0,0],[28.3,18.2]],"o":[[0,0],[-35,8.7],[0,0],[-19.25,26.15],[0,0],[3.3,32.65],[0,0],[13.35,14.4],[0,0],[26.65,13.95],[0,0],[28.65,-10.7],[0,0],[19,-21.05],[0,0],[5.6,-24.45],[0,0],[-6.65,26.3],[0,0],[-20.3,19.95],[0,0],[-26.25,3.7],[0,0],[-18.35,-10.85],[0,0],[-11,-16.25],[0,0],[0.35,-26.35],[0,0],[18.9,-23.8],[0,0],[31.7,-6.8],[0,0],[33.1,13.5],[0,0],[7.7,30.2],[0,0],[-9,-29.2],[0,0],[-28.3,-18.2]],"v":[[189,-208.9],[139.5,-139.2],[73.3,-166.6],[62.75,-92.15],[-20.8,-57.85],[18.7,7.85],[-45.95,79.6],[45.15,65.6],[19.2,137.2],[88.35,115.05],[114.9,193.8],[165.35,123.7],[243.8,161.4],[243,93.05],[310.9,83.2],[281.9,29.95],[344.5,-8.1],[266.15,22.7],[283.6,69],[232.8,79.55],[224.1,130.5],[166.25,106.8],[122.85,148.4],[98.85,100.85],[52.75,102.9],[61,52.75],[13.45,53.3],[30.65,7.85],[13.5,-46.85],[73.6,-80.2],[87.9,-134.75],[138.8,-121.2],[182,-164.6],[209.9,-110],[273.7,-111.7],[259.3,-48.7],[346.4,-8.3],[273.5,-59.3],[313.7,-143.7],[214.3,-120.8]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[1,1,1,1]},{"t":72,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":0,"k":3},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[1,0.847058883368,0,1]},{"t":72,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":62,"op":73,"st":-1,"bm":0},{"ddd":0,"ind":32,"ty":4,"nm":"S9","parent":31,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":84,"s":[30]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-23.75,-9.25],[-0.5,9],[-4.75,-12.25],[3.75,-9.25]],"o":[[-25,-19.25],[-5.5,7.5],[-17,-1.75],[5.25,-4.25]],"v":[[309,82.5],[280.5,30.5],[282.5,68.75],[248.75,87.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[-10,18.5],[0,0],[6.25,-12.5],[0,0]],"o":[[10,-18.5],[0,0],[-6.25,12.5],[0,0]],"v":[[319,87.5],[307.75,49.25],[306.25,82],[278.25,99.25]],"c":true}]},{"t":85,"s":[{"i":[[-10,18.5],[0,0],[6.25,-12.5],[0,0]],"o":[[10,-18.5],[0,0],[-6.25,12.5],[0,0]],"v":[[348,111.5],[367.75,57.75],[345.75,109.5],[312.75,154.75]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,1,1,1]},{"t":85,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[3]},{"t":85,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,0.847058883368,0,1]},{"t":85,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":73,"op":85,"st":-3,"bm":0},{"ddd":0,"ind":33,"ty":4,"nm":"S8","parent":31,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":84,"s":[30]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-12.75,-20.75],[-15.5,29],[-4.75,-17],[0,0]],"o":[[-10.75,-20.25],[-9,-0.75],[-9,-10.5],[0,0]],"v":[[244.25,159.25],[239.5,95],[224.25,130.5],[185.75,123]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[-19.75,11.75],[0,0],[13.75,-7.5],[0,0]],"o":[[19.75,-11.75],[0,0],[-13.75,7.5],[0,0]],"v":[[248.25,165.75],[262,134],[242.25,156],[209.75,162.5]],"c":true}]},{"t":85,"s":[{"i":[[-19.75,11.75],[0,0],[13.75,-7.5],[0,0]],"o":[[19.75,-11.75],[0,0],[-13.75,7.5],[0,0]],"v":[[262.25,197.75],[303.5,163.5],[261.25,195],[220.25,217]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,1,1,1]},{"t":85,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[3]},{"t":85,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,0.847058883368,0,1]},{"t":85,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false}],"ip":72,"op":85,"st":-3,"bm":0},{"ddd":0,"ind":34,"ty":4,"nm":"S6_7","parent":31,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":84,"s":[30]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[31.75,-38.75],[-18.25,-4.25],[13.75,-9.25],[1.5,2]],"o":[[26.25,-20],[-4.75,-6.75],[5.5,-18.75],[-1.5,-2]],"v":[[25.75,130.25],[84.75,110.25],[56,102.25],[54.25,70.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[-15.75,-19.25],[0,0],[9,10.75],[0,0]],"o":[[15.75,19.25],[0,0],[-9,-10.75],[0,0]],"v":[[22.75,144.75],[67.25,153.75],[34,138.25],[30.75,108.75]],"c":true}]},{"t":85,"s":[{"i":[[-14.75,-13.25],[0,0],[13,12.75],[0,0]],"o":[[14.75,13.25],[0,0],[-13,-12.75],[0,0]],"v":[[5.75,177.75],[43.25,200.75],[6.5,174.25],[-23.25,148.75]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,1,1,1]},{"t":85,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[3]},{"t":85,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,0.847058883368,0,1]},{"t":85,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-0.5,-51.25],[-12.75,-2],[5.25,-10.25],[10.5,0.25]],"o":[[14.25,-38.25],[-17.25,-7.5],[0.75,-10.75],[6.25,10.5]],"v":[[116.5,191.25],[162.5,124.25],[122.75,151.25],[99.25,121.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[-29.5,-7.25],[0,0],[18.25,2.75],[0,0]],"o":[[29.5,7.25],[0,0],[-18.25,-2.75],[0,0]],"v":[[116.5,191.25],[160.5,171.75],[119.75,178.75],[88.25,160.5]],"c":true}]},{"t":85,"s":[{"i":[[-38,-3.25],[0,0],[25.75,2.25],[0,0]],"o":[[38,3.25],[0,0],[-25.75,-2.25],[0,0]],"v":[[120,226.75],[178,224.75],[120.75,224.25],[69.75,213]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,1,1,1]},{"t":85,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[3]},{"t":85,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,0.847058883368,0,1]},{"t":85,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":71,"op":85,"st":-3,"bm":0},{"ddd":0,"ind":35,"ty":4,"nm":"S4_5","parent":31,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":84,"s":[30]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[47.75,-22.75],[-20.75,-5.25],[12.75,-4.75],[1.5,2]],"o":[[42.25,-12.5],[-10,-8.75],[12,-13.5],[-1.5,-2]],"v":[[-37.25,75.5],[48.5,63.5],[10,56],[21.75,17.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[-9.25,-21.5],[0,0],[6.5,16.5],[0,0]],"o":[[9.25,21.5],[0,0],[-6.5,-16.5],[0,0]],"v":[[-28.25,74],[18,89],[-15,66],[-9.75,21.75]],"c":true}]},{"t":85,"s":[{"i":[[-9.25,-21.5],[0,0],[6.5,16.5],[0,0]],"o":[[9.25,21.5],[0,0],[-6.5,-16.5],[0,0]],"v":[[-65.75,82],[-37,130.5],[-64.5,77.5],[-77.75,13.25]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,1,1,1]},{"t":85,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[3]},{"t":85,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,0.847058883368,0,1]},{"t":85,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[36.75,2],[-4,-12.25],[13.75,20],[-4.25,13]],"o":[[26,21.25],[3.25,2.5],[27.75,-6],[-4.5,2]],"v":[[-15.75,-55.5],[19.5,2.25],[12.25,-47],[55.25,-78.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[7.25,-23],[0,0],[-4.25,16.5],[0,0]],"o":[[-7.25,23],[0,0],[4.25,-16.5],[0,0]],"v":[[-30.75,-65.5],[-11.5,-19.25],[-15.25,-61],[7.25,-90]],"c":true}]},{"t":85,"s":[{"i":[[13.25,-28],[0,0],[-12.75,27],[0,0]],"o":[[-13.25,28],[0,0],[12.75,-27],[0,0]],"v":[[-55.75,-103.5],[-78.5,-29.25],[-52.75,-102.5],[-15.25,-156]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,1,1,1]},{"t":85,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[3]},{"t":85,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,0.847058883368,0,1]},{"t":85,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":70,"op":85,"st":-3,"bm":0},{"ddd":0,"ind":36,"ty":4,"nm":"S2_3","parent":31,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":84,"s":[30]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[33.25,34.5],[4,-18.75],[5.75,15.25],[1.5,2]],"o":[[7.25,32.5],[3.25,2.5],[19.75,20.25],[-1.5,-2]],"v":[[74.75,-162.5],[73.5,-82.75],[86.25,-138.75],[132.75,-122]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[25.75,-9],[0,0],[-22.25,7.75],[0,0]],"o":[[-25.75,9],[0,0],[22.25,-7.75],[0,0]],"v":[[68.75,-187],[44.5,-146.25],[72.25,-175.75],[111.25,-176]],"c":true}]},{"t":85,"s":[{"i":[[25.75,-9],[0,0],[-22.25,7.75],[0,0]],"o":[[-25.75,9],[0,0],[22.25,-7.75],[0,0]],"v":[[61.25,-212],[6.5,-178.25],[63.75,-207.75],[116.75,-225.5]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,1,1,1]},{"t":85,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[3]},{"t":85,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,0.847058883368,0,1]},{"t":85,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-1.25,50.5],[9.5,-11.25],[-9.25,24.75],[-17.25,-9.5]],"o":[[-16.25,57.5],[3.25,2.5],[0.25,21.75],[0,-3.5]],"v":[[187.75,-204.5],[146,-124.75],[182.75,-166.25],[201.75,-116.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[27.75,7.5],[0,0],[-15.25,-4.75],[0,0]],"o":[[-27.75,-7.5],[0,0],[15.25,4.75],[0,0]],"v":[[191.25,-200.5],[146.5,-178.75],[188.25,-187.25],[222.25,-159]],"c":true}]},{"t":85,"s":[{"i":[[27.75,7.5],[0,0],[-15.25,-4.75],[0,0]],"o":[[-27.75,-7.5],[0,0],[15.25,4.75],[0,0]],"v":[[203.75,-221],[152.25,-227],[203.75,-218.75],[250,-203.25]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,1,1,1]},{"t":85,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[3]},{"t":85,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,0.847058883368,0,1]},{"t":85,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":69,"op":85,"st":-3,"bm":0},{"ddd":0,"ind":37,"ty":4,"nm":"S10","parent":31,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":84,"s":[30]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-41.75,4.5],[20,16.25],[-19.25,-2.75],[0,0]],"o":[[-30.25,-9.5],[3.25,2.5],[-30.25,4.75],[0,0]],"v":[[344.75,-8],[292,-34.25],[320.75,-9.25],[280.75,26.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[0.25,17.5],[16,4.75],[-0.75,-18.25],[0,0]],"o":[[-0.25,-17.5],[3.25,2.5],[0.75,18.25],[0,0]],"v":[[346.25,-9],[322.5,-40.75],[333.75,-11.25],[322.25,21]],"c":true}]},{"t":85,"s":[{"i":[[0.75,17.5],[4,12.75],[-0.75,-18.25],[0,0]],"o":[[-0.75,-17.5],[3.25,2.5],[0.75,18.25],[0,0]],"v":[[376.25,-12],[368.5,-58.75],[372.25,-11.75],[372.75,37]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,1,1,1]},{"t":85,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[3]},{"t":85,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,0.847058883368,0,1]},{"t":85,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false}],"ip":68,"op":85,"st":-3,"bm":0},{"ddd":0,"ind":38,"ty":4,"nm":"S1","parent":31,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":84,"s":[30]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-27.25,24.5],[41,-1.25],[-7.25,9.75],[0,0]],"o":[[-17.25,13.5],[3.25,2.5],[-5.75,23.25],[0,0]],"v":[[307.75,-139],[214,-108.75],[276.75,-112.25],[275.25,-59]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[9.75,18.5],[0,0],[-9.25,-12.75],[0,0]],"o":[[-9.75,-18.5],[0,0],[9.25,12.75],[0,0]],"v":[[308.25,-130.5],[260.5,-141.25],[294.75,-126.25],[306.25,-83]],"c":true}]},{"t":85,"s":[{"i":[[13.25,18],[0,0],[-9.25,-12.75],[0,0]],"o":[[-13.25,-18],[0,0],[9.25,12.75],[0,0]],"v":[[329.25,-142],[280,-187.75],[326.25,-140.75],[355.75,-93]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,0.847058883368,0,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,1,1,1]},{"t":85,"s":[1,0.847058883368,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[3]},{"t":85,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[1,1,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[1,0.847058883368,0,1]},{"t":85,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false}],"ip":67,"op":85,"st":-3,"bm":0},{"ddd":0,"ind":39,"ty":4,"nm":"Points","parent":40,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":94,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[-4.286]},{"t":94,"s":[0]}]},"p":{"a":0,"k":[0.5,3.5,0]},"a":{"a":0,"k":[0.5,3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.827,0.827,0.8],"y":[0.84,0.84,1]},"o":{"x":[0.436,0.436,0.431],"y":[0.438,0.438,0]},"t":64,"s":[68.431,68.431,100]},{"i":{"x":[0.708,0.708,0.479],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":68,"s":[90,90,100]},{"t":94,"s":[107,107,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[7.226,-9.469],[9.469,7.226],[-7.226,9.469],[-9.469,-7.226]],"o":[[-7.226,9.469],[-9.469,-7.226],[7.226,-9.469],[9.469,7.226]],"v":[[385.072,18.248],[354.843,22.31],[350.781,-7.919],[381.011,-11.981]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176530427,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[367.391,4.348]},"a":{"a":0,"k":[367.391,4.348]},"s":{"a":1,"k":[{"i":{"x":[0.804,0.804],"y":[0.846,0.846]},"o":{"x":[0.431,0.431],"y":[0.428,0.428]},"t":64,"s":[123.181,123.181]},{"i":{"x":[0.496,0.496],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":68,"s":[100,100]},{"t":94,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[11.805,-1.586],[1.586,11.805],[-11.805,1.586],[-1.586,-11.805]],"o":[[-11.805,1.586],[-1.586,-11.805],[11.805,-1.586],[1.586,11.805]],"v":[[261.231,286.312],[236.984,267.809],[255.487,243.561],[279.735,262.064]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176530427,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[256.522,264.13]},"a":{"a":0,"k":[256.522,264.13]},"s":{"a":1,"k":[{"i":{"x":[0.804,0.804],"y":[0.846,0.846]},"o":{"x":[0.431,0.431],"y":[0.428,0.428]},"t":64,"s":[123.181,123.181]},{"i":{"x":[0.496,0.496],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":68,"s":[100,100]},{"t":94,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[9.469,7.226],[-7.226,9.469],[-9.469,-7.226],[7.226,-9.469]],"o":[[-9.469,-7.226],[7.226,-9.469],[9.469,7.226],[-7.226,9.469]],"v":[[-14.927,388.164],[-18.989,357.934],[11.24,353.873],[15.302,384.102]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176530427,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-4.348,370.652]},"a":{"a":0,"k":[-4.348,370.652]},"s":{"a":1,"k":[{"i":{"x":[0.818,0.818],"y":[0.842,0.842]},"o":{"x":[0.433,0.433],"y":[0.434,0.434]},"t":64,"s":[121.039,121.039]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":68,"s":[100,100]},{"t":94,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.586,11.805],[-11.805,1.586],[-1.586,-11.805],[11.805,-1.586]],"o":[[-1.586,-11.805],[11.805,-1.586],[1.586,11.805],[-11.805,1.586]],"v":[[-282.221,264.91],[-263.717,240.663],[-239.47,259.166],[-257.973,283.413]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176530427,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-263.043,260.87]},"a":{"a":0,"k":[-263.043,260.87]},"s":{"a":1,"k":[{"i":{"x":[0.818,0.818],"y":[0.842,0.842]},"o":{"x":[0.433,0.433],"y":[0.434,0.434]},"t":64,"s":[121.039,121.039]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":68,"s":[100,100]},{"t":94,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.226,9.469],[-9.469,-7.226],[7.226,-9.469],[9.469,7.226]],"o":[[7.226,-9.469],[9.469,7.226],[-7.226,9.469],[-9.469,-7.226]],"v":[[-384.072,-11.248],[-353.843,-15.31],[-349.781,14.919],[-380.011,18.981]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176530427,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-369.565,0]},"a":{"a":0,"k":[-369.565,0]},"s":{"a":1,"k":[{"i":{"x":[0.818,0.818],"y":[0.842,0.842]},"o":{"x":[0.433,0.433],"y":[0.434,0.434]},"t":64,"s":[121.039,121.039]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":68,"s":[100,100]},{"t":94,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-11.805,1.586],[-1.586,-11.805],[11.805,-1.586],[1.586,11.805]],"o":[[11.805,-1.586],[1.586,11.805],[-11.805,1.586],[-1.586,-11.805]],"v":[[-260.819,-278.542],[-236.571,-260.039],[-255.075,-235.791],[-279.322,-254.295]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176530427,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-259.783,-258.696]},"a":{"a":0,"k":[-259.783,-258.696]},"s":{"a":1,"k":[{"i":{"x":[0.818,0.818],"y":[0.842,0.842]},"o":{"x":[0.433,0.433],"y":[0.434,0.434]},"t":64,"s":[121.039,121.039]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":68,"s":[100,100]},{"t":94,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-9.469,-7.226],[7.226,-9.469],[9.469,7.226],[-7.226,9.469]],"o":[[9.469,7.226],[-7.226,9.469],[-9.469,-7.226],[7.226,-9.469]],"v":[[15.927,-381.164],[19.989,-350.934],[-10.24,-346.873],[-14.302,-377.102]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176530427,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,-365.217]},"a":{"a":0,"k":[0,-365.217]},"s":{"a":1,"k":[{"i":{"x":[0.818,0.818],"y":[0.842,0.842]},"o":{"x":[0.433,0.433],"y":[0.434,0.434]},"t":64,"s":[121.039,121.039]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":68,"s":[100,100]},{"t":94,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.586,-11.805],[11.805,-1.586],[1.586,11.805],[-11.805,1.586]],"o":[[1.586,11.805],[-11.805,1.586],[-1.586,-11.805],[11.805,-1.586]],"v":[[283.221,-257.91],[264.717,-233.663],[240.47,-252.166],[258.973,-276.413]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176530427,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[257.609,-254.348]},"a":{"a":0,"k":[257.609,-254.348]},"s":{"a":1,"k":[{"i":{"x":[0.818,0.818],"y":[0.842,0.842]},"o":{"x":[0.433,0.433],"y":[0.434,0.434]},"t":64,"s":[121.039,121.039]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":68,"s":[100,100]},{"t":94,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false}],"ip":64,"op":93,"st":57,"bm":0},{"ddd":0,"ind":40,"ty":4,"nm":"Circle","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":94,"s":[0]}]},"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[-2.049,6.248,0]},"s":{"a":0,"k":[29,29,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[0,-62.396],[62.396,0],[0,62.396],[-62.396,0]],"o":[[0,62.396],[-62.396,0],[0,-62.396],[62.396,0]],"v":[[110.928,6.248],[-2.049,119.225],[-115.026,6.248],[-2.049,-106.729]],"c":true}]},{"t":94,"s":[{"i":[[0,-196.476],[196.476,0],[0,196.476],[-196.476,0]],"o":[[0,196.476],[-196.476,0],[0,-196.476],[196.476,0]],"v":[[353.703,6.248],[-2.049,362],[-357.801,6.248],[-2.049,-349.504]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.941176530427,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.853],"y":[0.857]},"o":{"x":[0.312],"y":[0.298]},"t":61,"s":[103.67]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[18]},{"t":94,"s":[6]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":61,"op":93,"st":59,"bm":0},{"ddd":0,"ind":41,"ty":4,"nm":"SfCrcl10","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":127,"s":[50]},{"t":147,"s":[0]}]},"r":{"a":0,"k":-86},"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[-116,-87,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.8,0.8,0.8],"y":[0,0,0]},"t":116,"s":[150,150,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.784]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":123,"s":[744,744,100]},{"t":147,"s":[425,425,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-17.121,0],[0,-17.121],[17.121,0],[0,17.121]],"o":[[17.121,0],[0,17.121],[-17.121,0],[0,-17.121]],"v":[[0,-31],[31,0],[0,31],[-31,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":123,"s":[0,1,0.977,0.349,0.5,1,0.971,0.175,1,1,0.965,0,0.233,0,0.304,0,0.375,0,0.427,0.5,0.48,1,0.71,0.5,0.94,0,0.97,0,1,0]},{"t":147,"s":[0,1,0.977,0.349,0.5,1,0.971,0.175,1,1,0.965,0,0.525,0,0.611,0,0.697,0,0.787,0.5,0.877,1,0.917,0.5,0.957,0,0.979,0,1,0]}]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[28.25,-0.202]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-116,-87]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":116,"op":147,"st":93,"bm":0},{"ddd":0,"ind":42,"ty":4,"nm":"SfCrcl9","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":102,"s":[0]},{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":109,"s":[50]},{"t":129,"s":[0]}]},"r":{"a":0,"k":-86},"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[-116,-87,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.8,0.8,0.8],"y":[0,0,0]},"t":98,"s":[150,150,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.784]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":105,"s":[744,744,100]},{"t":129,"s":[425,425,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-17.121,0],[0,-17.121],[17.121,0],[0,17.121]],"o":[[17.121,0],[0,17.121],[-17.121,0],[0,-17.121]],"v":[[0,-31],[31,0],[0,31],[-31,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":105,"s":[0,0.679,1,0.443,0.5,0.688,1,0.435,1,0.697,1,0.427,0.22,0,0.297,0,0.375,0,0.427,0.5,0.48,1,0.684,0.5,0.887,0,0.944,0,1,0]},{"t":129,"s":[0,0.679,1,0.443,0.5,0.688,1,0.435,1,0.697,1,0.427,0.603,0,0.69,0,0.777,0,0.837,0.5,0.897,1,0.934,0.5,0.97,0,0.985,0,1,0]}]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[28.25,-0.202]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-116,-87]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":98,"op":129,"st":75,"bm":0},{"ddd":0,"ind":43,"ty":4,"nm":"SfCrcl8","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":90,"s":[0]},{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":97,"s":[50]},{"t":117,"s":[0]}]},"r":{"a":0,"k":-86},"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[-116,-87,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.8,0.8,0.8],"y":[0,0,0]},"t":86,"s":[150,150,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.784]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":93,"s":[744,744,100]},{"t":117,"s":[425,425,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-17.121,0],[0,-17.121],[17.121,0],[0,17.121]],"o":[[17.121,0],[0,17.121],[-17.121,0],[0,-17.121]],"v":[[0,-31],[31,0],[0,31],[-31,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":93,"s":[0,0.576,0.935,1,0.5,0.547,0.919,1,1,0.518,0.904,1,0.235,0,0.305,0,0.375,0,0.427,0.5,0.48,1,0.699,0.5,0.918,0,0.959,0,1,0]},{"t":117,"s":[0,0.576,0.935,1,0.5,0.547,0.919,1,1,0.518,0.904,1,0.627,0,0.689,0,0.75,0,0.814,0.5,0.877,1,0.916,0.5,0.955,0,0.977,0,1,0]}]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[28.25,-0.202]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-116,-87]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":86,"op":117,"st":63,"bm":0},{"ddd":0,"ind":44,"ty":4,"nm":"SfCrcl7","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":77,"s":[0]},{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":84,"s":[50]},{"t":104,"s":[0]}]},"r":{"a":0,"k":-86},"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[-116,-87,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.8,0.8,0.8],"y":[0,0,0]},"t":73,"s":[150,150,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.784]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":80,"s":[744,744,100]},{"t":104,"s":[425,425,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-17.121,0],[0,-17.121],[17.121,0],[0,17.121]],"o":[[17.121,0],[0,17.121],[-17.121,0],[0,-17.121]],"v":[[0,-31],[31,0],[0,31],[-31,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":80,"s":[0,1,0.576,0.945,0.5,1,0.547,0.936,1,1,0.518,0.926,0.24,0,0.307,0,0.375,0,0.427,0.5,0.48,1,0.699,0.5,0.918,0,0.959,0,1,0]},{"t":104,"s":[0,1,0.576,0.945,0.5,1,0.547,0.936,1,1,0.518,0.926,0.608,0,0.694,0,0.78,0,0.826,0.5,0.873,1,0.907,0.5,0.943,0,0.971,0,1,0]}]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[28.25,-0.202]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-116,-87]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":73,"op":104,"st":50,"bm":0},{"ddd":0,"ind":45,"ty":4,"nm":"SfCrcl6","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":61,"s":[0]},{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":68,"s":[50]},{"t":92,"s":[0]}]},"r":{"a":0,"k":-86},"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[-116,-87,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.8,0.8,0.8],"y":[0,0,0]},"t":61,"s":[150,150,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.784]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":68,"s":[744,744,100]},{"t":92,"s":[425,425,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-17.121,0],[0,-17.121],[17.121,0],[0,17.121]],"o":[[17.121,0],[0,17.121],[-17.121,0],[0,-17.121]],"v":[[0,-31],[31,0],[0,31],[-31,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[0,1,0.977,0.349,0.5,1,0.971,0.175,1,1,0.965,0,0.228,0,0.301,0,0.375,0,0.427,0.5,0.48,1,0.707,0.5,0.935,0,0.968,0,1,0]},{"t":92,"s":[0,1,0.977,0.349,0.5,1,0.971,0.175,1,1,0.965,0,0.585,0,0.641,0,0.697,0,0.787,0.5,0.877,1,0.922,0.5,0.967,0,0.984,0,1,0]}]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[28.25,-0.202]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-116,-87]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":61,"op":92,"st":38,"bm":0},{"ddd":0,"ind":46,"ty":4,"nm":"Splash 1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[100]},{"t":73,"s":[0]}]},"r":{"a":0,"k":-86},"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[33,65,0]},"s":{"a":0,"k":[96,96,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-236.98,110.536],[19.577,58.91]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[1,1,1,1]},{"t":70,"s":[1,0.927058620079,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[40]},{"t":74,"s":[6]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[55,50.5]},"a":{"a":0,"k":[16.5,63]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":156.108},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-248.641,222.266],[-2.152,75.418]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[1,1,1,1]},{"t":70,"s":[1,0.927058620079,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[40]},{"t":74,"s":[6]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[25,70]},"a":{"a":0,"k":[16.5,63]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":334.031},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-226.049,-26.349],[-9.319,46.459]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[1,1,1,1]},{"t":70,"s":[1,0.927058620079,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[40]},{"t":74,"s":[6]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[36.5,60]},"a":{"a":0,"k":[16.5,63]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":232.385},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-235.78,15.937],[-14.93,57.289]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[1,1,1,1]},{"t":70,"s":[1,0.927058620079,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[40]},{"t":74,"s":[6]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[30,65]},"a":{"a":0,"k":[16.5,63]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":57.723},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-217.719,48.33],[10.663,66.502]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[1,1,1,1]},{"t":70,"s":[1,0.927058620079,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[40]},{"t":74,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[10,61.5]},"a":{"a":0,"k":[16.5,63]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":6.451},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[58.154]},{"t":74,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[23]},{"t":74,"s":[0]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[29.216,56.11]},"a":{"a":0,"k":[29.216,56.11]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-24.301,0],[0,-24.301],[24.301,0],[0,24.301]],"o":[[24.301,0],[0,24.301],[-24.301,0],[0,-24.301]],"v":[[0,-44],[44,0],[0,44],[-44,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[1,1,1,1]},{"t":70,"s":[1,0.927058620079,0,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.359],"y":[1]},"o":{"x":[0.108],"y":[0.288]},"t":62,"s":[18.573]},{"t":74,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[33,65]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.348,0.348],"y":[0.917,0.917]},"o":{"x":[0.104,0.104],"y":[0.237,0.237]},"t":62,"s":[127.325,127.325]},{"t":74,"s":[342.605,342.605]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":62,"op":75,"st":-7,"bm":0}]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/star_reaction_effect2.json b/TMessagesProj/src/main/res/raw/star_reaction_effect2.json new file mode 100644 index 00000000000..36922059dc7 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/star_reaction_effect2.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":0,"op":83,"w":512,"h":512,"nm":"REACTION MAIN","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 19 :M","sr":1,"ks":{"r":{"a":0,"k":20},"p":{"a":1,"k":[{"i":{"x":0.67,"y":0.92},"o":{"x":0.167,"y":0.167},"t":47,"s":[356,346.789,0],"to":[0,0,0],"ti":[-2.5,0.5,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.523,"y":0.076},"t":57,"s":[364.5,278.289,0],"to":[2,1.5,0],"ti":[0,0,0]},{"t":80,"s":[378,588.789,0]}]},"a":{"a":0,"k":[244.221,244.32,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.2,0.2,0.2],"y":[0,0,0]},"t":67,"s":[55,55,100]},{"t":80,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[-3.392,2.471],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[5.3,-3.862],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114],[-14.457,-4.833],[34.539,-1.255],[48.7,-7.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[{"i":[[3.035,-13.085],[0,0],[0.745,-0.064],[0,0],[-2.983,-4.02],[0,0],[-0.077,-0.152],[-0.076,-0.395],[0.039,-0.481],[0.018,-0.117],[0,0],[-4.116,3.683],[0,0],[-0.639,-0.718],[0,0],[0.943,6.329],[0,0],[2.724,3.411],[-0.41,0.55],[-0.965,0.062],[-1.026,1.582],[-0.907,6.191],[2.027,1.531],[0,0],[0.269,1.173],[0,0]],"o":[[0,0],[-0.273,1.164],[0,0],[-5.205,0.347],[0,0],[0.095,0.128],[0.163,0.322],[0.087,0.451],[-0.01,0.118],[0,0],[-0.373,7.597],[0,0],[0.64,-0.714],[0,0],[6.157,7.187],[0,0],[-0.053,-0.354],[-3.174,-3.317],[0,0],[1.772,-1.273],[2.925,-4.509],[0.907,-6.191],[0,0],[-0.747,-0.07],[0,0],[-2.918,-11.089]],"v":[[-22.9,-74.648],[-31.289,-39.185],[-32.961,-37.17],[-46.386,-35.154],[-51.392,-20.48],[-40.53,-2.937],[-40.271,-2.515],[-39.91,-1.429],[-39.836,-0.015],[-39.877,0.337],[-40.171,49.932],[-27.33,59.465],[-13.006,45.537],[-10.893,45.544],[0.287,58.062],[16.785,52.701],[17.127,35.359],[14.578,18.604],[-30.214,-10.142],[17.42,-1.111],[21.625,-3.986],[27.343,-20.059],[23.514,-33.21],[9.502,-35.884],[7.731,-39.676],[-1.634,-75.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-30.747,-43.449],[-31.991,-40.419],[-35.975,-35.621],[-44.261,-23.835],[-39.557,-6.216],[-39.608,-5.341],[-39.506,-2.731],[-39.228,-1.169],[-39.18,-0.768],[-34.234,42.543],[-27.18,57.061],[-22.29,56.831],[-12.971,52.329],[4.095,58.455],[10.543,46.504],[13.674,20.655],[5.979,9.384],[-33.086,-5.287],[6.96,-4.373],[15.22,-3.82],[20.956,-16.917],[18.194,-29.107],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.075,-4],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.137],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.841,-71.667],[-30.598,-48.03],[-31.598,-44.662],[-33.392,-38.015],[-36.681,-26.546],[-38.998,-15.793],[-39.168,-14.767],[-39.173,-11.649],[-38.832,-10.038],[-38.752,-9.621],[-26.961,41.797],[-20.131,57.14],[-13.014,62.135],[-8.762,62.463],[-1.101,57.204],[5.102,41.219],[12.561,4.516],[14.321,-5.453],[-32.574,-7.85],[14.347,-4.92],[13.968,-8.596],[13.061,-19.55],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.007,-72.489]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[{"i":[[2.867,-11.635],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[3.742,-0.843],[-0.018,-0.143],[0,0],[-1.962,-2.38],[0,0],[-1.071,0.385],[-1.966,4.542],[-0.515,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-8.377,0.771],[0,0],[1.313,8.157],[1.531,3.832],[0.8,0.74],[0,0],[2.413,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.024,-74.615],[-34.136,-39.584],[-35.618,-34.861],[-37.94,-26.25],[-40.713,-10.277],[-39.208,-8.124],[-37.889,-6.295],[10.013,-9.728],[-29.747,2.313],[-36.547,16.105],[-28.689,41.028],[-22.142,55.226],[-12.744,61.569],[-9.643,61.924],[0.504,55.597],[8.25,37.797],[14.603,13.473],[15.837,3.944],[16.118,2.896],[16.533,2.568],[16.77,-1.335],[17.578,-11.801],[13.905,-28.924],[10.644,-37.545],[9.621,-40.636],[-0.313,-75.334]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":60,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-6.287,3.706],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-50.088,-31.706],[-53.307,-15.22],[-44.693,-4.612],[-35.375,-1.927],[5.156,-7.578],[-30.858,9.81],[-38.622,22.197],[-37.424,50.242],[-30.017,60.028],[-13.248,49.784],[-9.232,50],[8.963,55.99],[16.73,43.016],[17.613,12.676],[17.014,6.749],[17.416,2.609],[17.932,1.028],[20.076,-3.199],[28.015,-16.352],[24.301,-32.703],[12.67,-36.178],[11.468,-38.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":66,"s":[{"i":[[2.181,-6.477],[0,0],[1.113,-0.066],[0,0],[-4.354,-4.204],[0,0],[-6.13,-0.044],[0,0],[4.229,-3.255],[0.037,-0.175],[0,0],[-4.738,3.778],[0,0],[-0.933,-0.751],[0,0],[1.371,6.617],[0,0],[-0.029,0.367],[-0.6,0.575],[0,0],[0,0],[0,0],[5.57,0.379],[0,0],[0.4,1.227],[0,0]],"o":[[0,0],[-0.409,1.217],[0,0],[-5.581,0.336],[0,0],[0.163,0.157],[5.669,0.041],[0,0],[-7.941,6.113],[0,0],[-1.408,6.613],[0,0],[0.936,-0.746],[0,0],[4.718,3.8],[0,0],[-0.077,-0.371],[0.069,-0.887],[0,0],[0,0],[0,0],[4.358,-4.179],[0,0],[-1.117,-0.074],[0,0],[-2.124,-6.503]],"v":[[-18.772,-81.723],[-34.464,-40.553],[-36.965,-38.447],[-72.152,-35.55],[-75.659,-22.577],[-60.91,-5.027],[-47.913,1.014],[-9.379,-4.887],[-41.389,17.091],[-51.365,32.435],[-56.334,56.501],[-43.129,63.053],[-12.983,38.886],[-9.897,38.894],[18.242,62.525],[31.981,56.788],[26.833,8.615],[26.763,7.5],[27.795,5.205],[30.078,2.803],[34.683,-2.04],[53.392,-22.253],[49.94,-35.238],[13.833,-39.105],[11.339,-41.241],[-4.139,-81.149]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":71,"s":[{"i":[[2.223,-6.477],[0,0],[1.134,-0.066],[0,0],[-5.103,-4.204],[0,0],[-7.185,-0.044],[0,0],[4.956,-3.255],[0.044,-0.175],[0,0],[-5.553,3.778],[0,0],[-1.094,-0.751],[0,0],[1.607,6.617],[0,0],[-0.033,0.367],[-0.703,0.575],[0,0],[0,0],[0,0],[6.528,0.379],[0,0],[0.408,1.227],[0,0]],"o":[[0,0],[-0.417,1.217],[0,0],[-6.541,0.336],[0,0],[0.191,0.157],[6.644,0.041],[0,0],[-9.307,6.113],[0,0],[-1.65,6.613],[0,0],[1.097,-0.746],[0,0],[5.53,3.8],[0,0],[-0.09,-0.371],[0.081,-0.887],[0,0],[0,0],[0,0],[5.107,-4.179],[0,0],[-1.138,-0.074],[0,0],[-2.164,-6.503]],"v":[[-18.33,-80.973],[-36.027,-41.803],[-38.575,-39.697],[-82.549,-34.8],[-85.91,-22.077],[-66.874,-5.027],[-53.015,0.389],[-8.927,-4.887],[-46.443,17.091],[-58.135,32.435],[-62.46,54.251],[-50.878,62.053],[-14.107,38.636],[-10.489,38.644],[28.427,62.025],[39.548,54.038],[31.186,9.865],[31.104,8.75],[32.314,6.455],[34.99,4.053],[40.386,-0.79],[63.893,-21.503],[59.847,-34.488],[15.75,-38.855],[13.209,-40.991],[-4.716,-80.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-2.446,-6.196],[0,0],[-1.248,-0.063],[0,0],[4.993,-4.022],[0,0],[0.129,-0.152],[0.127,-0.395],[-0.067,-0.481],[-0.03,-0.117],[0,0],[5.434,3.614],[0,0],[1.07,-0.718],[0,0],[-1.573,6.33],[-0.901,2.803],[-4.74,3.381],[0.688,0.55],[5.745,0.308],[3.389,2.471],[0,0],[-6.388,0.362],[0,0],[-0.448,1.173],[0,0]],"o":[[0,0],[0.459,1.164],[0,0],[6.401,0.321],[0,0],[-0.159,0.128],[-0.273,0.322],[-0.145,0.451],[0.016,0.118],[0,0],[1.615,6.326],[0,0],[-1.073,-0.713],[0,0],[-5.412,3.635],[0,0],[1.413,-4.394],[1.825,-1.302],[0,0],[-7.973,-1.028],[-5.296,-3.862],[-4.998,-3.998],[0,0],[1.252,-0.071],[0,0],[2.381,-6.221]],"v":[[-5.247,-80.804],[12.866,-40.968],[15.67,-38.954],[58.984,-34.482],[63.007,-22.073],[30.978,6.216],[30.545,6.638],[29.942,7.725],[29.819,9.139],[29.888,9.491],[38.835,53.575],[27.99,61.278],[-10.052,38.242],[-13.592,38.25],[-51.574,61.49],[-62.458,53.85],[-58.162,31.43],[-47.919,18.184],[-9.558,-4.833],[-55.946,0.583],[-70.036,-6.513],[-87.015,-21.762],[-83.056,-34.184],[-39.181,-38.983],[-36.385,-41.027],[-18.851,-80.734]],"c":true}]},{"t":81,"s":[{"i":[[-3.127,-13.085],[0,0],[-0.768,-0.064],[0,0],[3.073,-4.02],[0,0],[0.079,-0.152],[0.078,-0.395],[-0.041,-0.481],[-0.018,-0.117],[0,0],[4.241,3.683],[0,0],[0.659,-0.718],[0,0],[-0.972,6.329],[0,0],[-2.807,3.411],[0.423,0.551],[0.994,0.062],[1.057,1.582],[0.934,6.191],[-2.089,1.531],[0,0],[-0.277,1.173],[0,0]],"o":[[0,0],[0.281,1.164],[0,0],[5.362,0.347],[0,0],[-0.098,0.128],[-0.168,0.322],[-0.089,0.451],[0.01,0.118],[0,0],[0.385,7.597],[0,0],[-0.66,-0.714],[0,0],[-6.343,7.187],[0,0],[0.054,-0.354],[3.27,-3.317],[0,0],[-1.825,-1.273],[-3.014,-4.509],[-0.934,-6.191],[0,0],[0.77,-0.07],[0,0],[3.006,-11.089]],"v":[[-0.427,-74.648],[8.215,-39.185],[9.939,-37.17],[22.27,-35.154],[27.427,-20.48],[17.736,-2.937],[17.47,-2.515],[17.098,-1.429],[17.021,-0.015],[17.063,0.337],[18.116,49.682],[4.137,59.465],[-10.621,45.537],[-12.798,45.544],[-24.316,58.062],[-41.313,52.701],[-41.6,32.109],[-38.974,15.354],[-25.076,-3.142],[-41.902,-4.361],[-46.234,-7.236],[-52.191,-20.059],[-48.246,-33.21],[-33.81,-35.884],[-31.986,-39.676],[-22.337,-75.121]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.819607843137,0.521568627451,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.195,1,1,1,0.45,1,0.945,0.671,0.705,1,0.89,0.341,0.853,0.988,0.804,0.222,1,0.976,0.718,0.102]}},"s":{"a":0,"k":[-29.383,-83.036]},"e":{"a":0,"k":[-11.25,17]},"t":1,"nm":"Gradient Fill 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[243.876,244.742]},"a":{"a":0,"k":[243.876,244.742]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":47,"op":79,"st":20,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 6 :M","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[33]},{"t":87,"s":[-44]}]},"p":{"a":1,"k":[{"i":{"x":0.14,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[344.409,365.398,0],"to":[-126.432,-9.795,0],"ti":[0,0,0]},{"t":94,"s":[154.125,454.17,0]}]},"a":{"a":0,"k":[245.677,245.967,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":76,"s":[38,38,100]},{"t":87,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":39,"s":[{"i":[[2.448,-6.196],[0,0],[0,0],[0.488,-0.35],[0.625,-0.032],[0,0],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[8.812,3.695],[-0.974,0.778],[0,0],[-5.794,2.04],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[0,0],[-0.23,0.582],[-0.488,0.35],[0,0],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[0,0],[-2.116,-0.888],[0,0],[0,0],[6.535,-2.3],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-27.836,-60.886],[-36.9,-40.968],[-38.007,-39.548],[-39.707,-38.954],[-61.382,-36.718],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.598,32.677],[23.063,17.68],[-13.832,-4.832],[28.999,-1.867],[41.215,-3.575],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[3.187,-12.4],[0,0],[0,0],[0.328,-0.35],[0.419,-0.032],[0,0],[0,0],[-3.355,-4.022],[0,0],[0.208,-1.211],[0,0],[-4.504,3.673],[0,0],[-0.719,-0.718],[0,0],[1.057,6.33],[0,0],[5.998,3.025],[-0.654,0.778],[0,0],[-5.947,3.537],[0,0],[5.262,1.288],[0,0],[0.301,1.173],[0,0]],"o":[[0,0],[0,0],[-0.154,0.582],[-0.328,0.35],[0,0],[0,0],[-5.65,0.341],[0,0],[0.654,0.784],[0,0],[-0.515,7.471],[0,0],[0.721,-0.713],[0,0],[6.482,6.839],[0,0],[0,0],[-0.957,-1.063],[0,0],[0,0],[4.946,-2.942],[1.983,-5.363],[0,0],[-0.841,-0.071],[0,0],[-3.05,-10.609]],"v":[[-20.671,-76.168],[-26.82,-57.887],[-32.968,-39.605],[-33.711,-38.185],[-34.852,-37.59],[-46.317,-36.24],[-57.782,-34.891],[-62.544,-21.459],[-44.265,1.58],[-43.532,4.855],[-47.798,51.394],[-36.02,60.528],[-13.422,42.333],[-11.043,42.341],[11.083,59.99],[23.761,51.259],[22.165,28.554],[16.127,17.225],[-24.827,-7.912],[17.028,-3.118],[29.554,-5.683],[38.392,-19.012],[33.547,-33.15],[10.365,-36.881],[8.487,-38.924],[-3.109,-76.575]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[4.346,-17.571],[0,0],[0,0],[0.095,-0.334],[0.062,-0.032],[0,0],[0,0],[0.383,-4.034],[0,0],[0.158,-1.211],[0,0],[-5.494,-0.028],[0,0],[-0.549,-0.718],[0,0],[-1.852,4.025],[0,0],[0,0],[-0.499,0.778],[0,0],[0,0],[0,0],[1.466,4.309],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[0,0],[-0.023,0.582],[-0.095,0.334],[0,0],[0,0],[-0.319,1.045],[0,0],[0.499,0.784],[0,0],[0.315,8.425],[0,0],[0.55,-0.713],[0,0],[5.101,-1.928],[0,0],[0,0],[-0.154,-1.21],[0,0],[0,0],[0,0],[0.01,-4.748],[0,0],[-0.642,-0.071],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-27.799,-55.386],[-31.876,-38.468],[-32.079,-37.08],[-32.341,-36.517],[-32.511,-35.437],[-32.681,-34.357],[-35.881,-22.129],[-39.163,-7.284],[-38.604,-4.009],[-24.815,46.575],[-10.631,61.028],[-11.577,60.992],[-9.762,61],[-7.726,60.74],[3.477,46.1],[11.183,17.951],[14.785,-5.07],[-30.65,-7.458],[14.904,-5.515],[15.045,-6.941],[14.089,-18.137],[10.659,-31.184],[9.172,-35.983],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":51,"s":[{"i":[[2.671,-11.635],[0,0],[0.366,-0.557],[0,0],[-0.948,-3.012],[0,0],[-0.384,-0.181],[-0.064,-0.3],[3.486,-0.843],[-0.017,-0.143],[0,0],[-1.827,-2.38],[0,0],[-0.998,0.385],[-1.831,4.542],[-0.48,5.854],[0,0],[-0.042,0.307],[-0.104,0.457],[0,0],[0,0],[0,0],[1.022,1.957],[0,0],[0.215,1.191],[0,0]],"o":[[0,0],[-0.242,1.181],[0,0],[-2.561,6.177],[0,0],[0.029,0.188],[0.378,0.376],[0.072,0.342],[-7.803,0.771],[0,0],[1.223,8.157],[1.427,3.832],[0.745,0.74],[0,0],[2.248,-4.049],[0,0],[0.149,-0.914],[0.1,-0.742],[0,0],[0,0],[0,0],[-0.284,-5.629],[0,0],[-0.43,-0.814],[0,0],[-3.664,-13.582]],"v":[[-22.573,-74.615],[-32.675,-40.084],[-34.055,-35.361],[-36.469,-26.75],[-38.552,-10.277],[-37.15,-8.124],[-35.921,-6.295],[8.703,-9.728],[-28.336,2.313],[-34.671,16.105],[-27.35,41.028],[-21.252,55.226],[-12.497,61.569],[-9.609,61.924],[-0.156,55.597],[7.06,37.797],[12.979,13.473],[14.128,3.944],[14.39,2.896],[14.776,2.569],[14.997,-1.335],[15.75,-11.801],[12.328,-28.924],[10.54,-37.795],[9.588,-40.886],[0.083,-74.334]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-6.287,3.706],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-50.088,-31.706],[-53.307,-15.22],[-44.693,-4.612],[-35.375,-1.927],[5.156,-7.578],[-30.858,9.81],[-38.622,22.197],[-37.424,50.242],[-30.017,60.028],[-13.248,49.784],[-9.232,50],[8.963,55.99],[16.73,43.016],[17.613,12.676],[17.014,6.749],[17.416,2.609],[17.932,1.028],[20.076,-3.199],[28.015,-16.352],[24.301,-32.703],[12.67,-36.178],[11.468,-38.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":59,"s":[{"i":[[2.181,-6.379],[0,0],[1.113,-0.065],[0,0],[-4.354,-4.141],[0,0],[-6.13,-0.044],[0,0],[4.229,-3.206],[0.037,-0.173],[0,0],[-4.738,3.721],[0,0],[-0.933,-0.739],[0,0],[1.371,6.517],[0,0],[-0.029,0.362],[-0.6,0.566],[0,0],[0,0],[0,0],[5.57,0.373],[0,0],[0.4,1.208],[0,0]],"o":[[0,0],[-0.409,1.198],[0,0],[-5.581,0.33],[0,0],[0.163,0.155],[5.669,0.04],[0,0],[-7.941,6.02],[0,0],[-1.408,6.513],[0,0],[0.936,-0.734],[0,0],[4.718,3.742],[0,0],[-0.077,-0.365],[0.069,-0.873],[0,0],[0,0],[0,0],[4.358,-4.116],[0,0],[-1.117,-0.073],[0,0],[-2.124,-6.404]],"v":[[-18.772,-81.309],[-34.464,-40.761],[-36.965,-38.687],[-72.152,-35.833],[-75.659,-23.057],[-60.91,-5.772],[-47.913,0.178],[-9.379,-5.634],[-41.389,16.012],[-51.365,31.124],[-56.334,54.826],[-43.129,61.279],[-12.983,37.477],[-9.897,37.486],[18.242,60.759],[31.981,55.109],[26.833,7.663],[26.763,6.566],[27.795,4.305],[30.078,1.94],[34.683,-2.83],[53.392,-22.738],[49.94,-35.526],[13.833,-39.335],[11.339,-41.439],[-4.139,-80.743]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":64,"s":[{"i":[[2.223,-6.477],[0,0],[1.134,-0.066],[0,0],[-5.103,-4.204],[0,0],[-7.185,-0.044],[0,0],[4.956,-3.255],[0.044,-0.175],[0,0],[-5.553,3.778],[0,0],[-1.094,-0.751],[0,0],[1.607,6.617],[0,0],[-0.033,0.367],[-0.703,0.575],[0,0],[0,0],[0,0],[6.528,0.379],[0,0],[0.408,1.227],[0,0]],"o":[[0,0],[-0.417,1.217],[0,0],[-6.541,0.336],[0,0],[0.191,0.157],[6.644,0.041],[0,0],[-9.307,6.113],[0,0],[-1.65,6.613],[0,0],[1.097,-0.746],[0,0],[5.53,3.8],[0,0],[-0.09,-0.371],[0.081,-0.887],[0,0],[0,0],[0,0],[5.107,-4.179],[0,0],[-1.138,-0.074],[0,0],[-2.164,-6.503]],"v":[[-18.33,-80.973],[-36.027,-41.803],[-38.575,-39.697],[-82.549,-34.8],[-85.91,-22.077],[-66.874,-5.027],[-53.015,0.389],[-8.927,-4.887],[-46.443,17.091],[-58.135,32.435],[-62.46,54.251],[-50.878,62.053],[-14.107,38.636],[-10.489,38.644],[28.427,62.025],[39.548,54.038],[31.186,9.865],[31.104,8.75],[32.314,6.455],[34.99,4.053],[40.386,-0.79],[63.893,-21.503],[59.847,-34.488],[15.75,-38.855],[13.209,-40.991],[-4.716,-80.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[-2.4,-6.213],[0,0],[0,0],[-0.485,-0.354],[-0.623,-0.036],[0,0],[0,0],[5.022,-3.986],[0,0],[-0.3,-1.213],[0,0],[5.407,3.653],[0,0],[1.075,-0.71],[0,0],[-1.618,6.319],[0,0],[-8.829,3.631],[0.967,0.785],[0,0],[5.895,3.993],[0,0],[-6.389,0.316],[0,0],[-0.457,1.17],[0,0]],"o":[[0,0],[0,0],[0.225,0.584],[0.485,0.354],[0,0],[0,0],[6.397,0.368],[0,0],[-0.978,0.777],[0,0],[1.568,6.338],[0,0],[-1.068,-0.721],[0,0],[-5.437,3.595],[0,0],[0,0],[2.121,-0.872],[0,0],[0,0],[-5.731,-3.881],[-4.968,-4.034],[0,0],[1.252,-0.062],[0,0],[2.426,-6.203]],"v":[[-3.989,-80.753],[4.921,-60.77],[13.83,-40.786],[14.926,-39.358],[16.619,-38.752],[38.255,-36.358],[59.892,-33.964],[63.824,-21.525],[31.594,6.529],[30.481,9.796],[39.105,53.944],[28.206,61.568],[-9.661,38.255],[-13.201,38.237],[-51.345,61.2],[-62.171,53.48],[-58.632,32.333],[-46.499,17.423],[-9.477,-4.819],[-53.179,0.328],[-64.477,-3.963],[-86.172,-22.309],[-82.123,-34.701],[-38.221,-39.18],[-35.411,-41.204],[-17.591,-80.782]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[-3.163,-12.4],[0,0],[0,0],[-0.325,-0.35],[-0.416,-0.032],[0,0],[0,0],[3.33,-4.022],[0,0],[-0.206,-1.211],[0,0],[4.47,3.673],[0,0],[0.714,-0.718],[0,0],[-1.049,6.33],[0,0],[-5.953,3.025],[0.649,0.778],[0,0],[5.902,3.537],[0,0],[-5.222,1.288],[0,0],[-0.299,1.173],[0,0]],"o":[[0,0],[0,0],[0.153,0.582],[0.325,0.35],[0,0],[0,0],[5.607,0.341],[0,0],[-0.649,0.784],[0,0],[0.511,7.471],[0,0],[-0.716,-0.713],[0,0],[-6.434,6.839],[0,0],[0,0],[0.95,-1.064],[0,0],[0,0],[-4.909,-2.942],[-1.969,-5.363],[0,0],[0.835,-0.071],[0,0],[3.028,-10.609]],"v":[[-3.413,-76.168],[2.689,-57.887],[8.791,-39.605],[9.529,-38.185],[10.662,-37.59],[22.041,-36.24],[33.419,-34.891],[38.145,-21.459],[20.004,1.58],[19.277,4.855],[23.51,51.394],[11.82,60.528],[-10.607,42.333],[-12.968,42.341],[-34.928,59.99],[-47.511,51.259],[-45.802,29.804],[-40.809,16.1],[-19.788,-4.662],[-40.828,-3.118],[-52.01,-5.433],[-60.781,-18.762],[-55.973,-32.9],[-34.216,-36.881],[-32.351,-38.924],[-20.843,-76.575]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[-4.017,-17.571],[0,0],[0,0],[-0.098,-0.334],[-0.064,-0.032],[0,0],[0,0],[-0.395,-4.034],[0,0],[-0.164,-1.211],[0,0],[5.675,-0.028],[0,0],[0.567,-0.718],[0,0],[2.112,6.338],[0,0],[0,0],[0.515,0.778],[0,0],[0,0],[0,0],[-1.514,4.309],[0,0],[-0.238,1.173],[0,0]],"o":[[0,0],[0,0],[0.024,0.582],[0.098,0.334],[0,0],[0,0],[0.329,1.045],[0,0],[-0.515,0.784],[0,0],[-1.803,7.8],[0,0],[-0.568,-0.713],[0,0],[-5.27,-1.928],[0,0],[0,0],[0.159,-1.21],[0,0],[0,0],[0,0],[1.002,-4.641],[0,0],[0.663,-0.071],[0,0],[3.814,-14.266]],"v":[[-1.5,-72.304],[3.736,-55.386],[8.972,-38.468],[9.182,-37.08],[9.453,-36.517],[9.629,-35.437],[9.805,-34.357],[12.61,-22.129],[15.125,-11.534],[15.298,-5.384],[0.928,48.263],[-13.725,61.028],[-12.748,60.992],[-14.622,61],[-16.726,60.74],[-27.549,48.225],[-36.26,17.951],[-39.981,-5.07],[-40.294,-6.458],[-40.104,-5.515],[-40.25,-6.941],[-39.456,-18.191],[-36.219,-31.184],[-34.557,-36.108],[-33.735,-38.902],[-23.541,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[-2.383,-11.635],[0,0],[-0.374,-0.557],[0,0],[-0.281,-3.723],[0,0],[0.392,-0.181],[0.065,-0.3],[0,0],[0.018,-0.143],[0,0],[1.869,-2.38],[0,0],[1.02,0.385],[1.873,4.542],[0.491,5.854],[0,0],[0.043,0.307],[0.107,0.457],[0,0],[0,0],[0,0],[-1.045,1.957],[0,0],[-0.22,1.191],[0,0]],"o":[[0,0],[0.248,1.181],[0,0],[1.6,6.438],[0,0],[-0.03,0.188],[0.035,1.045],[-0.074,0.342],[0,0],[0,0],[-1.25,8.157],[-1.459,3.832],[-0.762,0.74],[0,0],[-2.298,-4.049],[0,0],[-0.153,-0.914],[-0.103,-0.742],[0,0],[0,0],[0,0],[0.29,-5.629],[0,0],[0.439,-0.814],[0,0],[3.268,-13.582]],"v":[[-2.539,-74.615],[9.27,-40.084],[10.682,-35.361],[13.15,-26.75],[14.906,-11.714],[15.347,-8.249],[15.34,-6.42],[11.676,-2.54],[14.209,3.251],[11.312,16.105],[3.826,41.028],[-2.411,55.226],[-11.364,61.569],[-14.318,61.924],[-23.985,55.597],[-31.364,37.797],[-37.416,13.473],[-38.592,3.944],[-38.859,2.896],[-39.254,2.569],[-39.48,-1.335],[-40.25,-11.801],[-36.75,-28.924],[-34.922,-37.795],[-33.948,-40.886],[-22.75,-74.334]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":79,"s":[{"i":[[-3.703,-13.779],[0,0],[-0.605,-0.427],[0,0],[1.609,-4.042],[0,0],[2.371,-0.144],[0,0],[-1.54,-1.405],[0.003,-0.148],[0,0],[3.349,-1.11],[0,0],[1.345,0.052],[1.979,2.743],[0.126,5.127],[0,0],[0.134,0.922],[0.335,1.371],[0,0],[0,0],[0,0],[-1.979,1.535],[0,0],[-0.234,1.173],[0,0]],"o":[[0,0],[0.309,1.164],[0,0],[6.269,3.706],[0,0],[-0.093,0.176],[-2.23,0.288],[0,0],[7.416,4.73],[0,0],[-0.918,6.517],[-1.541,2.315],[-1.073,0.268],[0,0],[-3.779,-1.532],[0,0],[0.062,-0.767],[-0.323,-2.225],[0,0],[0,0],[0,0],[-2.495,-5.63],[0,0],[0.539,-0.618],[0,0],[3.535,-11.584]],"v":[[-1.313,-75.217],[10.348,-39.006],[11.946,-36.137],[24.999,-31.66],[27.833,-15.924],[20.119,-7.566],[10.078,-2.381],[0.414,-2.407],[7.449,9.731],[15.191,22.118],[13.996,50.163],[6.611,59.949],[-10.111,49.705],[-14.115,49.921],[-30.508,57.411],[-38.252,44.437],[-39.382,12.597],[-40.285,6.67],[-40.686,2.53],[-41.201,0.949],[-43.338,-3.278],[-51.255,-16.431],[-47.551,-32.782],[-35.954,-36.257],[-34.755,-39.051],[-21.691,-75.729]],"c":true}]},{"t":85,"s":[{"i":[[-2.181,-6.379],[0,0],[-1.113,-0.065],[0,0],[4.353,-4.141],[0,0],[6.129,-0.044],[0,0],[-4.228,-3.206],[-0.037,-0.173],[0,0],[4.737,3.721],[0,0],[0.933,-0.739],[0,0],[-1.371,6.517],[0,0],[0.029,0.362],[0.6,0.566],[0,0],[0,0],[0,0],[-5.568,0.373],[0,0],[-0.4,1.208],[0,0]],"o":[[0,0],[0.409,1.198],[0,0],[5.58,0.33],[0,0],[-0.163,0.155],[-5.667,0.04],[0,0],[7.94,6.02],[0,0],[1.408,6.513],[0,0],[-0.936,-0.734],[0,0],[-4.717,3.742],[0,0],[0.077,-0.365],[-0.069,-0.873],[0,0],[0,0],[0,0],[-4.357,-4.116],[0,0],[1.116,-0.073],[0,0],[2.123,-6.404]],"v":[[-4.493,-81.309],[11.197,-40.761],[13.697,-38.687],[48.877,-35.833],[52.384,-23.057],[37.637,-5.772],[24.643,0.178],[-13.884,-5.634],[18.12,16.012],[28.094,31.124],[33.062,54.826],[19.86,61.279],[-10.28,37.477],[-13.366,37.486],[-41.5,60.759],[-55.236,55.109],[-50.089,7.663],[-50.019,6.566],[-51.051,4.305],[-53.333,1.94],[-57.937,-2.83],[-76.643,-22.738],[-73.192,-35.526],[-37.091,-39.335],[-34.598,-41.439],[-19.122,-80.743]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.775163478477,0.395181394091,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.3,1,0.925,0.741,0.65,0.954,0.703,0.402,1,0.908,0.481,0.063]}},"s":{"a":0,"k":[-16.729,-98.623]},"e":{"a":0,"k":[-4.431,19.358]},"t":1,"nm":"Gradient Fill 3","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[257.144,257.305]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[95,95]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 772","bm":0,"hd":false}],"ip":45,"op":86,"st":13,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 6 :M 2","sr":1,"ks":{"r":{"a":0,"k":-18},"p":{"a":1,"k":[{"i":{"x":0.28,"y":0.932},"o":{"x":0.167,"y":0.167},"t":44,"s":[347.75,323.75,0],"to":[21,-149,0],"ti":[0,0,0]},{"t":86,"s":[506.25,197.25,0]}]},"a":{"a":0,"k":[245.677,245.967,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":68,"s":[44,44,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[{"i":[[2.448,-6.196],[0,0],[0,0],[0.488,-0.35],[0.625,-0.032],[0,0],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[8.812,3.695],[-0.974,0.778],[0,0],[-5.794,2.04],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[0,0],[-0.23,0.582],[-0.488,0.35],[0,0],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[0,0],[-2.116,-0.888],[0,0],[0,0],[6.535,-2.3],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-27.836,-60.886],[-36.9,-40.968],[-38.007,-39.548],[-39.707,-38.954],[-61.382,-36.718],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.598,32.677],[23.063,17.68],[-13.832,-4.832],[28.999,-1.867],[41.215,-3.575],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[{"i":[[3.187,-12.4],[0,0],[0,0],[0.328,-0.35],[0.419,-0.032],[0,0],[0,0],[-3.355,-4.022],[0,0],[0.208,-1.211],[0,0],[-4.504,3.673],[0,0],[-0.719,-0.718],[0,0],[1.057,6.33],[0,0],[5.998,3.025],[-0.654,0.778],[0,0],[-5.947,3.537],[0,0],[5.262,1.288],[0,0],[0.301,1.173],[0,0]],"o":[[0,0],[0,0],[-0.154,0.582],[-0.328,0.35],[0,0],[0,0],[-5.65,0.341],[0,0],[0.654,0.784],[0,0],[-0.515,7.471],[0,0],[0.721,-0.713],[0,0],[6.482,6.839],[0,0],[0,0],[-0.957,-1.063],[0,0],[0,0],[4.946,-2.942],[1.983,-5.363],[0,0],[-0.841,-0.071],[0,0],[-3.05,-10.609]],"v":[[-20.671,-76.168],[-26.82,-57.887],[-32.968,-39.605],[-33.711,-38.185],[-34.852,-37.59],[-46.317,-36.24],[-57.782,-34.891],[-62.544,-21.459],[-44.265,1.58],[-43.532,4.855],[-47.798,51.394],[-36.02,60.528],[-13.422,42.333],[-11.043,42.341],[11.083,59.99],[23.761,51.259],[22.165,28.554],[16.127,17.225],[-24.827,-7.912],[17.028,-3.118],[29.554,-5.683],[38.392,-19.012],[33.547,-33.15],[10.365,-36.881],[8.487,-38.924],[-3.109,-76.575]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[{"i":[[4.346,-17.571],[0,0],[0,0],[0.095,-0.334],[0.062,-0.032],[0,0],[0,0],[0.383,-4.034],[0,0],[0.158,-1.211],[0,0],[-5.494,-0.028],[0,0],[-0.549,-0.718],[0,0],[-1.852,4.025],[0,0],[0,0],[-0.499,0.778],[0,0],[0,0],[0,0],[1.466,4.309],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[0,0],[-0.023,0.582],[-0.095,0.334],[0,0],[0,0],[-0.319,1.045],[0,0],[0.499,0.784],[0,0],[0.315,8.425],[0,0],[0.55,-0.713],[0,0],[5.101,-1.928],[0,0],[0,0],[-0.154,-1.21],[0,0],[0,0],[0,0],[0.01,-4.748],[0,0],[-0.642,-0.071],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-27.799,-55.386],[-31.876,-38.468],[-32.079,-37.08],[-32.341,-36.517],[-32.511,-35.437],[-32.681,-34.357],[-35.881,-22.129],[-39.163,-7.284],[-38.604,-4.009],[-24.815,46.575],[-10.631,61.028],[-11.577,60.992],[-9.762,61],[-7.726,60.74],[3.477,46.1],[11.183,17.951],[14.785,-5.07],[-30.65,-7.458],[14.904,-5.515],[15.045,-6.941],[14.089,-18.137],[10.659,-31.184],[9.172,-35.983],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[2.671,-11.635],[0,0],[0.366,-0.557],[0,0],[-0.948,-3.012],[0,0],[-0.384,-0.181],[-0.064,-0.3],[3.486,-0.843],[-0.017,-0.143],[0,0],[-1.827,-2.38],[0,0],[-0.998,0.385],[-1.831,4.542],[-0.48,5.854],[0,0],[-0.042,0.307],[-0.104,0.457],[0,0],[0,0],[0,0],[1.022,1.957],[0,0],[0.215,1.191],[0,0]],"o":[[0,0],[-0.242,1.181],[0,0],[-2.561,6.177],[0,0],[0.029,0.188],[0.378,0.376],[0.072,0.342],[-7.803,0.771],[0,0],[1.223,8.157],[1.427,3.832],[0.745,0.74],[0,0],[2.248,-4.049],[0,0],[0.149,-0.914],[0.1,-0.742],[0,0],[0,0],[0,0],[-0.284,-5.629],[0,0],[-0.43,-0.814],[0,0],[-3.664,-13.582]],"v":[[-22.573,-74.615],[-32.675,-40.084],[-34.055,-35.361],[-36.469,-26.75],[-38.552,-10.277],[-37.15,-8.124],[-35.921,-6.295],[8.703,-9.728],[-28.336,2.313],[-34.671,16.105],[-27.35,41.028],[-21.252,55.226],[-12.497,61.569],[-9.609,61.924],[-0.156,55.597],[7.06,37.797],[12.979,13.473],[14.128,3.944],[14.39,2.896],[14.776,2.569],[14.997,-1.335],[15.75,-11.801],[12.328,-28.924],[10.54,-37.795],[9.588,-40.886],[0.083,-74.334]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-6.287,3.706],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-50.088,-31.706],[-53.307,-15.22],[-44.693,-4.612],[-35.375,-1.927],[5.156,-7.578],[-30.858,9.81],[-38.622,22.197],[-37.424,50.242],[-30.017,60.028],[-13.248,49.784],[-9.232,50],[8.963,55.99],[16.73,43.016],[17.613,12.676],[17.014,6.749],[17.416,2.609],[17.932,1.028],[20.076,-3.199],[28.015,-16.352],[24.301,-32.703],[12.67,-36.178],[11.468,-38.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":62,"s":[{"i":[[2.181,-6.379],[0,0],[1.113,-0.065],[0,0],[-4.354,-4.141],[0,0],[-6.13,-0.044],[0,0],[4.229,-3.206],[0.037,-0.173],[0,0],[-4.738,3.721],[0,0],[-0.933,-0.739],[0,0],[1.371,6.517],[0,0],[-0.029,0.362],[-0.6,0.566],[0,0],[0,0],[0,0],[5.57,0.373],[0,0],[0.4,1.208],[0,0]],"o":[[0,0],[-0.409,1.198],[0,0],[-5.581,0.33],[0,0],[0.163,0.155],[5.669,0.04],[0,0],[-7.941,6.02],[0,0],[-1.408,6.513],[0,0],[0.936,-0.734],[0,0],[4.718,3.742],[0,0],[-0.077,-0.365],[0.069,-0.873],[0,0],[0,0],[0,0],[4.358,-4.116],[0,0],[-1.117,-0.073],[0,0],[-2.124,-6.404]],"v":[[-18.772,-81.309],[-34.464,-40.761],[-36.965,-38.687],[-72.152,-35.833],[-75.659,-23.057],[-60.91,-5.772],[-47.913,0.178],[-9.379,-5.634],[-41.389,16.012],[-51.365,31.124],[-56.334,54.826],[-43.129,61.279],[-12.983,37.477],[-9.897,37.486],[18.242,60.759],[31.981,55.109],[26.833,7.663],[26.763,6.566],[27.795,4.305],[30.078,1.94],[34.683,-2.83],[53.392,-22.738],[49.94,-35.526],[13.833,-39.335],[11.339,-41.439],[-4.139,-80.743]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":67,"s":[{"i":[[2.223,-6.477],[0,0],[1.134,-0.066],[0,0],[-5.103,-4.204],[0,0],[-7.185,-0.044],[0,0],[4.956,-3.255],[0.044,-0.175],[0,0],[-5.553,3.778],[0,0],[-1.094,-0.751],[0,0],[1.607,6.617],[0,0],[-0.033,0.367],[-0.703,0.575],[0,0],[0,0],[0,0],[6.528,0.379],[0,0],[0.408,1.227],[0,0]],"o":[[0,0],[-0.417,1.217],[0,0],[-6.541,0.336],[0,0],[0.191,0.157],[6.644,0.041],[0,0],[-9.307,6.113],[0,0],[-1.65,6.613],[0,0],[1.097,-0.746],[0,0],[5.53,3.8],[0,0],[-0.09,-0.371],[0.081,-0.887],[0,0],[0,0],[0,0],[5.107,-4.179],[0,0],[-1.138,-0.074],[0,0],[-2.164,-6.503]],"v":[[-18.33,-80.973],[-36.027,-41.803],[-38.575,-39.697],[-82.549,-34.8],[-85.91,-22.077],[-66.874,-5.027],[-53.015,0.389],[-8.927,-4.887],[-46.443,17.091],[-58.135,32.435],[-62.46,54.251],[-50.878,62.053],[-14.107,38.636],[-10.489,38.644],[28.427,62.025],[39.548,54.038],[31.186,9.865],[31.104,8.75],[32.314,6.455],[34.99,4.053],[40.386,-0.79],[63.893,-21.503],[59.847,-34.488],[15.75,-38.855],[13.209,-40.991],[-4.716,-80.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[-2.4,-6.213],[0,0],[0,0],[-0.485,-0.354],[-0.623,-0.036],[0,0],[0,0],[5.022,-3.986],[0,0],[-0.3,-1.213],[0,0],[5.407,3.653],[0,0],[1.075,-0.71],[0,0],[-1.618,6.319],[0,0],[-8.829,3.631],[0.967,0.785],[0,0],[5.895,3.993],[0,0],[-6.389,0.316],[0,0],[-0.457,1.17],[0,0]],"o":[[0,0],[0,0],[0.225,0.584],[0.485,0.354],[0,0],[0,0],[6.397,0.368],[0,0],[-0.978,0.777],[0,0],[1.568,6.338],[0,0],[-1.068,-0.721],[0,0],[-5.437,3.595],[0,0],[0,0],[2.121,-0.872],[0,0],[0,0],[-5.731,-3.881],[-4.968,-4.034],[0,0],[1.252,-0.062],[0,0],[2.426,-6.203]],"v":[[-3.989,-80.753],[4.921,-60.77],[13.83,-40.786],[14.926,-39.358],[16.619,-38.752],[38.255,-36.358],[59.892,-33.964],[63.824,-21.525],[31.594,6.529],[30.481,9.796],[39.105,53.944],[28.206,61.568],[-9.661,38.255],[-13.201,38.237],[-51.345,61.2],[-62.171,53.48],[-58.632,32.333],[-46.499,17.423],[-9.477,-4.819],[-53.179,0.328],[-64.477,-3.963],[-86.172,-22.309],[-82.123,-34.701],[-38.221,-39.18],[-35.411,-41.204],[-17.591,-80.782]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[-3.163,-12.4],[0,0],[0,0],[-0.325,-0.35],[-0.416,-0.032],[0,0],[0,0],[3.33,-4.022],[0,0],[-0.206,-1.211],[0,0],[4.47,3.673],[0,0],[0.714,-0.718],[0,0],[-1.049,6.33],[0,0],[-5.953,3.025],[0.649,0.778],[0,0],[5.902,3.537],[0,0],[-5.222,1.288],[0,0],[-0.299,1.173],[0,0]],"o":[[0,0],[0,0],[0.153,0.582],[0.325,0.35],[0,0],[0,0],[5.607,0.341],[0,0],[-0.649,0.784],[0,0],[0.511,7.471],[0,0],[-0.716,-0.713],[0,0],[-6.434,6.839],[0,0],[0,0],[0.95,-1.064],[0,0],[0,0],[-4.909,-2.942],[-1.969,-5.363],[0,0],[0.835,-0.071],[0,0],[3.028,-10.609]],"v":[[-3.413,-76.168],[2.689,-57.887],[8.791,-39.605],[9.529,-38.185],[10.662,-37.59],[22.041,-36.24],[33.419,-34.891],[38.145,-21.459],[20.004,1.58],[19.277,4.855],[23.51,51.394],[11.82,60.528],[-10.607,42.333],[-12.968,42.341],[-34.928,59.99],[-47.511,51.259],[-45.802,29.804],[-40.809,16.1],[-19.788,-4.662],[-40.828,-3.118],[-52.01,-5.433],[-60.781,-18.762],[-55.973,-32.9],[-34.216,-36.881],[-32.351,-38.924],[-20.843,-76.575]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":79,"s":[{"i":[[-4.017,-17.571],[0,0],[0,0],[-0.098,-0.334],[-0.064,-0.032],[0,0],[0,0],[-0.395,-4.034],[0,0],[-0.164,-1.211],[0,0],[5.675,-0.028],[0,0],[0.567,-0.718],[0,0],[2.112,6.338],[0,0],[0,0],[0.515,0.778],[0,0],[0,0],[0,0],[-1.514,4.309],[0,0],[-0.238,1.173],[0,0]],"o":[[0,0],[0,0],[0.024,0.582],[0.098,0.334],[0,0],[0,0],[0.329,1.045],[0,0],[-0.515,0.784],[0,0],[-1.803,7.8],[0,0],[-0.568,-0.713],[0,0],[-5.27,-1.928],[0,0],[0,0],[0.159,-1.21],[0,0],[0,0],[0,0],[1.002,-4.641],[0,0],[0.663,-0.071],[0,0],[3.814,-14.266]],"v":[[-1.5,-72.304],[3.736,-55.386],[8.972,-38.468],[9.182,-37.08],[9.453,-36.517],[9.629,-35.437],[9.805,-34.357],[12.61,-22.129],[15.125,-11.534],[15.298,-5.384],[0.928,48.263],[-13.725,61.028],[-12.748,60.992],[-14.622,61],[-16.726,60.74],[-27.549,48.225],[-36.26,17.951],[-39.981,-5.07],[-40.294,-6.458],[-40.104,-5.515],[-40.25,-6.941],[-39.456,-18.191],[-36.219,-31.184],[-34.557,-36.108],[-33.735,-38.902],[-23.541,-73.109]],"c":true}]},{"t":80,"s":[{"i":[[-2.383,-11.635],[0,0],[-0.374,-0.557],[0,0],[-0.281,-3.723],[0,0],[0.392,-0.181],[0.065,-0.3],[0,0],[0.018,-0.143],[0,0],[1.869,-2.38],[0,0],[1.02,0.385],[1.873,4.542],[0.491,5.854],[0,0],[0.043,0.307],[0.107,0.457],[0,0],[0,0],[0,0],[-1.045,1.957],[0,0],[-0.22,1.191],[0,0]],"o":[[0,0],[0.248,1.181],[0,0],[1.6,6.438],[0,0],[-0.03,0.188],[0.035,1.045],[-0.074,0.342],[0,0],[0,0],[-1.25,8.157],[-1.459,3.832],[-0.762,0.74],[0,0],[-2.298,-4.049],[0,0],[-0.153,-0.914],[-0.103,-0.742],[0,0],[0,0],[0,0],[0.29,-5.629],[0,0],[0.439,-0.814],[0,0],[3.268,-13.582]],"v":[[-2.539,-74.615],[9.27,-40.084],[10.682,-35.361],[13.15,-26.75],[14.906,-11.714],[15.347,-8.249],[15.34,-6.42],[11.676,-2.54],[14.209,3.251],[11.312,16.105],[3.826,41.028],[-2.411,55.226],[-11.364,61.569],[-14.318,61.924],[-23.985,55.597],[-31.364,37.797],[-37.416,13.473],[-38.592,3.944],[-38.859,2.896],[-39.254,2.569],[-39.48,-1.335],[-40.25,-11.801],[-36.75,-28.924],[-34.922,-37.795],[-33.948,-40.886],[-22.75,-74.334]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.775163478477,0.395181394091,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.3,1,0.925,0.741,0.65,0.954,0.703,0.402,1,0.908,0.481,0.063]}},"s":{"a":0,"k":[-16.402,-105.435]},"e":{"a":0,"k":[-4.431,19.358]},"t":1,"nm":"Gradient Fill 4","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[257.144,257.305]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[95,95]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 772","bm":0,"hd":false}],"ip":44,"op":82,"st":16,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 19 :M 2","sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.24,"y":0.818},"o":{"x":0.097,"y":0.107},"t":43,"s":[350.473,365.868,0],"to":[-36.5,-162.5,0],"ti":[37.527,-102.368,0]},{"t":85,"s":[178.473,250.868,0]}]},"a":{"a":0,"k":[244.221,244.32,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":70,"s":[50,50,100]},{"t":85,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[-3.392,2.471],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[5.3,-3.862],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114],[-14.457,-4.833],[34.539,-1.255],[48.7,-7.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[3.035,-13.085],[0,0],[0.745,-0.064],[0,0],[-2.983,-4.02],[0,0],[-0.077,-0.152],[-0.076,-0.395],[0.039,-0.481],[0.018,-0.117],[0,0],[-4.116,3.683],[0,0],[-0.639,-0.718],[0,0],[0.943,6.329],[0,0],[2.724,3.411],[-0.41,0.55],[-0.965,0.062],[-1.026,1.582],[-0.907,6.191],[2.027,1.531],[0,0],[0.269,1.173],[0,0]],"o":[[0,0],[-0.273,1.164],[0,0],[-5.205,0.347],[0,0],[0.095,0.128],[0.163,0.322],[0.087,0.451],[-0.01,0.118],[0,0],[-0.373,7.597],[0,0],[0.64,-0.714],[0,0],[6.157,7.187],[0,0],[-0.053,-0.354],[-3.174,-3.317],[0,0],[1.772,-1.273],[2.925,-4.509],[0.907,-6.191],[0,0],[-0.747,-0.07],[0,0],[-2.918,-11.089]],"v":[[-22.9,-74.648],[-31.289,-39.185],[-32.961,-37.17],[-46.386,-35.154],[-51.392,-20.48],[-40.53,-2.937],[-40.271,-2.515],[-39.91,-1.429],[-39.836,-0.015],[-39.877,0.337],[-40.171,49.932],[-27.33,59.465],[-13.006,45.537],[-10.893,45.544],[0.287,58.062],[16.785,52.701],[17.127,35.359],[14.578,18.604],[-30.214,-10.142],[17.42,-1.111],[21.625,-3.986],[27.343,-20.059],[23.514,-33.21],[9.502,-35.884],[7.731,-39.676],[-1.634,-75.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-30.747,-43.449],[-31.991,-40.419],[-35.975,-35.621],[-44.261,-23.835],[-39.557,-6.216],[-39.608,-5.341],[-39.506,-2.731],[-39.228,-1.169],[-39.18,-0.768],[-34.234,42.543],[-27.18,57.061],[-22.29,56.831],[-12.971,52.329],[4.095,58.455],[10.543,46.504],[13.674,20.655],[5.979,9.384],[-33.086,-5.287],[6.96,-4.373],[15.22,-3.82],[20.956,-16.917],[18.194,-29.107],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.075,-4],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.137],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.841,-71.667],[-30.598,-48.03],[-31.598,-44.662],[-33.392,-38.015],[-36.681,-26.546],[-38.998,-15.793],[-39.168,-14.767],[-39.173,-11.649],[-38.832,-10.038],[-38.752,-9.621],[-26.961,41.797],[-20.131,57.14],[-13.014,62.135],[-8.762,62.463],[-1.101,57.204],[5.102,41.219],[12.561,4.516],[14.321,-5.453],[-32.574,-7.85],[14.347,-4.92],[13.968,-8.596],[13.061,-19.55],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.007,-72.489]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[2.867,-11.635],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[3.742,-0.843],[-0.018,-0.143],[0,0],[-1.962,-2.38],[0,0],[-1.071,0.385],[-1.966,4.542],[-0.515,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-8.377,0.771],[0,0],[1.313,8.157],[1.531,3.832],[0.8,0.74],[0,0],[2.413,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.024,-74.615],[-34.136,-39.584],[-35.618,-34.861],[-37.94,-26.25],[-40.713,-10.277],[-39.208,-8.124],[-37.889,-6.295],[10.013,-9.728],[-29.747,2.313],[-36.547,16.105],[-28.689,41.028],[-22.142,55.226],[-12.744,61.569],[-9.643,61.924],[0.504,55.597],[8.25,37.797],[14.603,13.473],[15.837,3.944],[16.118,2.896],[16.533,2.568],[16.77,-1.335],[17.578,-11.801],[13.905,-28.924],[10.644,-37.545],[9.621,-40.636],[-0.313,-75.334]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":51,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-6.287,3.706],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-50.088,-31.706],[-53.307,-15.22],[-44.693,-4.612],[-35.375,-1.927],[5.156,-7.578],[-30.858,9.81],[-38.622,22.197],[-37.424,50.242],[-30.017,60.028],[-13.248,49.784],[-9.232,50],[8.963,55.99],[16.73,43.016],[17.613,12.676],[17.014,6.749],[17.416,2.609],[17.932,1.028],[20.076,-3.199],[28.015,-16.352],[24.301,-32.703],[12.67,-36.178],[11.468,-38.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":57,"s":[{"i":[[2.181,-6.477],[0,0],[1.113,-0.066],[0,0],[-4.354,-4.204],[0,0],[-6.13,-0.044],[0,0],[4.229,-3.255],[0.037,-0.175],[0,0],[-4.738,3.778],[0,0],[-0.933,-0.751],[0,0],[1.371,6.617],[0,0],[-0.029,0.367],[-0.6,0.575],[0,0],[0,0],[0,0],[5.57,0.379],[0,0],[0.4,1.227],[0,0]],"o":[[0,0],[-0.409,1.217],[0,0],[-5.581,0.336],[0,0],[0.163,0.157],[5.669,0.041],[0,0],[-7.941,6.113],[0,0],[-1.408,6.613],[0,0],[0.936,-0.746],[0,0],[4.718,3.8],[0,0],[-0.077,-0.371],[0.069,-0.887],[0,0],[0,0],[0,0],[4.358,-4.179],[0,0],[-1.117,-0.074],[0,0],[-2.124,-6.503]],"v":[[-18.772,-81.723],[-34.464,-40.553],[-36.965,-38.447],[-72.152,-35.55],[-75.659,-22.577],[-60.91,-5.027],[-47.913,1.014],[-9.379,-4.887],[-41.389,17.091],[-51.365,32.435],[-56.334,56.501],[-43.129,63.053],[-12.983,38.886],[-9.897,38.894],[18.242,62.525],[31.981,56.788],[26.833,8.615],[26.763,7.5],[27.795,5.205],[30.078,2.803],[34.683,-2.04],[53.392,-22.253],[49.94,-35.238],[13.833,-39.105],[11.339,-41.241],[-4.139,-81.149]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":62,"s":[{"i":[[2.223,-6.477],[0,0],[1.134,-0.066],[0,0],[-5.103,-4.204],[0,0],[-7.185,-0.044],[0,0],[4.956,-3.255],[0.044,-0.175],[0,0],[-5.553,3.778],[0,0],[-1.094,-0.751],[0,0],[1.607,6.617],[0,0],[-0.033,0.367],[-0.703,0.575],[0,0],[0,0],[0,0],[6.528,0.379],[0,0],[0.408,1.227],[0,0]],"o":[[0,0],[-0.417,1.217],[0,0],[-6.541,0.336],[0,0],[0.191,0.157],[6.644,0.041],[0,0],[-9.307,6.113],[0,0],[-1.65,6.613],[0,0],[1.097,-0.746],[0,0],[5.53,3.8],[0,0],[-0.09,-0.371],[0.081,-0.887],[0,0],[0,0],[0,0],[5.107,-4.179],[0,0],[-1.138,-0.074],[0,0],[-2.164,-6.503]],"v":[[-18.33,-80.973],[-36.027,-41.803],[-38.575,-39.697],[-82.549,-34.8],[-85.91,-22.077],[-66.874,-5.027],[-53.015,0.389],[-8.927,-4.887],[-46.443,17.091],[-58.135,32.435],[-62.46,54.251],[-50.878,62.053],[-14.107,38.636],[-10.489,38.644],[28.427,62.025],[39.548,54.038],[31.186,9.865],[31.104,8.75],[32.314,6.455],[34.99,4.053],[40.386,-0.79],[63.893,-21.503],[59.847,-34.488],[15.75,-38.855],[13.209,-40.991],[-4.716,-80.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[{"i":[[-2.446,-6.196],[0,0],[-1.248,-0.063],[0,0],[4.993,-4.022],[0,0],[0.129,-0.152],[0.127,-0.395],[-0.067,-0.481],[-0.03,-0.117],[0,0],[5.434,3.614],[0,0],[1.07,-0.718],[0,0],[-1.573,6.33],[-0.901,2.803],[-4.74,3.381],[0.688,0.55],[5.745,0.308],[3.389,2.471],[0,0],[-6.388,0.362],[0,0],[-0.448,1.173],[0,0]],"o":[[0,0],[0.459,1.164],[0,0],[6.401,0.321],[0,0],[-0.159,0.128],[-0.273,0.322],[-0.145,0.451],[0.016,0.118],[0,0],[1.615,6.326],[0,0],[-1.073,-0.713],[0,0],[-5.412,3.635],[0,0],[1.413,-4.394],[1.825,-1.302],[0,0],[-7.973,-1.028],[-5.296,-3.862],[-4.998,-3.998],[0,0],[1.252,-0.071],[0,0],[2.381,-6.221]],"v":[[-5.247,-80.804],[12.866,-40.968],[15.67,-38.954],[58.984,-34.482],[63.007,-22.073],[30.978,6.216],[30.545,6.638],[29.942,7.725],[29.819,9.139],[29.888,9.491],[38.835,53.575],[27.99,61.278],[-10.052,38.242],[-13.592,38.25],[-51.574,61.49],[-62.458,53.85],[-58.162,31.43],[-47.919,18.184],[-9.558,-4.833],[-55.946,0.583],[-70.036,-6.513],[-87.015,-21.762],[-83.056,-34.184],[-39.181,-38.983],[-36.385,-41.027],[-18.851,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-3.127,-13.085],[0,0],[-0.768,-0.064],[0,0],[3.073,-4.02],[0,0],[0.079,-0.152],[0.078,-0.395],[-0.041,-0.481],[-0.018,-0.117],[0,0],[4.241,3.683],[0,0],[0.659,-0.718],[0,0],[-0.972,6.329],[0,0],[-2.807,3.411],[0.423,0.551],[0.994,0.062],[1.057,1.582],[0.934,6.191],[-2.089,1.531],[0,0],[-0.277,1.173],[0,0]],"o":[[0,0],[0.281,1.164],[0,0],[5.362,0.347],[0,0],[-0.098,0.128],[-0.168,0.322],[-0.089,0.451],[0.01,0.118],[0,0],[0.385,7.597],[0,0],[-0.66,-0.714],[0,0],[-6.343,7.187],[0,0],[0.054,-0.354],[3.27,-3.317],[0,0],[-1.825,-1.273],[-3.014,-4.509],[-0.934,-6.191],[0,0],[0.77,-0.07],[0,0],[3.006,-11.089]],"v":[[-0.427,-74.648],[8.215,-39.185],[9.939,-37.17],[22.27,-35.154],[27.427,-20.48],[17.736,-2.937],[17.47,-2.515],[17.098,-1.429],[17.021,-0.015],[17.063,0.337],[18.116,49.682],[4.137,59.465],[-10.621,45.537],[-12.798,45.544],[-24.316,58.062],[-41.313,52.701],[-41.6,32.109],[-38.974,15.354],[-25.076,-3.142],[-41.902,-4.361],[-46.234,-7.236],[-52.191,-20.059],[-48.246,-33.21],[-33.81,-35.884],[-31.986,-39.676],[-22.337,-75.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[-4.399,-16.739],[0,0],[-0.46,-0.482],[0,0],[0.869,-4.112],[0,0],[0.062,-0.187],[0.105,-0.436],[0.075,-0.542],[0.015,-0.135],[0,0],[3.127,-1.741],[0,0],[1.38,0.156],[2.361,3.154],[0.482,5.051],[0,0],[-2.948,2.259],[0.128,0.137],[0.643,0.053],[0.547,0.474],[0,0],[-2.021,1.973],[0,0],[-0.266,1.193],[0,0]],"o":[[0,0],[0.272,1.183],[0,0],[4.992,2.851],[0,0],[-0.067,0.177],[-0.132,0.396],[-0.12,0.498],[-0.018,0.133],[0,0],[-1.619,6.968],[-3.562,2.689],[-1.054,0.403],[0,0],[-4.284,-1.356],[0,0],[-0.135,-0.831],[0.991,-0.83],[0,0],[-1.076,-0.416],[-1.558,-1.351],[-3.643,-5.423],[0,0],[0.568,-0.702],[0,0],[4.183,-13.708]],"v":[[0.637,-72.352],[8.336,-42.199],[9.652,-39.169],[14.169,-34.781],[23.006,-23.835],[17.155,-5.341],[17.209,-4.466],[17.101,-1.856],[16.807,-0.294],[16.757,0.107],[15.024,41.668],[9.562,57.061],[0.89,56.831],[-11.218,50.829],[-27.021,58.455],[-36.092,46.254],[-38.062,15.655],[-33.59,2.259],[-27.598,-4.787],[-31.849,-5.748],[-38.698,-8.82],[-44.857,-16.917],[-43.935,-30.357],[-33.857,-35.277],[-32.565,-38.654],[-23.522,-73.084]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[-4.692,-17.958],[0,0],[-0.309,-0.622],[0,0],[-1.161,-4],[0,0],[0.052,-0.199],[0.11,-0.45],[0.119,-0.562],[0.028,-0.141],[0,0],[2.504,-3.548],[0,0],[1.606,0.447],[3.214,4.206],[1.055,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.705,2.168],[0,0],[-0.248,1.199],[0,0]],"o":[[0,0],[0.254,1.189],[0,0],[0.657,3.942],[0,0],[-0.051,0.194],[-0.11,0.421],[-0.126,0.514],[-0.029,0.137],[0,0],[-2.364,6.758],[-2.504,3.548],[-1.163,0.775],[0,0],[-3.214,-4.206],[0,0],[-0.207,-0.989],[0,0],[0,0],[0,0],[0,0],[0.946,-5.864],[0,0],[0.455,-0.912],[0,0],[4.456,-14.581]],"v":[[0.834,-71.667],[8.131,-48.03],[9.21,-44.662],[11.147,-38.015],[14.698,-26.546],[16.951,-12.793],[17.134,-11.767],[17.14,-8.649],[16.771,-7.038],[16.685,-6.621],[4.203,41.797],[-3.171,57.14],[-10.855,62.135],[-15.446,62.463],[-23.718,57.204],[-30.416,41.219],[-40.572,1.266],[-42.472,-8.703],[-40.568,-8.85],[-42.5,-8.17],[-42.091,-11.846],[-40.76,-19.55],[-38.301,-28.038],[-37.1,-34.412],[-36.093,-37.651],[-24.915,-72.489]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[-2.633,-11.634],[0,0],[-0.226,-0.623],[0,0],[0.932,-3.012],[0,0],[0.378,-0.181],[0.062,-0.3],[-0.405,-0.843],[0.017,-0.143],[0,0],[1.799,-2.381],[0,0],[0.983,0.385],[1.805,4.541],[0.474,5.854],[0,0],[0.041,0.307],[0.103,0.457],[0,0],[0,0],[0,0],[-1.006,1.957],[0,0],[-0.212,1.191],[0,0]],"o":[[0,0],[0.239,1.181],[0,0],[1.068,6.586],[0,0],[-0.029,0.188],[-0.372,0.376],[-0.071,0.342],[0.907,0.771],[0,0],[-1.202,8.157],[-1.404,3.833],[-0.734,0.74],[0,0],[-2.215,-4.048],[0,0],[-0.147,-0.914],[-0.099,-0.742],[0,0],[0,0],[0,0],[0.278,-5.629],[0,0],[0.423,-0.814],[0,0],[3.603,-13.583]],"v":[[-0.244,-76.368],[11.209,-40.34],[12.859,-34.816],[14.712,-28.278],[15.1,-9.035],[13.72,-6.882],[12.511,-5.053],[12.317,-4.471],[14.629,-1.82],[15.754,2.971],[4.601,41.023],[-0.149,56.222],[-10.377,62.32],[-13.222,62.675],[-24.161,56.102],[-30,38.304],[-37.573,8.481],[-39.062,-0.797],[-39.32,-1.845],[-39.701,-2.172],[-39.919,-6.076],[-40.664,-16.542],[-38.035,-31.665],[-35.859,-37.788],[-34.922,-40.879],[-23.322,-75.33]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[-3.514,-13.779],[0,0],[-0.574,-0.427],[0,0],[1.527,-4.042],[0,0],[2.25,-0.144],[0,0],[-1.462,-1.405],[0.003,-0.148],[0,0],[3.178,-1.11],[0,0],[1.276,0.052],[1.878,2.743],[0.12,5.127],[0,0],[0.127,0.922],[0.318,1.371],[0,0],[0,0],[0,0],[-1.878,1.535],[0,0],[-0.222,1.173],[0,0]],"o":[[0,0],[0.293,1.164],[0,0],[5.949,3.706],[0,0],[-0.089,0.176],[-2.117,0.288],[0,0],[7.038,4.73],[0,0],[-0.872,6.517],[-1.463,2.315],[-1.018,0.268],[0,0],[-3.586,-1.532],[0,0],[0.059,-0.767],[-0.306,-2.225],[0,0],[0,0],[0,0],[-2.368,-5.63],[0,0],[0.511,-0.618],[0,0],[3.355,-11.584]],"v":[[-2.711,-75.388],[6.855,-38.927],[8.371,-36.058],[22.301,-31.706],[25.223,-16.97],[17.072,-6.362],[8.254,-3.677],[-0.005,-3.078],[4.159,2.81],[13.398,12.446],[10.317,50.242],[3.309,60.028],[-12.56,49.784],[-16.36,50],[-33.578,55.99],[-40.927,43.016],[-41.827,10.176],[-41.261,4.249],[-41.641,0.109],[-42.13,-1.472],[-44.158,-5.699],[-51.671,-18.852],[-48.091,-32.703],[-37.085,-36.178],[-35.948,-38.972],[-23.55,-75.65]],"c":true}]},{"t":83,"s":[{"i":[[-2.133,-6.477],[0,0],[-1.089,-0.066],[0,0],[4.258,-4.204],[0,0],[5.996,-0.044],[0,0],[-4.136,-3.255],[-0.036,-0.175],[0,0],[4.634,3.778],[0,0],[0.913,-0.751],[0,0],[-1.341,6.617],[0,0],[0.028,0.367],[0.587,0.575],[0,0],[0,0],[0,0],[-5.447,0.379],[0,0],[-0.391,1.227],[0,0]],"o":[[0,0],[0.4,1.217],[0,0],[5.458,0.336],[0,0],[-0.159,0.157],[-5.544,0.041],[0,0],[7.767,6.113],[0,0],[1.377,6.613],[0,0],[-0.915,-0.746],[0,0],[-4.615,3.8],[0,0],[0.075,-0.371],[-0.067,-0.887],[0,0],[0,0],[0,0],[-4.262,-4.179],[0,0],[1.092,-0.074],[0,0],[2.077,-6.503]],"v":[[-3.659,-81.723],[11.689,-40.553],[14.135,-38.447],[48.548,-35.55],[51.979,-22.577],[37.553,-5.027],[24.842,1.014],[-12.845,-4.887],[18.461,17.091],[28.218,32.435],[33.078,56.501],[20.163,63.053],[-9.321,38.886],[-12.339,38.894],[-39.86,62.525],[-53.297,56.788],[-48.262,8.615],[-48.193,7.5],[-49.203,5.205],[-51.436,2.803],[-55.939,-2.04],[-74.238,-22.253],[-70.862,-35.238],[-35.547,-39.105],[-33.109,-41.241],[-17.97,-81.149]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.819607843137,0.521568627451,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.195,1,1,1,0.45,1,0.945,0.671,0.705,1,0.89,0.341,0.853,0.988,0.804,0.222,1,0.976,0.718,0.102]}},"s":{"a":0,"k":[-29.383,-83.036]},"e":{"a":0,"k":[-11.25,17]},"t":1,"nm":"Gradient Fill 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[243.876,244.742]},"a":{"a":0,"k":[243.876,244.742]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":43,"op":84,"st":11,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 19 :M 3","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[0]},{"t":76,"s":[14]}]},"p":{"a":1,"k":[{"i":{"x":0.14,"y":0.755},"o":{"x":0.167,"y":0.167},"t":43,"s":[362.448,351.395,0],"to":[119.125,-49.943,0],"ti":[0,0,0]},{"t":75,"s":[566.754,342.701,0]}]},"a":{"a":0,"k":[244.221,244.32,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":59,"s":[-40,40,100]},{"t":78,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[-3.392,2.471],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[5.3,-3.862],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114],[-14.457,-4.833],[34.539,-1.255],[48.7,-7.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":51,"s":[{"i":[[3.035,-13.085],[0,0],[0.745,-0.064],[0,0],[-2.983,-4.02],[0,0],[-0.077,-0.152],[-0.076,-0.395],[0.039,-0.481],[0.018,-0.117],[0,0],[-4.116,3.683],[0,0],[-0.639,-0.718],[0,0],[0.943,6.329],[0,0],[2.724,3.411],[-0.41,0.55],[-0.965,0.062],[-1.026,1.582],[-0.907,6.191],[2.027,1.531],[0,0],[0.269,1.173],[0,0]],"o":[[0,0],[-0.273,1.164],[0,0],[-5.205,0.347],[0,0],[0.095,0.128],[0.163,0.322],[0.087,0.451],[-0.01,0.118],[0,0],[-0.373,7.597],[0,0],[0.64,-0.714],[0,0],[6.157,7.187],[0,0],[-0.053,-0.354],[-3.174,-3.317],[0,0],[1.772,-1.273],[2.925,-4.509],[0.907,-6.191],[0,0],[-0.747,-0.07],[0,0],[-2.918,-11.089]],"v":[[-22.9,-74.648],[-31.289,-39.185],[-32.961,-37.17],[-46.386,-35.154],[-51.392,-20.48],[-40.53,-2.937],[-40.271,-2.515],[-39.91,-1.429],[-39.836,-0.015],[-39.877,0.337],[-40.171,49.932],[-27.33,59.465],[-13.006,45.537],[-10.893,45.544],[0.287,58.062],[16.785,52.701],[17.127,35.359],[14.578,18.604],[-30.214,-10.142],[17.42,-1.111],[21.625,-3.986],[27.343,-20.059],[23.514,-33.21],[9.502,-35.884],[7.731,-39.676],[-1.634,-75.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":52,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-30.747,-43.449],[-31.991,-40.419],[-35.975,-35.621],[-44.261,-23.835],[-39.557,-6.216],[-39.608,-5.341],[-39.506,-2.731],[-39.228,-1.169],[-39.18,-0.768],[-34.234,42.543],[-27.18,57.061],[-22.29,56.831],[-12.971,52.329],[4.095,58.455],[10.543,46.504],[13.674,20.655],[5.979,9.384],[-33.086,-5.287],[6.96,-4.373],[15.22,-3.82],[20.956,-16.917],[18.194,-29.107],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.075,-4],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.137],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.841,-71.667],[-30.598,-48.03],[-31.598,-44.662],[-33.392,-38.015],[-36.681,-26.546],[-38.998,-15.793],[-39.168,-14.767],[-39.173,-11.649],[-38.832,-10.038],[-38.752,-9.621],[-26.961,41.797],[-20.131,57.14],[-13.014,62.135],[-8.762,62.463],[-1.101,57.204],[5.102,41.219],[12.561,4.516],[14.321,-5.453],[-32.574,-7.85],[14.347,-4.92],[13.968,-8.596],[13.061,-19.55],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.007,-72.489]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[2.867,-11.635],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[3.742,-0.843],[-0.018,-0.143],[0,0],[-1.962,-2.38],[0,0],[-1.071,0.385],[-1.966,4.542],[-0.515,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-8.377,0.771],[0,0],[1.313,8.157],[1.531,3.832],[0.8,0.74],[0,0],[2.413,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.024,-74.615],[-34.136,-39.584],[-35.618,-34.861],[-37.94,-26.25],[-40.713,-10.277],[-39.208,-8.124],[-37.889,-6.295],[10.013,-9.728],[-29.747,2.313],[-36.547,16.105],[-28.689,41.028],[-22.142,55.226],[-12.744,61.569],[-9.643,61.924],[0.504,55.597],[8.25,37.797],[14.603,13.473],[15.837,3.944],[16.118,2.896],[16.533,2.568],[16.77,-1.335],[17.578,-11.801],[13.905,-28.924],[10.644,-37.545],[9.621,-40.636],[-0.313,-75.334]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-6.287,3.706],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-50.088,-31.706],[-53.307,-15.22],[-44.693,-4.612],[-35.375,-1.927],[5.156,-7.578],[-30.858,9.81],[-38.622,22.197],[-37.424,50.242],[-30.017,60.028],[-13.248,49.784],[-9.232,50],[8.963,55.99],[16.73,43.016],[17.613,12.676],[17.014,6.749],[17.416,2.609],[17.932,1.028],[20.076,-3.199],[28.015,-16.352],[24.301,-32.703],[12.67,-36.178],[11.468,-38.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":62,"s":[{"i":[[2.181,-6.477],[0,0],[1.113,-0.066],[0,0],[-4.354,-4.204],[0,0],[-6.13,-0.044],[0,0],[4.229,-3.255],[0.037,-0.175],[0,0],[-4.738,3.778],[0,0],[-0.933,-0.751],[0,0],[1.371,6.617],[0,0],[-0.029,0.367],[-0.6,0.575],[0,0],[0,0],[0,0],[5.57,0.379],[0,0],[0.4,1.227],[0,0]],"o":[[0,0],[-0.409,1.217],[0,0],[-5.581,0.336],[0,0],[0.163,0.157],[5.669,0.041],[0,0],[-7.941,6.113],[0,0],[-1.408,6.613],[0,0],[0.936,-0.746],[0,0],[4.718,3.8],[0,0],[-0.077,-0.371],[0.069,-0.887],[0,0],[0,0],[0,0],[4.358,-4.179],[0,0],[-1.117,-0.074],[0,0],[-2.124,-6.503]],"v":[[-18.772,-81.723],[-34.464,-40.553],[-36.965,-38.447],[-72.152,-35.55],[-75.659,-22.577],[-60.91,-5.027],[-47.913,1.014],[-9.379,-4.887],[-41.389,17.091],[-51.365,32.435],[-56.334,56.501],[-43.129,63.053],[-12.983,38.886],[-9.897,38.894],[18.242,62.525],[31.981,56.788],[26.833,8.615],[26.763,7.5],[27.795,5.205],[30.078,2.803],[34.683,-2.04],[53.392,-22.253],[49.94,-35.238],[13.833,-39.105],[11.339,-41.241],[-4.139,-81.149]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":67,"s":[{"i":[[2.223,-6.477],[0,0],[1.134,-0.066],[0,0],[-5.103,-4.204],[0,0],[-7.185,-0.044],[0,0],[4.956,-3.255],[0.044,-0.175],[0,0],[-5.553,3.778],[0,0],[-1.094,-0.751],[0,0],[1.607,6.617],[0,0],[-0.033,0.367],[-0.703,0.575],[0,0],[0,0],[0,0],[6.528,0.379],[0,0],[0.408,1.227],[0,0]],"o":[[0,0],[-0.417,1.217],[0,0],[-6.541,0.336],[0,0],[0.191,0.157],[6.644,0.041],[0,0],[-9.307,6.113],[0,0],[-1.65,6.613],[0,0],[1.097,-0.746],[0,0],[5.53,3.8],[0,0],[-0.09,-0.371],[0.081,-0.887],[0,0],[0,0],[0,0],[5.107,-4.179],[0,0],[-1.138,-0.074],[0,0],[-2.164,-6.503]],"v":[[-18.33,-80.973],[-36.027,-41.803],[-38.575,-39.697],[-82.549,-34.8],[-85.91,-22.077],[-66.874,-5.027],[-53.015,0.389],[-8.927,-4.887],[-46.443,17.091],[-58.135,32.435],[-62.46,54.251],[-50.878,62.053],[-14.107,38.636],[-10.489,38.644],[28.427,62.025],[39.548,54.038],[31.186,9.865],[31.104,8.75],[32.314,6.455],[34.99,4.053],[40.386,-0.79],[63.893,-21.503],[59.847,-34.488],[15.75,-38.855],[13.209,-40.991],[-4.716,-80.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[-2.446,-6.196],[0,0],[-1.248,-0.063],[0,0],[4.993,-4.022],[0,0],[0.129,-0.152],[0.127,-0.395],[-0.067,-0.481],[-0.03,-0.117],[0,0],[5.434,3.614],[0,0],[1.07,-0.718],[0,0],[-1.573,6.33],[-0.901,2.803],[-4.74,3.381],[0.688,0.55],[5.745,0.308],[3.389,2.471],[0,0],[-6.388,0.362],[0,0],[-0.448,1.173],[0,0]],"o":[[0,0],[0.459,1.164],[0,0],[6.401,0.321],[0,0],[-0.159,0.128],[-0.273,0.322],[-0.145,0.451],[0.016,0.118],[0,0],[1.615,6.326],[0,0],[-1.073,-0.713],[0,0],[-5.412,3.635],[0,0],[1.413,-4.394],[1.825,-1.302],[0,0],[-7.973,-1.028],[-5.296,-3.862],[-4.998,-3.998],[0,0],[1.252,-0.071],[0,0],[2.381,-6.221]],"v":[[-5.247,-80.804],[12.866,-40.968],[15.67,-38.954],[58.984,-34.482],[63.007,-22.073],[30.978,6.216],[30.545,6.638],[29.942,7.725],[29.819,9.139],[29.888,9.491],[38.835,53.575],[27.99,61.278],[-10.052,38.242],[-13.592,38.25],[-51.574,61.49],[-62.458,53.85],[-58.162,31.43],[-47.919,18.184],[-9.558,-4.833],[-55.946,0.583],[-70.036,-6.513],[-87.015,-21.762],[-83.056,-34.184],[-39.181,-38.983],[-36.385,-41.027],[-18.851,-80.734]],"c":true}]},{"t":77,"s":[{"i":[[-3.127,-13.085],[0,0],[-0.768,-0.064],[0,0],[3.073,-4.02],[0,0],[0.079,-0.152],[0.078,-0.395],[-0.041,-0.481],[-0.018,-0.117],[0,0],[4.241,3.683],[0,0],[0.659,-0.718],[0,0],[-0.972,6.329],[0,0],[-2.807,3.411],[0.423,0.551],[0.994,0.062],[1.057,1.582],[0.934,6.191],[-2.089,1.531],[0,0],[-0.277,1.173],[0,0]],"o":[[0,0],[0.281,1.164],[0,0],[5.362,0.347],[0,0],[-0.098,0.128],[-0.168,0.322],[-0.089,0.451],[0.01,0.118],[0,0],[0.385,7.597],[0,0],[-0.66,-0.714],[0,0],[-6.343,7.187],[0,0],[0.054,-0.354],[3.27,-3.317],[0,0],[-1.825,-1.273],[-3.014,-4.509],[-0.934,-6.191],[0,0],[0.77,-0.07],[0,0],[3.006,-11.089]],"v":[[-0.427,-74.648],[8.215,-39.185],[9.939,-37.17],[22.27,-35.154],[27.427,-20.48],[17.736,-2.937],[17.47,-2.515],[17.098,-1.429],[17.021,-0.015],[17.063,0.337],[18.116,49.682],[4.137,59.465],[-10.621,45.537],[-12.798,45.544],[-24.316,58.062],[-41.313,52.701],[-41.6,32.109],[-38.974,15.354],[-25.076,-3.142],[-41.902,-4.361],[-46.234,-7.236],[-52.191,-20.059],[-48.246,-33.21],[-33.81,-35.884],[-31.986,-39.676],[-22.337,-75.121]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.819607843137,0.521568627451,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.195,1,1,1,0.45,1,0.945,0.671,0.705,1,0.89,0.341,0.853,0.988,0.804,0.222,1,0.976,0.718,0.102]}},"s":{"a":0,"k":[-29.383,-83.036]},"e":{"a":0,"k":[-11.25,17]},"t":1,"nm":"Gradient Fill 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[243.876,244.742]},"a":{"a":0,"k":[243.876,244.742]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":43,"op":77,"st":16,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Shape Layer 6 :M 3","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[0]},{"t":94,"s":[-180]}]},"p":{"a":1,"k":[{"i":{"x":0.67,"y":0.92},"o":{"x":0.167,"y":0.167},"t":53,"s":[341.25,358.25,0],"to":[0,0,0],"ti":[27,-2,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.7,"y":0.132},"t":68,"s":[304.5,267.25,0],"to":[-27,3,0],"ti":[0,0,0]},{"t":91,"s":[278.75,464.25,0]}]},"a":{"a":0,"k":[245.677,245.967,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[36,36,100]},{"t":91,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[2.448,-6.196],[0,0],[0,0],[0.488,-0.35],[0.625,-0.032],[0,0],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[8.812,3.695],[-0.974,0.778],[0,0],[-5.794,2.04],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[0,0],[-0.23,0.582],[-0.488,0.35],[0,0],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[0,0],[-2.116,-0.888],[0,0],[0,0],[6.535,-2.3],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-27.836,-60.886],[-36.9,-40.968],[-38.007,-39.548],[-39.707,-38.954],[-61.382,-36.718],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.598,32.677],[23.063,17.68],[-13.832,-4.832],[28.999,-1.867],[41.215,-3.575],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[{"i":[[3.187,-12.4],[0,0],[0,0],[0.328,-0.35],[0.419,-0.032],[0,0],[0,0],[-3.355,-4.022],[0,0],[0.208,-1.211],[0,0],[-4.504,3.673],[0,0],[-0.719,-0.718],[0,0],[1.057,6.33],[0,0],[5.998,3.025],[-0.654,0.778],[0,0],[-5.947,3.537],[0,0],[5.262,1.288],[0,0],[0.301,1.173],[0,0]],"o":[[0,0],[0,0],[-0.154,0.582],[-0.328,0.35],[0,0],[0,0],[-5.65,0.341],[0,0],[0.654,0.784],[0,0],[-0.515,7.471],[0,0],[0.721,-0.713],[0,0],[6.482,6.839],[0,0],[0,0],[-0.957,-1.063],[0,0],[0,0],[4.946,-2.942],[1.983,-5.363],[0,0],[-0.841,-0.071],[0,0],[-3.05,-10.609]],"v":[[-20.671,-76.168],[-26.82,-57.887],[-32.968,-39.605],[-33.711,-38.185],[-34.852,-37.59],[-46.317,-36.24],[-57.782,-34.891],[-62.544,-21.459],[-44.265,1.58],[-43.532,4.855],[-47.798,51.394],[-36.02,60.528],[-13.422,42.333],[-11.043,42.341],[11.083,59.99],[23.761,51.259],[22.165,28.554],[16.127,17.225],[-24.827,-7.912],[17.028,-3.118],[29.554,-5.683],[38.392,-19.012],[33.547,-33.15],[10.365,-36.881],[8.487,-38.924],[-3.109,-76.575]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[{"i":[[4.346,-17.571],[0,0],[0,0],[0.095,-0.334],[0.062,-0.032],[0,0],[0,0],[0.383,-4.034],[0,0],[0.158,-1.211],[0,0],[-5.494,-0.028],[0,0],[-0.549,-0.718],[0,0],[-1.852,4.025],[0,0],[0,0],[-0.499,0.778],[0,0],[0,0],[0,0],[1.466,4.309],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[0,0],[-0.023,0.582],[-0.095,0.334],[0,0],[0,0],[-0.319,1.045],[0,0],[0.499,0.784],[0,0],[0.315,8.425],[0,0],[0.55,-0.713],[0,0],[5.101,-1.928],[0,0],[0,0],[-0.154,-1.21],[0,0],[0,0],[0,0],[0.01,-4.748],[0,0],[-0.642,-0.071],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-27.799,-55.386],[-31.876,-38.468],[-32.079,-37.08],[-32.341,-36.517],[-32.511,-35.437],[-32.681,-34.357],[-35.881,-22.129],[-39.163,-7.284],[-38.604,-4.009],[-24.815,46.575],[-10.631,61.028],[-11.577,60.992],[-9.762,61],[-7.726,60.74],[3.477,46.1],[11.183,17.951],[14.785,-5.07],[-30.65,-7.458],[14.904,-5.515],[15.045,-6.941],[14.089,-18.137],[10.659,-31.184],[9.172,-35.983],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[{"i":[[2.671,-11.635],[0,0],[0.366,-0.557],[0,0],[-0.948,-3.012],[0,0],[-0.384,-0.181],[-0.064,-0.3],[3.486,-0.843],[-0.017,-0.143],[0,0],[-1.827,-2.38],[0,0],[-0.998,0.385],[-1.831,4.542],[-0.48,5.854],[0,0],[-0.042,0.307],[-0.104,0.457],[0,0],[0,0],[0,0],[1.022,1.957],[0,0],[0.215,1.191],[0,0]],"o":[[0,0],[-0.242,1.181],[0,0],[-2.561,6.177],[0,0],[0.029,0.188],[0.378,0.376],[0.072,0.342],[-7.803,0.771],[0,0],[1.223,8.157],[1.427,3.832],[0.745,0.74],[0,0],[2.248,-4.049],[0,0],[0.149,-0.914],[0.1,-0.742],[0,0],[0,0],[0,0],[-0.284,-5.629],[0,0],[-0.43,-0.814],[0,0],[-3.664,-13.582]],"v":[[-22.573,-74.615],[-32.675,-40.084],[-34.055,-35.361],[-36.469,-26.75],[-38.552,-10.277],[-37.15,-8.124],[-35.921,-6.295],[8.703,-9.728],[-28.336,2.313],[-34.671,16.105],[-27.35,41.028],[-21.252,55.226],[-12.497,61.569],[-9.609,61.924],[-0.156,55.597],[7.06,37.797],[12.979,13.473],[14.128,3.944],[14.39,2.896],[14.776,2.569],[14.997,-1.335],[15.75,-11.801],[12.328,-28.924],[10.54,-37.795],[9.588,-40.886],[0.083,-74.334]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-6.287,3.706],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-50.088,-31.706],[-53.307,-15.22],[-44.693,-4.612],[-35.375,-1.927],[5.156,-7.578],[-30.858,9.81],[-38.622,22.197],[-37.424,50.242],[-30.017,60.028],[-13.248,49.784],[-9.232,50],[8.963,55.99],[16.73,43.016],[17.613,12.676],[17.014,6.749],[17.416,2.609],[17.932,1.028],[20.076,-3.199],[28.015,-16.352],[24.301,-32.703],[12.67,-36.178],[11.468,-38.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":67,"s":[{"i":[[2.181,-6.379],[0,0],[1.113,-0.065],[0,0],[-4.354,-4.141],[0,0],[-6.13,-0.044],[0,0],[4.229,-3.206],[0.037,-0.173],[0,0],[-4.738,3.721],[0,0],[-0.933,-0.739],[0,0],[1.371,6.517],[0,0],[-0.029,0.362],[-0.6,0.566],[0,0],[0,0],[0,0],[5.57,0.373],[0,0],[0.4,1.208],[0,0]],"o":[[0,0],[-0.409,1.198],[0,0],[-5.581,0.33],[0,0],[0.163,0.155],[5.669,0.04],[0,0],[-7.941,6.02],[0,0],[-1.408,6.513],[0,0],[0.936,-0.734],[0,0],[4.718,3.742],[0,0],[-0.077,-0.365],[0.069,-0.873],[0,0],[0,0],[0,0],[4.358,-4.116],[0,0],[-1.117,-0.073],[0,0],[-2.124,-6.404]],"v":[[-18.772,-81.309],[-34.464,-40.761],[-36.965,-38.687],[-72.152,-35.833],[-75.659,-23.057],[-60.91,-5.772],[-47.913,0.178],[-9.379,-5.634],[-41.389,16.012],[-51.365,31.124],[-56.334,54.826],[-43.129,61.279],[-12.983,37.477],[-9.897,37.486],[18.242,60.759],[31.981,55.109],[26.833,7.663],[26.763,6.566],[27.795,4.305],[30.078,1.94],[34.683,-2.83],[53.392,-22.738],[49.94,-35.526],[13.833,-39.335],[11.339,-41.439],[-4.139,-80.743]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":72,"s":[{"i":[[2.223,-6.477],[0,0],[1.134,-0.066],[0,0],[-5.103,-4.204],[0,0],[-7.185,-0.044],[0,0],[4.956,-3.255],[0.044,-0.175],[0,0],[-5.553,3.778],[0,0],[-1.094,-0.751],[0,0],[1.607,6.617],[0,0],[-0.033,0.367],[-0.703,0.575],[0,0],[0,0],[0,0],[6.528,0.379],[0,0],[0.408,1.227],[0,0]],"o":[[0,0],[-0.417,1.217],[0,0],[-6.541,0.336],[0,0],[0.191,0.157],[6.644,0.041],[0,0],[-9.307,6.113],[0,0],[-1.65,6.613],[0,0],[1.097,-0.746],[0,0],[5.53,3.8],[0,0],[-0.09,-0.371],[0.081,-0.887],[0,0],[0,0],[0,0],[5.107,-4.179],[0,0],[-1.138,-0.074],[0,0],[-2.164,-6.503]],"v":[[-18.33,-80.973],[-36.027,-41.803],[-38.575,-39.697],[-82.549,-34.8],[-85.91,-22.077],[-66.874,-5.027],[-53.015,0.389],[-8.927,-4.887],[-46.443,17.091],[-58.135,32.435],[-62.46,54.251],[-50.878,62.053],[-14.107,38.636],[-10.489,38.644],[28.427,62.025],[39.548,54.038],[31.186,9.865],[31.104,8.75],[32.314,6.455],[34.99,4.053],[40.386,-0.79],[63.893,-21.503],[59.847,-34.488],[15.75,-38.855],[13.209,-40.991],[-4.716,-80.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[-2.4,-6.213],[0,0],[0,0],[-0.485,-0.354],[-0.623,-0.036],[0,0],[0,0],[5.022,-3.986],[0,0],[-0.3,-1.213],[0,0],[5.407,3.653],[0,0],[1.075,-0.71],[0,0],[-1.618,6.319],[0,0],[-8.829,3.631],[0.967,0.785],[0,0],[5.895,3.993],[0,0],[-6.389,0.316],[0,0],[-0.457,1.17],[0,0]],"o":[[0,0],[0,0],[0.225,0.584],[0.485,0.354],[0,0],[0,0],[6.397,0.368],[0,0],[-0.978,0.777],[0,0],[1.568,6.338],[0,0],[-1.068,-0.721],[0,0],[-5.437,3.595],[0,0],[0,0],[2.121,-0.872],[0,0],[0,0],[-5.731,-3.881],[-4.968,-4.034],[0,0],[1.252,-0.062],[0,0],[2.426,-6.203]],"v":[[-3.989,-80.753],[4.921,-60.77],[13.83,-40.786],[14.926,-39.358],[16.619,-38.752],[38.255,-36.358],[59.892,-33.964],[63.824,-21.525],[31.594,6.529],[30.481,9.796],[39.105,53.944],[28.206,61.568],[-9.661,38.255],[-13.201,38.237],[-51.345,61.2],[-62.171,53.48],[-58.632,32.333],[-46.499,17.423],[-9.477,-4.819],[-53.179,0.328],[-64.477,-3.963],[-86.172,-22.309],[-82.123,-34.701],[-38.221,-39.18],[-35.411,-41.204],[-17.591,-80.782]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":79,"s":[{"i":[[-3.163,-12.4],[0,0],[0,0],[-0.325,-0.35],[-0.416,-0.032],[0,0],[0,0],[3.33,-4.022],[0,0],[-0.206,-1.211],[0,0],[4.47,3.673],[0,0],[0.714,-0.718],[0,0],[-1.049,6.33],[0,0],[-5.953,3.025],[0.649,0.778],[0,0],[5.902,3.537],[0,0],[-5.222,1.288],[0,0],[-0.299,1.173],[0,0]],"o":[[0,0],[0,0],[0.153,0.582],[0.325,0.35],[0,0],[0,0],[5.607,0.341],[0,0],[-0.649,0.784],[0,0],[0.511,7.471],[0,0],[-0.716,-0.713],[0,0],[-6.434,6.839],[0,0],[0,0],[0.95,-1.064],[0,0],[0,0],[-4.909,-2.942],[-1.969,-5.363],[0,0],[0.835,-0.071],[0,0],[3.028,-10.609]],"v":[[-3.413,-76.168],[2.689,-57.887],[8.791,-39.605],[9.529,-38.185],[10.662,-37.59],[22.041,-36.24],[33.419,-34.891],[38.145,-21.459],[20.004,1.58],[19.277,4.855],[23.51,51.394],[11.82,60.528],[-10.607,42.333],[-12.968,42.341],[-34.928,59.99],[-47.511,51.259],[-45.802,29.804],[-40.809,16.1],[-19.788,-4.662],[-40.828,-3.118],[-52.01,-5.433],[-60.781,-18.762],[-55.973,-32.9],[-34.216,-36.881],[-32.351,-38.924],[-20.843,-76.575]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[-4.017,-17.571],[0,0],[0,0],[-0.098,-0.334],[-0.064,-0.032],[0,0],[0,0],[-0.395,-4.034],[0,0],[-0.164,-1.211],[0,0],[5.675,-0.028],[0,0],[0.567,-0.718],[0,0],[2.112,6.338],[0,0],[0,0],[0.515,0.778],[0,0],[0,0],[0,0],[-1.514,4.309],[0,0],[-0.238,1.173],[0,0]],"o":[[0,0],[0,0],[0.024,0.582],[0.098,0.334],[0,0],[0,0],[0.329,1.045],[0,0],[-0.515,0.784],[0,0],[-1.803,7.8],[0,0],[-0.568,-0.713],[0,0],[-5.27,-1.928],[0,0],[0,0],[0.159,-1.21],[0,0],[0,0],[0,0],[1.002,-4.641],[0,0],[0.663,-0.071],[0,0],[3.814,-14.266]],"v":[[-1.5,-72.304],[3.736,-55.386],[8.972,-38.468],[9.182,-37.08],[9.453,-36.517],[9.629,-35.437],[9.805,-34.357],[12.61,-22.129],[15.125,-11.534],[15.298,-5.384],[0.928,48.263],[-13.725,61.028],[-12.748,60.992],[-14.622,61],[-16.726,60.74],[-27.549,48.225],[-36.26,17.951],[-39.981,-5.07],[-40.294,-6.458],[-40.104,-5.515],[-40.25,-6.941],[-39.456,-18.191],[-36.219,-31.184],[-34.557,-36.108],[-33.735,-38.902],[-23.541,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":85,"s":[{"i":[[-2.383,-11.635],[0,0],[-0.374,-0.557],[0,0],[-0.281,-3.723],[0,0],[0.392,-0.181],[0.065,-0.3],[0,0],[0.018,-0.143],[0,0],[1.869,-2.38],[0,0],[1.02,0.385],[1.873,4.542],[0.491,5.854],[0,0],[0.043,0.307],[0.107,0.457],[0,0],[0,0],[0,0],[-1.045,1.957],[0,0],[-0.22,1.191],[0,0]],"o":[[0,0],[0.248,1.181],[0,0],[1.6,6.438],[0,0],[-0.03,0.188],[0.035,1.045],[-0.074,0.342],[0,0],[0,0],[-1.25,8.157],[-1.459,3.832],[-0.762,0.74],[0,0],[-2.298,-4.049],[0,0],[-0.153,-0.914],[-0.103,-0.742],[0,0],[0,0],[0,0],[0.29,-5.629],[0,0],[0.439,-0.814],[0,0],[3.268,-13.582]],"v":[[-2.539,-74.615],[9.27,-40.084],[10.682,-35.361],[13.15,-26.75],[14.906,-11.714],[15.347,-8.249],[15.34,-6.42],[11.676,-2.54],[14.209,3.251],[11.312,16.105],[3.826,41.028],[-2.411,55.226],[-11.364,61.569],[-14.318,61.924],[-23.985,55.597],[-31.364,37.797],[-37.416,13.473],[-38.592,3.944],[-38.859,2.896],[-39.254,2.569],[-39.48,-1.335],[-40.25,-11.801],[-36.75,-28.924],[-34.922,-37.795],[-33.948,-40.886],[-22.75,-74.334]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":87,"s":[{"i":[[-3.703,-13.779],[0,0],[-0.605,-0.427],[0,0],[1.609,-4.042],[0,0],[2.371,-0.144],[0,0],[-1.54,-1.405],[0.003,-0.148],[0,0],[3.349,-1.11],[0,0],[1.345,0.052],[1.979,2.743],[0.126,5.127],[0,0],[0.134,0.922],[0.335,1.371],[0,0],[0,0],[0,0],[-1.979,1.535],[0,0],[-0.234,1.173],[0,0]],"o":[[0,0],[0.309,1.164],[0,0],[6.269,3.706],[0,0],[-0.093,0.176],[-2.23,0.288],[0,0],[7.416,4.73],[0,0],[-0.918,6.517],[-1.541,2.315],[-1.073,0.268],[0,0],[-3.779,-1.532],[0,0],[0.062,-0.767],[-0.323,-2.225],[0,0],[0,0],[0,0],[-2.495,-5.63],[0,0],[0.539,-0.618],[0,0],[3.535,-11.584]],"v":[[-1.313,-75.217],[10.348,-39.006],[11.946,-36.137],[24.999,-31.66],[27.833,-15.924],[20.119,-7.566],[10.078,-2.381],[0.414,-2.407],[7.449,9.731],[15.191,22.118],[13.996,50.163],[6.611,59.949],[-10.111,49.705],[-14.115,49.921],[-30.508,57.411],[-38.252,44.437],[-39.382,12.597],[-40.285,6.67],[-40.686,2.53],[-41.201,0.949],[-43.338,-3.278],[-51.255,-16.431],[-47.551,-32.782],[-35.954,-36.257],[-34.755,-39.051],[-21.691,-75.729]],"c":true}]},{"t":93,"s":[{"i":[[-2.181,-6.379],[0,0],[-1.113,-0.065],[0,0],[4.353,-4.141],[0,0],[6.129,-0.044],[0,0],[-4.228,-3.206],[-0.037,-0.173],[0,0],[4.737,3.721],[0,0],[0.933,-0.739],[0,0],[-1.371,6.517],[0,0],[0.029,0.362],[0.6,0.566],[0,0],[0,0],[0,0],[-5.568,0.373],[0,0],[-0.4,1.208],[0,0]],"o":[[0,0],[0.409,1.198],[0,0],[5.58,0.33],[0,0],[-0.163,0.155],[-5.667,0.04],[0,0],[7.94,6.02],[0,0],[1.408,6.513],[0,0],[-0.936,-0.734],[0,0],[-4.717,3.742],[0,0],[0.077,-0.365],[-0.069,-0.873],[0,0],[0,0],[0,0],[-4.357,-4.116],[0,0],[1.116,-0.073],[0,0],[2.123,-6.404]],"v":[[-4.493,-81.309],[11.197,-40.761],[13.697,-38.687],[48.877,-35.833],[52.384,-23.057],[37.637,-5.772],[24.643,0.178],[-13.884,-5.634],[18.12,16.012],[28.094,31.124],[33.062,54.826],[19.86,61.279],[-10.28,37.477],[-13.366,37.486],[-41.5,60.759],[-55.236,55.109],[-50.089,7.663],[-50.019,6.566],[-51.051,4.305],[-53.333,1.94],[-57.937,-2.83],[-76.643,-22.738],[-73.192,-35.526],[-37.091,-39.335],[-34.598,-41.439],[-19.122,-80.743]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.775163478477,0.395181394091,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.3,1,0.925,0.741,0.65,0.954,0.703,0.402,1,0.908,0.481,0.063]}},"s":{"a":0,"k":[-20.857,-121.646]},"e":{"a":0,"k":[-4.764,12.627]},"t":1,"nm":"Gradient Fill 4","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[257.144,257.305]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[95,95]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 772","bm":0,"hd":false}],"ip":53,"op":88,"st":21,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Shape Layer 19 :M 4","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[0]},{"t":87,"s":[65]}]},"p":{"a":1,"k":[{"i":{"x":0.67,"y":0.946},"o":{"x":0.167,"y":0.167},"t":50,"s":[362.5,378.973,0],"to":[0,0,0],"ti":[-38,2,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.52,"y":0.093},"t":63,"s":[400,258.473,0],"to":[27,-3,0],"ti":[0,0,0]},{"t":87,"s":[453,485.473,0]}]},"a":{"a":0,"k":[244.221,244.32,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.4,0.4,0.4],"y":[0,0,0]},"t":74,"s":[35,35,100]},{"t":87,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[-3.392,2.471],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[5.3,-3.862],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114],[-14.457,-4.833],[34.539,-1.255],[48.7,-7.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[{"i":[[3.035,-13.085],[0,0],[0.745,-0.064],[0,0],[-2.983,-4.02],[0,0],[-0.077,-0.152],[-0.076,-0.395],[0.039,-0.481],[0.018,-0.117],[0,0],[-4.116,3.683],[0,0],[-0.639,-0.718],[0,0],[0.943,6.329],[0,0],[2.724,3.411],[-0.41,0.55],[-0.965,0.062],[-1.026,1.582],[-0.907,6.191],[2.027,1.531],[0,0],[0.269,1.173],[0,0]],"o":[[0,0],[-0.273,1.164],[0,0],[-5.205,0.347],[0,0],[0.095,0.128],[0.163,0.322],[0.087,0.451],[-0.01,0.118],[0,0],[-0.373,7.597],[0,0],[0.64,-0.714],[0,0],[6.157,7.187],[0,0],[-0.053,-0.354],[-3.174,-3.317],[0,0],[1.772,-1.273],[2.925,-4.509],[0.907,-6.191],[0,0],[-0.747,-0.07],[0,0],[-2.918,-11.089]],"v":[[-22.9,-74.648],[-31.289,-39.185],[-32.961,-37.17],[-46.386,-35.154],[-51.392,-20.48],[-40.53,-2.937],[-40.271,-2.515],[-39.91,-1.429],[-39.836,-0.015],[-39.877,0.337],[-40.171,49.932],[-27.33,59.465],[-13.006,45.537],[-10.893,45.544],[0.287,58.062],[16.785,52.701],[17.127,35.359],[14.578,18.604],[-30.214,-10.142],[17.42,-1.111],[21.625,-3.986],[27.343,-20.059],[23.514,-33.21],[9.502,-35.884],[7.731,-39.676],[-1.634,-75.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-30.747,-43.449],[-31.991,-40.419],[-35.975,-35.621],[-44.261,-23.835],[-39.557,-6.216],[-39.608,-5.341],[-39.506,-2.731],[-39.228,-1.169],[-39.18,-0.768],[-34.234,42.543],[-27.18,57.061],[-22.29,56.831],[-12.971,52.329],[4.095,58.455],[10.543,46.504],[13.674,20.655],[5.979,9.384],[-33.086,-5.287],[6.96,-4.373],[15.22,-3.82],[20.956,-16.917],[18.194,-29.107],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.075,-4],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.137],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.841,-71.667],[-30.598,-48.03],[-31.598,-44.662],[-33.392,-38.015],[-36.681,-26.546],[-38.998,-15.793],[-39.168,-14.767],[-39.173,-11.649],[-38.832,-10.038],[-38.752,-9.621],[-26.961,41.797],[-20.131,57.14],[-13.014,62.135],[-8.762,62.463],[-1.101,57.204],[5.102,41.219],[12.561,4.516],[14.321,-5.453],[-32.574,-7.85],[14.347,-4.92],[13.968,-8.596],[13.061,-19.55],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.007,-72.489]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[2.867,-11.635],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[3.742,-0.843],[-0.018,-0.143],[0,0],[-1.962,-2.38],[0,0],[-1.071,0.385],[-1.966,4.542],[-0.515,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-8.377,0.771],[0,0],[1.313,8.157],[1.531,3.832],[0.8,0.74],[0,0],[2.413,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.024,-74.615],[-34.136,-39.584],[-35.618,-34.861],[-37.94,-26.25],[-40.713,-10.277],[-39.208,-8.124],[-37.889,-6.295],[10.013,-9.728],[-29.747,2.313],[-36.547,16.105],[-28.689,41.028],[-22.142,55.226],[-12.744,61.569],[-9.643,61.924],[0.504,55.597],[8.25,37.797],[14.603,13.473],[15.837,3.944],[16.118,2.896],[16.533,2.568],[16.77,-1.335],[17.578,-11.801],[13.905,-28.924],[10.644,-37.545],[9.621,-40.636],[-0.313,-75.334]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":63,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-6.287,3.706],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-50.088,-31.706],[-53.307,-15.22],[-44.693,-4.612],[-35.375,-1.927],[5.156,-7.578],[-30.858,9.81],[-38.622,22.197],[-37.424,50.242],[-30.017,60.028],[-13.248,49.784],[-9.232,50],[8.963,55.99],[16.73,43.016],[17.613,12.676],[17.014,6.749],[17.416,2.609],[17.932,1.028],[20.076,-3.199],[28.015,-16.352],[24.301,-32.703],[12.67,-36.178],[11.468,-38.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":69,"s":[{"i":[[2.181,-6.477],[0,0],[1.113,-0.066],[0,0],[-4.354,-4.204],[0,0],[-6.13,-0.044],[0,0],[4.229,-3.255],[0.037,-0.175],[0,0],[-4.738,3.778],[0,0],[-0.933,-0.751],[0,0],[1.371,6.617],[0,0],[-0.029,0.367],[-0.6,0.575],[0,0],[0,0],[0,0],[5.57,0.379],[0,0],[0.4,1.227],[0,0]],"o":[[0,0],[-0.409,1.217],[0,0],[-5.581,0.336],[0,0],[0.163,0.157],[5.669,0.041],[0,0],[-7.941,6.113],[0,0],[-1.408,6.613],[0,0],[0.936,-0.746],[0,0],[4.718,3.8],[0,0],[-0.077,-0.371],[0.069,-0.887],[0,0],[0,0],[0,0],[4.358,-4.179],[0,0],[-1.117,-0.074],[0,0],[-2.124,-6.503]],"v":[[-18.772,-81.723],[-34.464,-40.553],[-36.965,-38.447],[-72.152,-35.55],[-75.659,-22.577],[-60.91,-5.027],[-47.913,1.014],[-9.379,-4.887],[-41.389,17.091],[-51.365,32.435],[-56.334,56.501],[-43.129,63.053],[-12.983,38.886],[-9.897,38.894],[18.242,62.525],[31.981,56.788],[26.833,8.615],[26.763,7.5],[27.795,5.205],[30.078,2.803],[34.683,-2.04],[53.392,-22.253],[49.94,-35.238],[13.833,-39.105],[11.339,-41.241],[-4.139,-81.149]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":74,"s":[{"i":[[2.223,-6.477],[0,0],[1.134,-0.066],[0,0],[-5.103,-4.204],[0,0],[-7.185,-0.044],[0,0],[4.956,-3.255],[0.044,-0.175],[0,0],[-5.553,3.778],[0,0],[-1.094,-0.751],[0,0],[1.607,6.617],[0,0],[-0.033,0.367],[-0.703,0.575],[0,0],[0,0],[0,0],[6.528,0.379],[0,0],[0.408,1.227],[0,0]],"o":[[0,0],[-0.417,1.217],[0,0],[-6.541,0.336],[0,0],[0.191,0.157],[6.644,0.041],[0,0],[-9.307,6.113],[0,0],[-1.65,6.613],[0,0],[1.097,-0.746],[0,0],[5.53,3.8],[0,0],[-0.09,-0.371],[0.081,-0.887],[0,0],[0,0],[0,0],[5.107,-4.179],[0,0],[-1.138,-0.074],[0,0],[-2.164,-6.503]],"v":[[-18.33,-80.973],[-36.027,-41.803],[-38.575,-39.697],[-82.549,-34.8],[-85.91,-22.077],[-66.874,-5.027],[-53.015,0.389],[-8.927,-4.887],[-46.443,17.091],[-58.135,32.435],[-62.46,54.251],[-50.878,62.053],[-14.107,38.636],[-10.489,38.644],[28.427,62.025],[39.548,54.038],[31.186,9.865],[31.104,8.75],[32.314,6.455],[34.99,4.053],[40.386,-0.79],[63.893,-21.503],[59.847,-34.488],[15.75,-38.855],[13.209,-40.991],[-4.716,-80.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[-2.446,-6.196],[0,0],[-1.248,-0.063],[0,0],[4.993,-4.022],[0,0],[0.129,-0.152],[0.127,-0.395],[-0.067,-0.481],[-0.03,-0.117],[0,0],[5.434,3.614],[0,0],[1.07,-0.718],[0,0],[-1.573,6.33],[-0.901,2.803],[-4.74,3.381],[0.688,0.55],[5.745,0.308],[3.389,2.471],[0,0],[-6.388,0.362],[0,0],[-0.448,1.173],[0,0]],"o":[[0,0],[0.459,1.164],[0,0],[6.401,0.321],[0,0],[-0.159,0.128],[-0.273,0.322],[-0.145,0.451],[0.016,0.118],[0,0],[1.615,6.326],[0,0],[-1.073,-0.713],[0,0],[-5.412,3.635],[0,0],[1.413,-4.394],[1.825,-1.302],[0,0],[-7.973,-1.028],[-5.296,-3.862],[-4.998,-3.998],[0,0],[1.252,-0.071],[0,0],[2.381,-6.221]],"v":[[-5.247,-80.804],[12.866,-40.968],[15.67,-38.954],[58.984,-34.482],[63.007,-22.073],[30.978,6.216],[30.545,6.638],[29.942,7.725],[29.819,9.139],[29.888,9.491],[38.835,53.575],[27.99,61.278],[-10.052,38.242],[-13.592,38.25],[-51.574,61.49],[-62.458,53.85],[-58.162,31.43],[-47.919,18.184],[-9.558,-4.833],[-55.946,0.583],[-70.036,-6.513],[-87.015,-21.762],[-83.056,-34.184],[-39.181,-38.983],[-36.385,-41.027],[-18.851,-80.734]],"c":true}]},{"t":84,"s":[{"i":[[-3.127,-13.085],[0,0],[-0.768,-0.064],[0,0],[3.073,-4.02],[0,0],[0.079,-0.152],[0.078,-0.395],[-0.041,-0.481],[-0.018,-0.117],[0,0],[4.241,3.683],[0,0],[0.659,-0.718],[0,0],[-0.972,6.329],[0,0],[-2.807,3.411],[0.423,0.551],[0.994,0.062],[1.057,1.582],[0.934,6.191],[-2.089,1.531],[0,0],[-0.277,1.173],[0,0]],"o":[[0,0],[0.281,1.164],[0,0],[5.362,0.347],[0,0],[-0.098,0.128],[-0.168,0.322],[-0.089,0.451],[0.01,0.118],[0,0],[0.385,7.597],[0,0],[-0.66,-0.714],[0,0],[-6.343,7.187],[0,0],[0.054,-0.354],[3.27,-3.317],[0,0],[-1.825,-1.273],[-3.014,-4.509],[-0.934,-6.191],[0,0],[0.77,-0.07],[0,0],[3.006,-11.089]],"v":[[-0.427,-74.648],[8.215,-39.185],[9.939,-37.17],[22.27,-35.154],[27.427,-20.48],[17.736,-2.937],[17.47,-2.515],[17.098,-1.429],[17.021,-0.015],[17.063,0.337],[18.116,49.682],[4.137,59.465],[-10.621,45.537],[-12.798,45.544],[-24.316,58.062],[-41.313,52.701],[-41.6,32.109],[-38.974,15.354],[-25.076,-3.142],[-41.902,-4.361],[-46.234,-7.236],[-52.191,-20.059],[-48.246,-33.21],[-33.81,-35.884],[-31.986,-39.676],[-22.337,-75.121]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.819607843137,0.521568627451,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.195,1,1,1,0.45,1,0.945,0.671,0.705,1,0.89,0.341,0.853,0.988,0.804,0.222,1,0.976,0.718,0.102]}},"s":{"a":0,"k":[-29.383,-83.036]},"e":{"a":0,"k":[-11.25,17]},"t":1,"nm":"Gradient Fill 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[243.876,244.742]},"a":{"a":0,"k":[243.876,244.742]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":50,"op":86,"st":23,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Shape Layer 19 :M 5","sr":1,"ks":{"r":{"a":0,"k":12},"p":{"a":1,"k":[{"i":{"x":0.67,"y":0.934},"o":{"x":0.167,"y":0.167},"t":46,"s":[319.105,348.21,0],"to":[0,0,0],"ti":[41,2,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.346,"y":0.061},"t":59,"s":[265.912,262.233,0],"to":[-41.705,1.989,0],"ti":[0,0,0]},{"t":85,"s":[225.105,514.21,0]}]},"a":{"a":0,"k":[244.221,244.32,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.4,0.4,0.4],"y":[0,0,0]},"t":73,"s":[-40,40,100]},{"t":85,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[3.035,-13.085],[0,0],[0.745,-0.064],[0,0],[-2.983,-4.02],[0,0],[-0.077,-0.152],[-0.076,-0.395],[0.039,-0.481],[0.018,-0.117],[0,0],[-4.116,3.683],[0,0],[-0.639,-0.718],[0,0],[0.943,6.329],[0,0],[2.724,3.411],[-0.41,0.55],[-0.965,0.062],[-1.026,1.582],[-0.907,6.191],[2.027,1.531],[0,0],[0.269,1.173],[0,0]],"o":[[0,0],[-0.273,1.164],[0,0],[-5.205,0.347],[0,0],[0.095,0.128],[0.163,0.322],[0.087,0.451],[-0.01,0.118],[0,0],[-0.373,7.597],[0,0],[0.64,-0.714],[0,0],[6.157,7.187],[0,0],[-0.053,-0.354],[-3.174,-3.317],[0,0],[1.772,-1.273],[2.925,-4.509],[0.907,-6.191],[0,0],[-0.747,-0.07],[0,0],[-2.918,-11.089]],"v":[[-22.9,-74.648],[-31.289,-39.185],[-32.961,-37.17],[-46.386,-35.154],[-51.392,-20.48],[-40.53,-2.937],[-40.271,-2.515],[-39.91,-1.429],[-39.836,-0.015],[-39.877,0.337],[-40.171,49.932],[-27.33,59.465],[-13.006,45.537],[-10.893,45.544],[0.287,58.062],[16.785,52.701],[17.127,35.359],[14.578,18.604],[-30.214,-10.142],[17.42,-1.111],[21.625,-3.986],[27.343,-20.059],[23.514,-33.21],[9.502,-35.884],[7.731,-39.676],[-1.634,-75.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-30.747,-43.449],[-31.991,-40.419],[-35.975,-35.621],[-44.261,-23.835],[-39.557,-6.216],[-39.608,-5.341],[-39.506,-2.731],[-39.228,-1.169],[-39.18,-0.768],[-34.234,42.543],[-27.18,57.061],[-22.29,56.831],[-12.971,52.329],[4.095,58.455],[10.543,46.504],[13.674,20.655],[5.979,9.384],[-33.086,-5.287],[6.96,-4.373],[15.22,-3.82],[20.956,-16.917],[18.194,-29.107],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.075,-4],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.137],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.841,-71.667],[-30.598,-48.03],[-31.598,-44.662],[-33.392,-38.015],[-36.681,-26.546],[-38.998,-15.793],[-39.168,-14.767],[-39.173,-11.649],[-38.832,-10.038],[-38.752,-9.621],[-26.961,41.797],[-20.131,57.14],[-13.014,62.135],[-8.762,62.463],[-1.101,57.204],[5.102,41.219],[12.561,4.516],[14.321,-5.453],[-32.574,-7.85],[14.347,-4.92],[13.968,-8.596],[13.061,-19.55],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.007,-72.489]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[2.867,-11.635],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[3.742,-0.843],[-0.018,-0.143],[0,0],[-1.962,-2.38],[0,0],[-1.071,0.385],[-1.966,4.542],[-0.515,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-8.377,0.771],[0,0],[1.313,8.157],[1.531,3.832],[0.8,0.74],[0,0],[2.413,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.024,-74.615],[-34.136,-39.584],[-35.618,-34.861],[-37.94,-26.25],[-40.713,-10.277],[-39.208,-8.124],[-37.889,-6.295],[10.013,-9.728],[-29.747,2.313],[-36.547,16.105],[-28.689,41.028],[-22.142,55.226],[-12.744,61.569],[-9.643,61.924],[0.504,55.597],[8.25,37.797],[14.603,13.473],[15.837,3.944],[16.118,2.896],[16.533,2.568],[16.77,-1.335],[17.578,-11.801],[13.905,-28.924],[10.644,-37.545],[9.621,-40.636],[-0.313,-75.334]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":52,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-6.287,3.706],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-50.088,-31.706],[-53.307,-15.22],[-44.693,-4.612],[-35.375,-1.927],[5.156,-7.578],[-30.858,9.81],[-38.622,22.197],[-37.424,50.242],[-30.017,60.028],[-13.248,49.784],[-9.232,50],[8.963,55.99],[16.73,43.016],[17.613,12.676],[17.014,6.749],[17.416,2.609],[17.932,1.028],[20.076,-3.199],[28.015,-16.352],[24.301,-32.703],[12.67,-36.178],[11.468,-38.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":58,"s":[{"i":[[2.181,-6.477],[0,0],[1.113,-0.066],[0,0],[-4.354,-4.204],[0,0],[-6.13,-0.044],[0,0],[4.229,-3.255],[0.037,-0.175],[0,0],[-4.738,3.778],[0,0],[-0.933,-0.751],[0,0],[1.371,6.617],[0,0],[-0.029,0.367],[-0.6,0.575],[0,0],[0,0],[0,0],[5.57,0.379],[0,0],[0.4,1.227],[0,0]],"o":[[0,0],[-0.409,1.217],[0,0],[-5.581,0.336],[0,0],[0.163,0.157],[5.669,0.041],[0,0],[-7.941,6.113],[0,0],[-1.408,6.613],[0,0],[0.936,-0.746],[0,0],[4.718,3.8],[0,0],[-0.077,-0.371],[0.069,-0.887],[0,0],[0,0],[0,0],[4.358,-4.179],[0,0],[-1.117,-0.074],[0,0],[-2.124,-6.503]],"v":[[-18.772,-81.723],[-34.464,-40.553],[-36.965,-38.447],[-72.152,-35.55],[-75.659,-22.577],[-60.91,-5.027],[-47.913,1.014],[-9.379,-4.887],[-41.389,17.091],[-51.365,32.435],[-56.334,56.501],[-43.129,63.053],[-12.983,38.886],[-9.897,38.894],[18.242,62.525],[31.981,56.788],[26.833,8.615],[26.763,7.5],[27.795,5.205],[30.078,2.803],[34.683,-2.04],[53.392,-22.253],[49.94,-35.238],[13.833,-39.105],[11.339,-41.241],[-4.139,-81.149]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":63,"s":[{"i":[[2.223,-6.477],[0,0],[1.134,-0.066],[0,0],[-5.103,-4.204],[0,0],[-7.185,-0.044],[0,0],[4.956,-3.255],[0.044,-0.175],[0,0],[-5.553,3.778],[0,0],[-1.094,-0.751],[0,0],[1.607,6.617],[0,0],[-0.033,0.367],[-0.703,0.575],[0,0],[0,0],[0,0],[6.528,0.379],[0,0],[0.408,1.227],[0,0]],"o":[[0,0],[-0.417,1.217],[0,0],[-6.541,0.336],[0,0],[0.191,0.157],[6.644,0.041],[0,0],[-9.307,6.113],[0,0],[-1.65,6.613],[0,0],[1.097,-0.746],[0,0],[5.53,3.8],[0,0],[-0.09,-0.371],[0.081,-0.887],[0,0],[0,0],[0,0],[5.107,-4.179],[0,0],[-1.138,-0.074],[0,0],[-2.164,-6.503]],"v":[[-18.33,-80.973],[-36.027,-41.803],[-38.575,-39.697],[-82.549,-34.8],[-85.91,-22.077],[-66.874,-5.027],[-53.015,0.389],[-8.927,-4.887],[-46.443,17.091],[-58.135,32.435],[-62.46,54.251],[-50.878,62.053],[-14.107,38.636],[-10.489,38.644],[28.427,62.025],[39.548,54.038],[31.186,9.865],[31.104,8.75],[32.314,6.455],[34.99,4.053],[40.386,-0.79],[63.893,-21.503],[59.847,-34.488],[15.75,-38.855],[13.209,-40.991],[-4.716,-80.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64,"s":[{"i":[[-2.446,-6.196],[0,0],[-1.248,-0.063],[0,0],[4.993,-4.022],[0,0],[0.129,-0.152],[0.127,-0.395],[-0.067,-0.481],[-0.03,-0.117],[0,0],[5.434,3.614],[0,0],[1.07,-0.718],[0,0],[-1.573,6.33],[-0.901,2.803],[-4.74,3.381],[0.688,0.55],[5.745,0.308],[3.389,2.471],[0,0],[-6.388,0.362],[0,0],[-0.448,1.173],[0,0]],"o":[[0,0],[0.459,1.164],[0,0],[6.401,0.321],[0,0],[-0.159,0.128],[-0.273,0.322],[-0.145,0.451],[0.016,0.118],[0,0],[1.615,6.326],[0,0],[-1.073,-0.713],[0,0],[-5.412,3.635],[0,0],[1.413,-4.394],[1.825,-1.302],[0,0],[-7.973,-1.028],[-5.296,-3.862],[-4.998,-3.998],[0,0],[1.252,-0.071],[0,0],[2.381,-6.221]],"v":[[-5.247,-80.804],[12.866,-40.968],[15.67,-38.954],[58.984,-34.482],[63.007,-22.073],[30.978,6.216],[30.545,6.638],[29.942,7.725],[29.819,9.139],[29.888,9.491],[38.835,53.575],[27.99,61.278],[-10.052,38.242],[-13.592,38.25],[-51.574,61.49],[-62.458,53.85],[-58.162,31.43],[-47.919,18.184],[-9.558,-4.833],[-55.946,0.583],[-70.036,-6.513],[-87.015,-21.762],[-83.056,-34.184],[-39.181,-38.983],[-36.385,-41.027],[-18.851,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[-3.127,-13.085],[0,0],[-0.768,-0.064],[0,0],[3.073,-4.02],[0,0],[0.079,-0.152],[0.078,-0.395],[-0.041,-0.481],[-0.018,-0.117],[0,0],[4.241,3.683],[0,0],[0.659,-0.718],[0,0],[-0.972,6.329],[0,0],[-2.807,3.411],[0.423,0.551],[0.994,0.062],[1.057,1.582],[0.934,6.191],[-2.089,1.531],[0,0],[-0.277,1.173],[0,0]],"o":[[0,0],[0.281,1.164],[0,0],[5.362,0.347],[0,0],[-0.098,0.128],[-0.168,0.322],[-0.089,0.451],[0.01,0.118],[0,0],[0.385,7.597],[0,0],[-0.66,-0.714],[0,0],[-6.343,7.187],[0,0],[0.054,-0.354],[3.27,-3.317],[0,0],[-1.825,-1.273],[-3.014,-4.509],[-0.934,-6.191],[0,0],[0.77,-0.07],[0,0],[3.006,-11.089]],"v":[[-0.427,-74.648],[8.215,-39.185],[9.939,-37.17],[22.27,-35.154],[27.427,-20.48],[17.736,-2.937],[17.47,-2.515],[17.098,-1.429],[17.021,-0.015],[17.063,0.337],[18.116,49.682],[4.137,59.465],[-10.621,45.537],[-12.798,45.544],[-24.316,58.062],[-41.313,52.701],[-41.6,32.109],[-38.974,15.354],[-25.076,-3.142],[-41.902,-4.361],[-46.234,-7.236],[-52.191,-20.059],[-48.246,-33.21],[-33.81,-35.884],[-31.986,-39.676],[-22.337,-75.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[-4.399,-16.739],[0,0],[-0.46,-0.482],[0,0],[0.869,-4.112],[0,0],[0.062,-0.187],[0.105,-0.436],[0.075,-0.542],[0.015,-0.135],[0,0],[3.127,-1.741],[0,0],[1.38,0.156],[2.361,3.154],[0.482,5.051],[0,0],[-2.948,2.259],[0.128,0.137],[0.643,0.053],[0.547,0.474],[0,0],[-2.021,1.973],[0,0],[-0.266,1.193],[0,0]],"o":[[0,0],[0.272,1.183],[0,0],[4.992,2.851],[0,0],[-0.067,0.177],[-0.132,0.396],[-0.12,0.498],[-0.018,0.133],[0,0],[-1.619,6.968],[-3.562,2.689],[-1.054,0.403],[0,0],[-4.284,-1.356],[0,0],[-0.135,-0.831],[0.991,-0.83],[0,0],[-1.076,-0.416],[-1.558,-1.351],[-3.643,-5.423],[0,0],[0.568,-0.702],[0,0],[4.183,-13.708]],"v":[[0.637,-72.352],[8.336,-42.199],[9.652,-39.169],[14.169,-34.781],[23.006,-23.835],[17.155,-5.341],[17.209,-4.466],[17.101,-1.856],[16.807,-0.294],[16.757,0.107],[15.024,41.668],[9.562,57.061],[0.89,56.831],[-11.218,50.829],[-27.021,58.455],[-36.092,46.254],[-38.062,15.655],[-33.59,2.259],[-27.598,-4.787],[-31.849,-5.748],[-38.698,-8.82],[-44.857,-16.917],[-43.935,-30.357],[-33.857,-35.277],[-32.565,-38.654],[-23.522,-73.084]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[-4.692,-17.958],[0,0],[-0.309,-0.622],[0,0],[-1.161,-4],[0,0],[0.052,-0.199],[0.11,-0.45],[0.119,-0.562],[0.028,-0.141],[0,0],[2.504,-3.548],[0,0],[1.606,0.447],[3.214,4.206],[1.055,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.705,2.168],[0,0],[-0.248,1.199],[0,0]],"o":[[0,0],[0.254,1.189],[0,0],[0.657,3.942],[0,0],[-0.051,0.194],[-0.11,0.421],[-0.126,0.514],[-0.029,0.137],[0,0],[-2.364,6.758],[-2.504,3.548],[-1.163,0.775],[0,0],[-3.214,-4.206],[0,0],[-0.207,-0.989],[0,0],[0,0],[0,0],[0,0],[0.946,-5.864],[0,0],[0.455,-0.912],[0,0],[4.456,-14.581]],"v":[[0.834,-71.667],[8.131,-48.03],[9.21,-44.662],[11.147,-38.015],[14.698,-26.546],[16.951,-12.793],[17.134,-11.767],[17.14,-8.649],[16.771,-7.038],[16.685,-6.621],[4.203,41.797],[-3.171,57.14],[-10.855,62.135],[-15.446,62.463],[-23.718,57.204],[-30.416,41.219],[-40.572,1.266],[-42.472,-8.703],[-40.568,-8.85],[-42.5,-8.17],[-42.091,-11.846],[-40.76,-19.55],[-38.301,-28.038],[-37.1,-34.412],[-36.093,-37.651],[-24.915,-72.489]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[-2.633,-11.634],[0,0],[-0.226,-0.623],[0,0],[0.932,-3.012],[0,0],[0.378,-0.181],[0.062,-0.3],[-0.405,-0.843],[0.017,-0.143],[0,0],[1.799,-2.381],[0,0],[0.983,0.385],[1.805,4.541],[0.474,5.854],[0,0],[0.041,0.307],[0.103,0.457],[0,0],[0,0],[0,0],[-1.006,1.957],[0,0],[-0.212,1.191],[0,0]],"o":[[0,0],[0.239,1.181],[0,0],[1.068,6.586],[0,0],[-0.029,0.188],[-0.372,0.376],[-0.071,0.342],[0.907,0.771],[0,0],[-1.202,8.157],[-1.404,3.833],[-0.734,0.74],[0,0],[-2.215,-4.048],[0,0],[-0.147,-0.914],[-0.099,-0.742],[0,0],[0,0],[0,0],[0.278,-5.629],[0,0],[0.423,-0.814],[0,0],[3.603,-13.583]],"v":[[-0.244,-76.368],[11.209,-40.34],[12.859,-34.816],[14.712,-28.278],[15.1,-9.035],[13.72,-6.882],[12.511,-5.053],[12.317,-4.471],[14.629,-1.82],[15.754,2.971],[4.601,41.023],[-0.149,56.222],[-10.377,62.32],[-13.222,62.675],[-24.161,56.102],[-30,38.304],[-37.573,8.481],[-39.062,-0.797],[-39.32,-1.845],[-39.701,-2.172],[-39.919,-6.076],[-40.664,-16.542],[-38.035,-31.665],[-35.859,-37.788],[-34.922,-40.879],[-23.322,-75.33]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[-3.514,-13.779],[0,0],[-0.574,-0.427],[0,0],[1.527,-4.042],[0,0],[2.25,-0.144],[0,0],[-1.462,-1.405],[0.003,-0.148],[0,0],[3.178,-1.11],[0,0],[1.276,0.052],[1.878,2.743],[0.12,5.127],[0,0],[0.127,0.922],[0.318,1.371],[0,0],[0,0],[0,0],[-1.878,1.535],[0,0],[-0.222,1.173],[0,0]],"o":[[0,0],[0.293,1.164],[0,0],[5.949,3.706],[0,0],[-0.089,0.176],[-2.117,0.288],[0,0],[7.038,4.73],[0,0],[-0.872,6.517],[-1.463,2.315],[-1.018,0.268],[0,0],[-3.586,-1.532],[0,0],[0.059,-0.767],[-0.306,-2.225],[0,0],[0,0],[0,0],[-2.368,-5.63],[0,0],[0.511,-0.618],[0,0],[3.355,-11.584]],"v":[[-2.711,-75.388],[6.855,-38.927],[8.371,-36.058],[22.301,-31.706],[25.223,-16.97],[17.072,-6.362],[8.254,-3.677],[-0.005,-3.078],[4.159,2.81],[13.398,12.446],[10.317,50.242],[3.309,60.028],[-12.56,49.784],[-16.36,50],[-33.578,55.99],[-40.927,43.016],[-41.827,10.176],[-41.261,4.249],[-41.641,0.109],[-42.13,-1.472],[-44.158,-5.699],[-51.671,-18.852],[-48.091,-32.703],[-37.085,-36.178],[-35.948,-38.972],[-23.55,-75.65]],"c":true}]},{"t":84,"s":[{"i":[[-2.133,-6.477],[0,0],[-1.089,-0.066],[0,0],[4.258,-4.204],[0,0],[5.996,-0.044],[0,0],[-4.136,-3.255],[-0.036,-0.175],[0,0],[4.634,3.778],[0,0],[0.913,-0.751],[0,0],[-1.341,6.617],[0,0],[0.028,0.367],[0.587,0.575],[0,0],[0,0],[0,0],[-5.447,0.379],[0,0],[-0.391,1.227],[0,0]],"o":[[0,0],[0.4,1.217],[0,0],[5.458,0.336],[0,0],[-0.159,0.157],[-5.544,0.041],[0,0],[7.767,6.113],[0,0],[1.377,6.613],[0,0],[-0.915,-0.746],[0,0],[-4.615,3.8],[0,0],[0.075,-0.371],[-0.067,-0.887],[0,0],[0,0],[0,0],[-4.262,-4.179],[0,0],[1.092,-0.074],[0,0],[2.077,-6.503]],"v":[[-3.659,-81.723],[11.689,-40.553],[14.135,-38.447],[48.548,-35.55],[51.979,-22.577],[37.553,-5.027],[24.842,1.014],[-12.845,-4.887],[18.461,17.091],[28.218,32.435],[33.078,56.501],[20.163,63.053],[-9.321,38.886],[-12.339,38.894],[-39.86,62.525],[-53.297,56.788],[-48.262,8.615],[-48.193,7.5],[-49.203,5.205],[-51.436,2.803],[-55.939,-2.04],[-74.238,-22.253],[-70.862,-35.238],[-35.547,-39.105],[-33.109,-41.241],[-17.97,-81.149]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.819607843137,0.521568627451,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.195,1,1,1,0.45,1,0.945,0.671,0.705,1,0.89,0.341,0.853,0.988,0.804,0.222,1,0.976,0.718,0.102]}},"s":{"a":0,"k":[-29.383,-83.036]},"e":{"a":0,"k":[-11.25,17]},"t":1,"nm":"Gradient Fill 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[243.876,244.742]},"a":{"a":0,"k":[243.876,244.742]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":46,"op":84,"st":12,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Shape Layer 19 :M 6","sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.67,"y":0.935},"o":{"x":0.167,"y":0.167},"t":43,"s":[352.5,350,0],"to":[0,0,0],"ti":[-38,2,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.35,"y":0.06},"t":56,"s":[404.5,261,0],"to":[81,0,0],"ti":[0,0,0]},{"t":81,"s":[510.5,520,0]}]},"a":{"a":0,"k":[244.221,244.32,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.4,0.4,0.4],"y":[0,0,0]},"t":69,"s":[35,35,100]},{"t":81,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[-3.392,2.471],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[5.3,-3.862],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114],[-14.457,-4.833],[34.539,-1.255],[48.7,-7.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":51,"s":[{"i":[[3.035,-13.085],[0,0],[0.745,-0.064],[0,0],[-2.983,-4.02],[0,0],[-0.077,-0.152],[-0.076,-0.395],[0.039,-0.481],[0.018,-0.117],[0,0],[-4.116,3.683],[0,0],[-0.639,-0.718],[0,0],[0.943,6.329],[0,0],[2.724,3.411],[-0.41,0.55],[-0.965,0.062],[-1.026,1.582],[-0.907,6.191],[2.027,1.531],[0,0],[0.269,1.173],[0,0]],"o":[[0,0],[-0.273,1.164],[0,0],[-5.205,0.347],[0,0],[0.095,0.128],[0.163,0.322],[0.087,0.451],[-0.01,0.118],[0,0],[-0.373,7.597],[0,0],[0.64,-0.714],[0,0],[6.157,7.187],[0,0],[-0.053,-0.354],[-3.174,-3.317],[0,0],[1.772,-1.273],[2.925,-4.509],[0.907,-6.191],[0,0],[-0.747,-0.07],[0,0],[-2.918,-11.089]],"v":[[-22.9,-74.648],[-31.289,-39.185],[-32.961,-37.17],[-46.386,-35.154],[-51.392,-20.48],[-40.53,-2.937],[-40.271,-2.515],[-39.91,-1.429],[-39.836,-0.015],[-39.877,0.337],[-40.171,49.932],[-27.33,59.465],[-13.006,45.537],[-10.893,45.544],[0.287,58.062],[16.785,52.701],[17.127,35.359],[14.578,18.604],[-30.214,-10.142],[17.42,-1.111],[21.625,-3.986],[27.343,-20.059],[23.514,-33.21],[9.502,-35.884],[7.731,-39.676],[-1.634,-75.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":52,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-30.747,-43.449],[-31.991,-40.419],[-35.975,-35.621],[-44.261,-23.835],[-39.557,-6.216],[-39.608,-5.341],[-39.506,-2.731],[-39.228,-1.169],[-39.18,-0.768],[-34.234,42.543],[-27.18,57.061],[-22.29,56.831],[-12.971,52.329],[4.095,58.455],[10.543,46.504],[13.674,20.655],[5.979,9.384],[-33.086,-5.287],[6.96,-4.373],[15.22,-3.82],[20.956,-16.917],[18.194,-29.107],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.075,-4],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.137],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.841,-71.667],[-30.598,-48.03],[-31.598,-44.662],[-33.392,-38.015],[-36.681,-26.546],[-38.998,-15.793],[-39.168,-14.767],[-39.173,-11.649],[-38.832,-10.038],[-38.752,-9.621],[-26.961,41.797],[-20.131,57.14],[-13.014,62.135],[-8.762,62.463],[-1.101,57.204],[5.102,41.219],[12.561,4.516],[14.321,-5.453],[-32.574,-7.85],[14.347,-4.92],[13.968,-8.596],[13.061,-19.55],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.007,-72.489]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[2.867,-11.635],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[3.742,-0.843],[-0.018,-0.143],[0,0],[-1.962,-2.38],[0,0],[-1.071,0.385],[-1.966,4.542],[-0.515,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-8.377,0.771],[0,0],[1.313,8.157],[1.531,3.832],[0.8,0.74],[0,0],[2.413,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.024,-74.615],[-34.136,-39.584],[-35.618,-34.861],[-37.94,-26.25],[-40.713,-10.277],[-39.208,-8.124],[-37.889,-6.295],[10.013,-9.728],[-29.747,2.313],[-36.547,16.105],[-28.689,41.028],[-22.142,55.226],[-12.744,61.569],[-9.643,61.924],[0.504,55.597],[8.25,37.797],[14.603,13.473],[15.837,3.944],[16.118,2.896],[16.533,2.568],[16.77,-1.335],[17.578,-11.801],[13.905,-28.924],[10.644,-37.545],[9.621,-40.636],[-0.313,-75.334]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-6.287,3.706],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-50.088,-31.706],[-53.307,-15.22],[-44.693,-4.612],[-35.375,-1.927],[5.156,-7.578],[-30.858,9.81],[-38.622,22.197],[-37.424,50.242],[-30.017,60.028],[-13.248,49.784],[-9.232,50],[8.963,55.99],[16.73,43.016],[17.613,12.676],[17.014,6.749],[17.416,2.609],[17.932,1.028],[20.076,-3.199],[28.015,-16.352],[24.301,-32.703],[12.67,-36.178],[11.468,-38.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":62,"s":[{"i":[[2.181,-6.477],[0,0],[1.113,-0.066],[0,0],[-4.354,-4.204],[0,0],[-6.13,-0.044],[0,0],[4.229,-3.255],[0.037,-0.175],[0,0],[-4.738,3.778],[0,0],[-0.933,-0.751],[0,0],[1.371,6.617],[0,0],[-0.029,0.367],[-0.6,0.575],[0,0],[0,0],[0,0],[5.57,0.379],[0,0],[0.4,1.227],[0,0]],"o":[[0,0],[-0.409,1.217],[0,0],[-5.581,0.336],[0,0],[0.163,0.157],[5.669,0.041],[0,0],[-7.941,6.113],[0,0],[-1.408,6.613],[0,0],[0.936,-0.746],[0,0],[4.718,3.8],[0,0],[-0.077,-0.371],[0.069,-0.887],[0,0],[0,0],[0,0],[4.358,-4.179],[0,0],[-1.117,-0.074],[0,0],[-2.124,-6.503]],"v":[[-18.772,-81.723],[-34.464,-40.553],[-36.965,-38.447],[-72.152,-35.55],[-75.659,-22.577],[-60.91,-5.027],[-47.913,1.014],[-9.379,-4.887],[-41.389,17.091],[-51.365,32.435],[-56.334,56.501],[-43.129,63.053],[-12.983,38.886],[-9.897,38.894],[18.242,62.525],[31.981,56.788],[26.833,8.615],[26.763,7.5],[27.795,5.205],[30.078,2.803],[34.683,-2.04],[53.392,-22.253],[49.94,-35.238],[13.833,-39.105],[11.339,-41.241],[-4.139,-81.149]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":67,"s":[{"i":[[2.223,-6.477],[0,0],[1.134,-0.066],[0,0],[-5.103,-4.204],[0,0],[-7.185,-0.044],[0,0],[4.956,-3.255],[0.044,-0.175],[0,0],[-5.553,3.778],[0,0],[-1.094,-0.751],[0,0],[1.607,6.617],[0,0],[-0.033,0.367],[-0.703,0.575],[0,0],[0,0],[0,0],[6.528,0.379],[0,0],[0.408,1.227],[0,0]],"o":[[0,0],[-0.417,1.217],[0,0],[-6.541,0.336],[0,0],[0.191,0.157],[6.644,0.041],[0,0],[-9.307,6.113],[0,0],[-1.65,6.613],[0,0],[1.097,-0.746],[0,0],[5.53,3.8],[0,0],[-0.09,-0.371],[0.081,-0.887],[0,0],[0,0],[0,0],[5.107,-4.179],[0,0],[-1.138,-0.074],[0,0],[-2.164,-6.503]],"v":[[-18.33,-80.973],[-36.027,-41.803],[-38.575,-39.697],[-82.549,-34.8],[-85.91,-22.077],[-66.874,-5.027],[-53.015,0.389],[-8.927,-4.887],[-46.443,17.091],[-58.135,32.435],[-62.46,54.251],[-50.878,62.053],[-14.107,38.636],[-10.489,38.644],[28.427,62.025],[39.548,54.038],[31.186,9.865],[31.104,8.75],[32.314,6.455],[34.99,4.053],[40.386,-0.79],[63.893,-21.503],[59.847,-34.488],[15.75,-38.855],[13.209,-40.991],[-4.716,-80.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[-2.446,-6.196],[0,0],[-1.248,-0.063],[0,0],[4.993,-4.022],[0,0],[0.129,-0.152],[0.127,-0.395],[-0.067,-0.481],[-0.03,-0.117],[0,0],[5.434,3.614],[0,0],[1.07,-0.718],[0,0],[-1.573,6.33],[-0.901,2.803],[-4.74,3.381],[0.688,0.55],[5.745,0.308],[3.389,2.471],[0,0],[-6.388,0.362],[0,0],[-0.448,1.173],[0,0]],"o":[[0,0],[0.459,1.164],[0,0],[6.401,0.321],[0,0],[-0.159,0.128],[-0.273,0.322],[-0.145,0.451],[0.016,0.118],[0,0],[1.615,6.326],[0,0],[-1.073,-0.713],[0,0],[-5.412,3.635],[0,0],[1.413,-4.394],[1.825,-1.302],[0,0],[-7.973,-1.028],[-5.296,-3.862],[-4.998,-3.998],[0,0],[1.252,-0.071],[0,0],[2.381,-6.221]],"v":[[-5.247,-80.804],[12.866,-40.968],[15.67,-38.954],[58.984,-34.482],[63.007,-22.073],[30.978,6.216],[30.545,6.638],[29.942,7.725],[29.819,9.139],[29.888,9.491],[38.835,53.575],[27.99,61.278],[-10.052,38.242],[-13.592,38.25],[-51.574,61.49],[-62.458,53.85],[-58.162,31.43],[-47.919,18.184],[-9.558,-4.833],[-55.946,0.583],[-70.036,-6.513],[-87.015,-21.762],[-83.056,-34.184],[-39.181,-38.983],[-36.385,-41.027],[-18.851,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[-3.127,-13.085],[0,0],[-0.768,-0.064],[0,0],[3.073,-4.02],[0,0],[0.079,-0.152],[0.078,-0.395],[-0.041,-0.481],[-0.018,-0.117],[0,0],[4.241,3.683],[0,0],[0.659,-0.718],[0,0],[-0.972,6.329],[0,0],[-2.807,3.411],[0.423,0.551],[0.994,0.062],[1.057,1.582],[0.934,6.191],[-2.089,1.531],[0,0],[-0.277,1.173],[0,0]],"o":[[0,0],[0.281,1.164],[0,0],[5.362,0.347],[0,0],[-0.098,0.128],[-0.168,0.322],[-0.089,0.451],[0.01,0.118],[0,0],[0.385,7.597],[0,0],[-0.66,-0.714],[0,0],[-6.343,7.187],[0,0],[0.054,-0.354],[3.27,-3.317],[0,0],[-1.825,-1.273],[-3.014,-4.509],[-0.934,-6.191],[0,0],[0.77,-0.07],[0,0],[3.006,-11.089]],"v":[[-0.427,-74.648],[8.215,-39.185],[9.939,-37.17],[22.27,-35.154],[27.427,-20.48],[17.736,-2.937],[17.47,-2.515],[17.098,-1.429],[17.021,-0.015],[17.063,0.337],[18.116,49.682],[4.137,59.465],[-10.621,45.537],[-12.798,45.544],[-24.316,58.062],[-41.313,52.701],[-41.6,32.109],[-38.974,15.354],[-25.076,-3.142],[-41.902,-4.361],[-46.234,-7.236],[-52.191,-20.059],[-48.246,-33.21],[-33.81,-35.884],[-31.986,-39.676],[-22.337,-75.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[-4.399,-16.739],[0,0],[-0.46,-0.482],[0,0],[0.869,-4.112],[0,0],[0.062,-0.187],[0.105,-0.436],[0.075,-0.542],[0.015,-0.135],[0,0],[3.127,-1.741],[0,0],[1.38,0.156],[2.361,3.154],[0.482,5.051],[0,0],[-2.948,2.259],[0.128,0.137],[0.643,0.053],[0.547,0.474],[0,0],[-2.021,1.973],[0,0],[-0.266,1.193],[0,0]],"o":[[0,0],[0.272,1.183],[0,0],[4.992,2.851],[0,0],[-0.067,0.177],[-0.132,0.396],[-0.12,0.498],[-0.018,0.133],[0,0],[-1.619,6.968],[-3.562,2.689],[-1.054,0.403],[0,0],[-4.284,-1.356],[0,0],[-0.135,-0.831],[0.991,-0.83],[0,0],[-1.076,-0.416],[-1.558,-1.351],[-3.643,-5.423],[0,0],[0.568,-0.702],[0,0],[4.183,-13.708]],"v":[[0.637,-72.352],[8.336,-42.199],[9.652,-39.169],[14.169,-34.781],[23.006,-23.835],[17.155,-5.341],[17.209,-4.466],[17.101,-1.856],[16.807,-0.294],[16.757,0.107],[15.024,41.668],[9.562,57.061],[0.89,56.831],[-11.218,50.829],[-27.021,58.455],[-36.092,46.254],[-38.062,15.655],[-33.59,2.259],[-27.598,-4.787],[-31.849,-5.748],[-38.698,-8.82],[-44.857,-16.917],[-43.935,-30.357],[-33.857,-35.277],[-32.565,-38.654],[-23.522,-73.084]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":79,"s":[{"i":[[-4.692,-17.958],[0,0],[-0.309,-0.622],[0,0],[-1.161,-4],[0,0],[0.052,-0.199],[0.11,-0.45],[0.119,-0.562],[0.028,-0.141],[0,0],[2.504,-3.548],[0,0],[1.606,0.447],[3.214,4.206],[1.055,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.705,2.168],[0,0],[-0.248,1.199],[0,0]],"o":[[0,0],[0.254,1.189],[0,0],[0.657,3.942],[0,0],[-0.051,0.194],[-0.11,0.421],[-0.126,0.514],[-0.029,0.137],[0,0],[-2.364,6.758],[-2.504,3.548],[-1.163,0.775],[0,0],[-3.214,-4.206],[0,0],[-0.207,-0.989],[0,0],[0,0],[0,0],[0,0],[0.946,-5.864],[0,0],[0.455,-0.912],[0,0],[4.456,-14.581]],"v":[[0.834,-71.667],[8.131,-48.03],[9.21,-44.662],[11.147,-38.015],[14.698,-26.546],[16.951,-12.793],[17.134,-11.767],[17.14,-8.649],[16.771,-7.038],[16.685,-6.621],[4.203,41.797],[-3.171,57.14],[-10.855,62.135],[-15.446,62.463],[-23.718,57.204],[-30.416,41.219],[-40.572,1.266],[-42.472,-8.703],[-40.568,-8.85],[-42.5,-8.17],[-42.091,-11.846],[-40.76,-19.55],[-38.301,-28.038],[-37.1,-34.412],[-36.093,-37.651],[-24.915,-72.489]],"c":true}]},{"t":80,"s":[{"i":[[-2.633,-11.634],[0,0],[-0.226,-0.623],[0,0],[0.932,-3.012],[0,0],[0.378,-0.181],[0.062,-0.3],[-0.405,-0.843],[0.017,-0.143],[0,0],[1.799,-2.381],[0,0],[0.983,0.385],[1.805,4.541],[0.474,5.854],[0,0],[0.041,0.307],[0.103,0.457],[0,0],[0,0],[0,0],[-1.006,1.957],[0,0],[-0.212,1.191],[0,0]],"o":[[0,0],[0.239,1.181],[0,0],[1.068,6.586],[0,0],[-0.029,0.188],[-0.372,0.376],[-0.071,0.342],[0.907,0.771],[0,0],[-1.202,8.157],[-1.404,3.833],[-0.734,0.74],[0,0],[-2.215,-4.048],[0,0],[-0.147,-0.914],[-0.099,-0.742],[0,0],[0,0],[0,0],[0.278,-5.629],[0,0],[0.423,-0.814],[0,0],[3.603,-13.583]],"v":[[-0.244,-76.368],[11.209,-40.34],[12.859,-34.816],[14.712,-28.278],[15.1,-9.035],[13.72,-6.882],[12.511,-5.053],[12.317,-4.471],[14.629,-1.82],[15.754,2.971],[4.601,41.023],[-0.149,56.222],[-10.377,62.32],[-13.222,62.675],[-24.161,56.102],[-30,38.304],[-37.573,8.481],[-39.062,-0.797],[-39.32,-1.845],[-39.701,-2.172],[-39.919,-6.076],[-40.664,-16.542],[-38.035,-31.665],[-35.859,-37.788],[-34.922,-40.879],[-23.322,-75.33]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.775163478477,0.395181394091,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.3,1,0.925,0.741,0.65,0.954,0.703,0.402,1,0.908,0.481,0.063]}},"s":{"a":0,"k":[-16.376,-95.506]},"e":{"a":0,"k":[-4.764,12.627]},"t":1,"nm":"Gradient Fill 4","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[243.876,244.742]},"a":{"a":0,"k":[243.876,244.742]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":43,"op":80,"st":16,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Null 1120","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[250.952,301.511,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":31,"s":[249.652,324.993,0],"to":[0,0,0],"ti":[0,0,0]},{"t":82,"s":[249.652,302.811,0]}]},"s":{"a":0,"k":[63.375,63.375,100]}},"ao":0,"ip":1,"op":85,"st":16,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"Star3D 2","parent":3,"refId":"comp_0","sr":1,"ks":{"p":{"a":0,"k":[248.642,253.313,0]},"a":{"a":0,"k":[356,356,0]},"s":{"a":0,"k":[90,90,100]}},"ao":0,"w":712,"h":712,"ip":36,"op":81,"st":-11,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Merged Shape Layer","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":-2,"s":[90]},{"i":{"x":[0.4],"y":[0.812]},"o":{"x":[0.159],"y":[0]},"t":17,"s":[-17]},{"t":82,"s":[10]}]},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[32.52,-107.221,0],"to":[0,0,0],"ti":[4.707,-268.15,0]},{"t":22,"s":[-134.949,130.308,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[-0.067,-0.067,0]},"t":0,"s":[15,15,100]},{"t":22,"s":[70,70,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[3.32,-13.085],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.683],[0,0],[-0.699,-0.718],[0,0],[1.031,6.329],[0,0],[2.98,3.411],[-0.449,0.55],[-2.251,0.212],[-1.912,1.897],[0,0],[5.26,1.385],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.45],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.734,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[4.939,-0.682],[5.449,-5.407],[3.26,-4],[0,0],[-0.818,-0.07],[0,0],[-3.192,-11.089]],"v":[[-20.685,-75.648],[-32.395,-43.435],[-34.224,-41.42],[-46.31,-42.154],[-51.238,-28.605],[-41.955,-3.687],[-41.672,-3.265],[-41.277,-2.179],[-41.196,-0.765],[-41.241,-0.413],[-44.023,46.682],[-31.893,55.965],[-12.944,42.787],[-10.633,42.794],[11.166,61.562],[24.289,52.701],[22.406,32.609],[16.337,15.354],[-25.273,-10.142],[20.65,-1.073],[31.881,-4.548],[41.405,-19.548],[36.919,-32.345],[10.854,-35.884],[8.918,-39.676],[-2.347,-76.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-25.337,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.055,-3.993],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.7,-2.035],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.847,7.446],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.349,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[10.436,-33.018],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-3.68,-6.312],[-7.931,-3.78],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.008,1.124],[-0.586,2.912],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[2.376,1.132],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.011,-1.527],[0,0],[0,0],[0,0],[2.62,-5.748],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-43.856,-6.009],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":22,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":33,"s":[{"i":[[5.062,-7.447],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-5.26,-6.304],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.332,0.575],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-4.877,1.541],[0,0],[5.26,6.304],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[-0.13,7.661],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.278,-8.107]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-97.544,-5.534],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.78431372549,0.380392156863,0.007843137255,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":7},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tm","s":{"a":0,"k":26},"e":{"a":0,"k":67},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[-16.141]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[18.148]},{"t":22,"s":[19.5]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[3.32,-13.085],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.683],[0,0],[-0.699,-0.718],[0,0],[1.031,6.329],[0,0],[2.98,3.411],[-0.449,0.55],[-3.343,-0.116],[-1.912,1.897],[0,0],[5.26,1.385],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.45],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.734,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[3.703,0.128],[5.449,-5.407],[3.26,-4],[0,0],[-0.818,-0.07],[0,0],[-3.192,-11.089]],"v":[[-20.685,-75.648],[-32.395,-43.435],[-34.224,-41.42],[-46.31,-42.154],[-51.238,-28.605],[-41.955,-3.687],[-41.672,-3.265],[-41.277,-2.179],[-41.196,-0.765],[-41.241,-0.413],[-44.023,46.682],[-31.893,55.965],[-12.944,42.787],[-10.633,42.794],[11.166,61.562],[24.289,52.701],[22.406,32.609],[16.337,15.354],[-25.273,-10.142],[20.949,-0.993],[31.881,-4.548],[41.405,-19.548],[36.919,-32.345],[10.854,-35.884],[8.918,-39.676],[-2.347,-76.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-27.673,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.687,-3.257],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.115,-2.816],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.457,6.275],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.642,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[11.803,-33.994],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-2.974,-6.077],[-8.344,-5.598],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[4.183,2.807],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-44.562,-6.362],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":22,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":33,"s":[{"i":[[4.498,-7.673],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-7.291,-6.191],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.36,0.547],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-6.231,0.751],[0,0],[7.291,6.191],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[0.002,8.107],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.165,-8.107]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-96.867,-5.985],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.854901960784,0.466666666667,0.003921568627,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":7},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[3.319,-13.084],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.682],[0,0],[-0.699,-0.718],[0,0],[1.032,6.33],[0,0],[2.98,3.411],[-0.449,0.55],[-2.251,0.212],[-1.912,1.897],[0,0],[5.26,1.386],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.451],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.735,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[3.765,-1.667],[5.449,-5.407],[3.259,-4],[0,0],[-0.818,-0.071],[0,0],[-3.193,-11.089]],"v":[[-20.529,-75.648],[-32.235,-43.437],[-34.064,-41.421],[-49.389,-42.156],[-54.315,-28.608],[-42.115,0.845],[-41.832,1.267],[-40.939,-3.774],[-40.857,-2.359],[-40.902,-2.008],[-43.855,46.68],[-31.723,55.964],[-12.775,42.788],[-10.464,42.795],[11.336,61.565],[24.458,52.705],[23.468,26.621],[12.866,20.499],[-38.922,-11.003],[23.133,1.682],[31.745,-3.086],[41.567,-19.542],[37.08,-32.339],[11.014,-35.881],[9.077,-39.673],[-2.191,-76.119]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-27.187,57.529],[-16.292,57.299],[-13.979,49.046],[2.837,60.423],[9.536,47.472],[8.978,11.893],[4.282,-0.878],[-31.266,-11.596],[9.888,-7.51],[16.524,-10.707],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.67,-11.523],[-38.84,-10.497],[-38.846,-7.38],[-38.504,-5.769],[-38.424,-5.351],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.589,-1.248],[14.347,-12.504],[-35.345,-11.627],[14.373,-11.972],[13.994,-15.647],[12.993,-20.351],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.242,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-1.138,6.581],[0,0],[0.062,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.088,-77.213],[-36.494,-38.446],[-37.695,-35.245],[-46.718,-26.955],[-46.108,-15.13],[-40.149,-13.848],[-36.531,-12.019],[6.313,-7.541],[-37.005,1.186],[-38.605,3.866],[-26.62,49.17],[-18.187,62.586],[-13.186,57.957],[-9.501,58.312],[0.844,60.235],[8.978,43.151],[12.802,4.817],[17.091,-10.546],[17.371,-11.594],[17.787,-11.922],[18.023,-15.825],[19.282,-26.08],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.378,-77.932]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[2.397,-8.607],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-61.892,-29.528],[-61.602,-17.551],[-51.659,-7.456],[-35.073,-4.845],[7.174,-8.715],[-31.306,6.738],[-41.675,19.794],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":22,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.852,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.809,-84.023],[-47.115,-45.046],[-50.456,-42.94],[-88.72,-35.6],[-93.071,-22.627],[-74.776,-5.077],[-58.654,0.964],[-8.688,-4.937],[-48.392,17.041],[-60.765,32.385],[-66.929,56.451],[-55.202,64.503],[-13.627,45.373],[-9.798,45.381],[30.844,64.725],[42.614,56.738],[39.745,10.565],[39.658,9.45],[40.939,7.155],[43.77,4.753],[49.482,-0.09],[69.172,-22.303],[64.891,-35.288],[24.91,-44.494],[21.58,-46.63],[-3.604,-83.949]],"c":true}]},{"t":33,"s":[{"i":[[5.523,-6.442],[0,0],[1.684,-0.085],[0,0],[-6.735,-5.421],[0,0],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-7.33,4.87],[0,0],[-1.444,-0.968],[0,0],[2.121,8.531],[0,0],[-0.044,0.474],[-0.928,0.741],[0,0],[0,0],[0,0],[8.616,0.488],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-8.634,0.433],[0,0],[0.252,0.203],[8.769,0.053],[0,0],[-12.285,7.881],[0,0],[-2.178,8.526],[0,0],[1.448,-0.961],[0,0],[7.299,4.899],[0,0],[-0.118,-0.478],[0.107,-1.143],[0,0],[0,0],[0,0],[6.741,-5.388],[0,0],[-1.689,-0.096],[0,0],[-5.537,-5.775]],"v":[[-20.886,-105.538],[-62.328,-68.012],[-66.111,-65.298],[-134.948,-41.28],[-139.68,-24.251],[-122.846,-6.695],[-95.101,6.888],[7.166,-2.013],[-75.916,36.816],[-89.266,52.634],[-95.62,92.032],[-80.993,102.413],[-15.446,80.82],[-10.671,80.83],[59.307,99.344],[73.987,89.047],[77.224,29.746],[77.116,28.309],[78.192,24.587],[81.55,20.881],[87.285,14.789],[118.567,-25.052],[113.227,-41.792],[42.243,-64.421],[38.472,-67.176],[-2.536,-105.443]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.22,1,0.956,0.846,0.61,0.976,0.757,0.452,1,0.953,0.558,0.059]}},"s":{"a":0,"k":[-14.258,-97.519]},"e":{"a":0,"k":[-8.286,53.976]},"t":1,"nm":"Gradient_JirTqIgu4f","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244.48,243.941]},"a":{"a":0,"k":[-12,-11.35]},"s":{"a":0,"k":[65,74]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 9","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[3.32,-13.085],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.683],[0,0],[-0.699,-0.718],[0,0],[1.031,6.329],[0,0],[2.98,3.411],[-0.449,0.55],[-2.251,0.212],[-1.912,1.897],[0,0],[5.26,1.385],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.45],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.734,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[3.765,-1.668],[5.449,-5.407],[3.26,-4],[0,0],[-0.818,-0.07],[0,0],[-3.192,-11.089]],"v":[[-20.685,-75.648],[-32.395,-43.435],[-34.224,-41.42],[-46.31,-42.154],[-51.238,-28.605],[-41.955,-3.687],[-41.672,-3.265],[-41.277,-2.179],[-41.196,-0.765],[-41.241,-0.413],[-44.023,46.682],[-31.893,55.965],[-12.944,42.787],[-10.633,42.794],[11.166,61.562],[24.289,52.701],[22.406,32.609],[16.337,15.354],[-25.273,-10.142],[22.898,-0.751],[31.881,-4.548],[41.405,-19.548],[36.919,-32.345],[10.854,-35.884],[8.918,-39.676],[-2.347,-76.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-27.673,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.642,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[12.78,-33.799],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-44.562,-6.362],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":22,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":33,"s":[{"i":[[4.272,-7.447],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-7.516,-6.755],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.417,0.632],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-5.779,1.766],[0,0],[7.516,6.755],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[-0.341,8.009],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.278,-8.445]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-97.205,-6.21],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.4,1,0.709,0.166,0.7,0.954,0.595,0.114,1,0.908,0.481,0.063]}},"s":{"a":0,"k":[-11,-68]},"e":{"a":0,"k":[-11,42.5]},"t":1,"nm":"Gradient_VdQY6b16pW","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false}],"ip":4,"op":32,"st":-26,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Merged Shape Layer 4","parent":3,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"t":71,"s":[0]}]},"r":{"a":0,"k":0.673},"p":{"a":0,"k":[237.354,242.062,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[91.718,91.718,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":70,"s":[{"i":[[5.442,-13.773],[0,0],[3.509,-0.177],[0,0],[-11.11,-8.941],[-20.352,-8.424],[0,0],[0.868,-3.402],[30.973,-16.95],[2.005,-13.295],[0,0],[-12.091,8.034],[0,0],[-3.009,-2.017],[0,0],[3.499,14.072],[0,0],[-2.735,2.185],[0,0],[14.212,0.805],[0,0],[1.261,3.296],[0,0]],"o":[[0,0],[-1.29,3.269],[0,0],[-14.241,0.714],[0,0],[8.397,3.996],[2.735,2.204],[0,0],[-16.108,8.815],[-2.698,17.89],[-3.592,14.064],[0,0],[3.018,-2.004],[0,0],[12.04,8.081],[0,0],[-0.843,-3.399],[0,0],[11.12,-8.887],[0,0],[-3.521,-0.2],[0,0],[-5.298,-13.828]],"v":[[-27.045,-166.252],[-81.91,-100.899],[-89.795,-95.24],[-169.952,-63.277],[-178.903,-35.691],[-135.07,11.522],[-18.597,5.087],[-17.304,10.744],[-90.653,50.857],[-126.022,83.274],[-125.123,132.475],[-100.995,149.598],[-17.473,121.621],[-7.519,121.643],[76.028,150.069],[100.242,133.085],[105.503,41.383],[108.606,32.219],[154.88,-35.001],[146.071,-62.614],[64.426,-95.321],[56.566,-101.063],[3.223,-166.095]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.937254901961,0.498039215686,0.070588235294,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":36,"op":74,"st":-48,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Merged Shape Layer 3","parent":3,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[100]},{"t":56,"s":[0]}]},"r":{"a":0,"k":0.673},"p":{"a":0,"k":[237.354,242.062,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[91.718,91.718,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":55,"s":[{"i":[[4.082,-10.33],[0,0],[2.632,-0.133],[0,0],[-8.332,-6.706],[-15.264,-6.318],[0,0],[0.651,-2.551],[23.23,-12.713],[1.504,-9.971],[0,0],[-9.068,6.025],[0,0],[-2.257,-1.513],[0,0],[2.624,10.554],[0,0],[-2.051,1.639],[0,0],[10.66,0.604],[0,0],[0.946,2.472],[0,0]],"o":[[0,0],[-0.968,2.452],[0,0],[-10.681,0.535],[0,0],[6.298,2.997],[2.051,1.653],[0,0],[-12.081,6.611],[-2.024,13.418],[-2.694,10.548],[0,0],[2.263,-1.503],[0,0],[9.03,6.06],[0,0],[-0.633,-2.55],[0,0],[8.34,-6.666],[0,0],[-2.641,-0.15],[0,0],[-3.974,-10.371]],"v":[[-23.286,-127.425],[-64.435,-78.409],[-70.348,-74.165],[-130.467,-50.193],[-137.181,-29.503],[-104.305,5.908],[-16.95,1.081],[-15.979,5.324],[-70.992,35.409],[-97.519,59.722],[-96.845,96.623],[-78.749,109.466],[-16.106,88.482],[-8.641,88.499],[54.02,109.819],[72.181,97.081],[76.127,28.303],[78.454,21.43],[113.16,-28.985],[106.553,-49.695],[45.318,-74.226],[39.423,-78.532],[-0.585,-127.307]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.937254901961,0.498039215686,0.070588235294,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":35,"op":74,"st":-52,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Merged Shape Layer 2","parent":3,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[100]},{"t":53,"s":[0]}]},"r":{"a":0,"k":0.673},"p":{"a":0,"k":[237.354,242.062,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[91.718,91.718,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[1.835,-4.643],[0,0],[1.183,-0.06],[0,0],[-3.745,-3.014],[-6.861,-2.84],[0,0],[0.293,-1.147],[10.441,-5.714],[0.676,-4.482],[0,0],[-4.076,2.708],[0,0],[-1.014,-0.68],[0,0],[1.179,4.744],[0,0],[-0.922,0.737],[0,0],[4.791,0.271],[0,0],[0.425,1.111],[0,0]],"o":[[0,0],[-0.435,1.102],[0,0],[-4.801,0.241],[0,0],[2.831,1.347],[0.922,0.743],[0,0],[-5.43,2.972],[-0.91,6.031],[-1.211,4.741],[0,0],[1.017,-0.676],[0,0],[4.059,2.724],[0,0],[-0.284,-1.146],[0,0],[3.748,-2.996],[0,0],[-1.187,-0.067],[0,0],[-1.786,-4.662]],"v":[[-17.076,-63.294],[-35.571,-41.264],[-38.229,-39.356],[-65.251,-28.581],[-68.268,-19.282],[-53.492,-3.366],[-14.228,-5.536],[-13.792,-3.629],[-38.519,9.894],[-50.441,20.822],[-50.138,37.407],[-42.005,43.18],[-13.849,33.748],[-10.494,33.756],[17.67,43.338],[25.833,37.613],[27.606,6.7],[28.652,3.611],[44.252,-19.049],[41.282,-28.358],[13.759,-39.383],[11.109,-41.319],[-6.873,-63.241]],"c":true}]},{"t":52,"s":[{"i":[[2.846,-7.204],[0,0],[1.835,-0.093],[0,0],[-5.811,-4.676],[-10.645,-4.406],[0,0],[0.454,-1.779],[16.2,-8.865],[1.049,-6.954],[0,0],[-6.324,4.202],[0,0],[-1.574,-1.055],[0,0],[1.83,7.36],[0,0],[-1.431,1.143],[0,0],[7.434,0.421],[0,0],[0.66,1.724],[0,0]],"o":[[0,0],[-0.675,1.71],[0,0],[-7.448,0.373],[0,0],[4.392,2.09],[1.431,1.153],[0,0],[-8.425,4.61],[-1.411,9.357],[-1.879,7.356],[0,0],[1.578,-1.048],[0,0],[6.297,4.226],[0,0],[-0.441,-1.778],[0,0],[5.816,-4.648],[0,0],[-1.841,-0.104],[0,0],[-2.771,-7.233]],"v":[[-19.872,-92.171],[-48.568,-57.99],[-52.692,-55.03],[-94.617,-38.313],[-99.298,-23.884],[-76.372,0.81],[-15.454,-2.556],[-14.777,0.403],[-53.141,21.383],[-71.64,38.338],[-71.169,64.071],[-58.55,73.027],[-14.865,58.394],[-9.66,58.406],[34.038,73.274],[46.703,64.39],[49.454,16.427],[51.077,11.635],[75.28,-23.523],[70.673,-37.966],[27.97,-55.072],[23.859,-58.075],[-4.041,-92.089]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.937254901961,0.498039215686,0.070588235294,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":32,"op":74,"st":-55,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Merged Shape Layer 21","parent":3,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[100]},{"t":52,"s":[0]}]},"r":{"a":0,"k":0.673},"p":{"a":0,"k":[237.354,242.062,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[117,117,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":52,"s":[{"i":[[4.082,-10.33],[0,0],[2.632,-0.133],[0,0],[-8.332,-6.706],[-15.264,-6.318],[0,0],[0.651,-2.551],[23.23,-12.713],[1.504,-9.971],[0,0],[-9.068,6.025],[0,0],[-2.257,-1.513],[0,0],[2.624,10.554],[0,0],[-2.051,1.639],[0,0],[10.66,0.604],[0,0],[0.946,2.472],[0,0]],"o":[[0,0],[-0.968,2.452],[0,0],[-10.681,0.535],[0,0],[6.298,2.997],[2.051,1.653],[0,0],[-12.081,6.611],[-2.024,13.418],[-2.694,10.548],[0,0],[2.263,-1.503],[0,0],[9.03,6.06],[0,0],[-0.633,-2.55],[0,0],[8.34,-6.666],[0,0],[-2.641,-0.15],[0,0],[-3.974,-10.371]],"v":[[-23.286,-127.425],[-64.435,-78.409],[-70.348,-74.165],[-130.467,-50.193],[-137.181,-29.503],[-104.305,5.908],[-16.95,1.081],[-15.979,5.324],[-70.992,35.409],[-97.519,59.722],[-96.845,96.623],[-78.749,109.466],[-16.106,88.482],[-8.641,88.499],[54.02,109.819],[72.181,97.081],[76.127,28.303],[78.454,21.43],[113.16,-28.985],[106.553,-49.695],[45.318,-74.226],[39.423,-78.532],[-0.585,-127.307]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":32,"op":74,"st":-55,"bm":0},{"ddd":0,"ind":8,"ty":3,"nm":"Null 1120","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[424.3,195.65,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":27,"s":[428.2,229.775,0],"to":[0,0,0],"ti":[0,0,0]},{"t":85,"s":[428.2,192.725,0]}]},"s":{"a":0,"k":[-97.5,97.5,100]}},"ao":0,"ip":1,"op":85,"st":18,"bm":0},{"ddd":0,"ind":9,"ty":0,"nm":"Star3D 2","parent":10,"refId":"comp_0","sr":1,"ks":{"p":{"a":0,"k":[236.676,244.471,0]},"a":{"a":0,"k":[356,356,0]},"s":{"a":0,"k":[105,105,100]}},"ao":0,"w":712,"h":712,"ip":37,"op":81,"st":-9,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Merged Shape Layer 17","parent":8,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.41],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":0,"s":[50]},{"i":{"x":[0.42],"y":[0.742]},"o":{"x":[0.167],"y":[0]},"t":17,"s":[-15]},{"t":85,"s":[13]}]},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[150.313,52.922,0],"to":[-39.782,-70.598,0],"ti":[7.092,-14.93,0]},{"t":17,"s":[-8.104,17.422,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.083,-0.083,0]},"t":0,"s":[-15,15,100]},{"t":17,"s":[-35,35,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[3.32,-13.085],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.683],[0,0],[-0.699,-0.718],[0,0],[1.031,6.329],[0,0],[2.98,3.411],[-0.449,0.55],[-2.251,0.212],[-1.912,1.897],[0,0],[5.26,1.385],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.45],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.734,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[4.939,-0.682],[5.449,-5.407],[3.26,-4],[0,0],[-0.818,-0.07],[0,0],[-3.192,-11.089]],"v":[[-20.685,-75.648],[-32.395,-43.435],[-34.224,-41.42],[-46.31,-42.154],[-51.238,-28.605],[-41.955,-3.687],[-41.672,-3.265],[-41.277,-2.179],[-41.196,-0.765],[-41.241,-0.413],[-44.023,46.682],[-31.893,55.965],[-12.944,42.787],[-10.633,42.794],[11.166,61.562],[24.289,52.701],[22.406,32.609],[16.337,15.354],[-25.273,-10.142],[20.65,-1.073],[31.881,-4.548],[41.405,-19.548],[36.919,-32.345],[10.854,-35.884],[8.918,-39.676],[-2.347,-76.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-25.337,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.055,-3.993],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.7,-2.035],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.847,7.446],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.349,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[10.436,-33.018],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-3.68,-6.312],[-7.931,-3.78],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.008,1.124],[-0.586,2.912],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[2.376,1.132],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.011,-1.527],[0,0],[0,0],[0,0],[2.62,-5.748],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-43.856,-6.009],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":23,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":34,"s":[{"i":[[5.062,-7.447],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-5.26,-6.304],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.332,0.575],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-4.877,1.541],[0,0],[5.26,6.304],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[-0.13,7.661],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.278,-8.107]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-97.544,-5.534],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.78431372549,0.380392156863,0.007843137255,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tm","s":{"a":0,"k":26},"e":{"a":0,"k":67},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[-16.141]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[18.148]},{"t":23,"s":[19.5]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[3.32,-13.085],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.683],[0,0],[-0.699,-0.718],[0,0],[1.031,6.329],[0,0],[2.98,3.411],[-0.449,0.55],[-3.343,-0.116],[-1.912,1.897],[0,0],[5.26,1.385],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.45],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.734,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[3.703,0.128],[5.449,-5.407],[3.26,-4],[0,0],[-0.818,-0.07],[0,0],[-3.192,-11.089]],"v":[[-20.685,-75.648],[-32.395,-43.435],[-34.224,-41.42],[-46.31,-42.154],[-51.238,-28.605],[-41.955,-3.687],[-41.672,-3.265],[-41.277,-2.179],[-41.196,-0.765],[-41.241,-0.413],[-44.023,46.682],[-31.893,55.965],[-12.944,42.787],[-10.633,42.794],[11.166,61.562],[24.289,52.701],[22.406,32.609],[16.337,15.354],[-25.273,-10.142],[20.949,-0.993],[31.881,-4.548],[41.405,-19.548],[36.919,-32.345],[10.854,-35.884],[8.918,-39.676],[-2.347,-76.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-27.673,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.687,-3.257],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.115,-2.816],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.457,6.275],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.642,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[11.803,-33.994],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-2.974,-6.077],[-8.344,-5.598],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[4.183,2.807],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-44.562,-6.362],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":23,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":34,"s":[{"i":[[4.498,-7.673],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-7.291,-6.191],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.36,0.547],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-6.231,0.751],[0,0],[7.291,6.191],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[0.002,8.107],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.165,-8.107]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-96.867,-5.985],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.854901960784,0.466666666667,0.003921568627,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[3.319,-13.084],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.682],[0,0],[-0.699,-0.718],[0,0],[1.032,6.33],[0,0],[2.98,3.411],[-0.449,0.55],[-2.251,0.212],[-1.912,1.897],[0,0],[5.26,1.386],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.451],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.735,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[3.765,-1.667],[5.449,-5.407],[3.259,-4],[0,0],[-0.818,-0.071],[0,0],[-3.193,-11.089]],"v":[[-20.529,-75.648],[-32.235,-43.437],[-34.064,-41.421],[-49.389,-42.156],[-54.315,-28.608],[-42.115,0.845],[-41.832,1.267],[-40.939,-3.774],[-40.857,-2.359],[-40.902,-2.008],[-43.855,46.68],[-31.723,55.964],[-12.775,42.788],[-10.464,42.795],[11.336,61.565],[24.458,52.705],[23.468,26.621],[12.866,20.499],[-38.922,-11.003],[23.133,1.682],[31.745,-3.086],[41.567,-19.542],[37.08,-32.339],[11.014,-35.881],[9.077,-39.673],[-2.191,-76.119]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-27.187,57.529],[-16.292,57.299],[-13.979,49.046],[2.837,60.423],[9.536,47.472],[8.978,11.893],[4.282,-0.878],[-31.266,-11.596],[9.888,-7.51],[16.524,-10.707],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.67,-11.523],[-38.84,-10.497],[-38.846,-7.38],[-38.504,-5.769],[-38.424,-5.351],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.589,-1.248],[14.347,-12.504],[-35.345,-11.627],[14.373,-11.972],[13.994,-15.647],[12.993,-20.351],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.242,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-1.138,6.581],[0,0],[0.062,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.088,-77.213],[-36.494,-38.446],[-37.695,-35.245],[-46.718,-26.955],[-46.108,-15.13],[-40.149,-13.848],[-36.531,-12.019],[6.313,-7.541],[-37.005,1.186],[-38.605,3.866],[-26.62,49.17],[-18.187,62.586],[-13.186,57.957],[-9.501,58.312],[0.844,60.235],[8.978,43.151],[12.802,4.817],[17.091,-10.546],[17.371,-11.594],[17.787,-11.922],[18.023,-15.825],[19.282,-26.08],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.378,-77.932]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[2.397,-8.607],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-61.892,-29.528],[-61.602,-17.551],[-51.659,-7.456],[-35.073,-4.845],[7.174,-8.715],[-31.306,6.738],[-41.675,19.794],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":23,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.852,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.809,-84.023],[-47.115,-45.046],[-50.456,-42.94],[-88.72,-35.6],[-93.071,-22.627],[-74.776,-5.077],[-58.654,0.964],[-8.688,-4.937],[-48.392,17.041],[-60.765,32.385],[-66.929,56.451],[-55.202,64.503],[-13.627,45.373],[-9.798,45.381],[30.844,64.725],[42.614,56.738],[39.745,10.565],[39.658,9.45],[40.939,7.155],[43.77,4.753],[49.482,-0.09],[69.172,-22.303],[64.891,-35.288],[24.91,-44.494],[21.58,-46.63],[-3.604,-83.949]],"c":true}]},{"t":34,"s":[{"i":[[5.523,-6.442],[0,0],[1.684,-0.085],[0,0],[-6.735,-5.421],[0,0],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-7.33,4.87],[0,0],[-1.444,-0.968],[0,0],[2.121,8.531],[0,0],[-0.044,0.474],[-0.928,0.741],[0,0],[0,0],[0,0],[8.616,0.488],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-8.634,0.433],[0,0],[0.252,0.203],[8.769,0.053],[0,0],[-12.285,7.881],[0,0],[-2.178,8.526],[0,0],[1.448,-0.961],[0,0],[7.299,4.899],[0,0],[-0.118,-0.478],[0.107,-1.143],[0,0],[0,0],[0,0],[6.741,-5.388],[0,0],[-1.689,-0.096],[0,0],[-5.537,-5.775]],"v":[[-20.886,-105.538],[-62.328,-68.012],[-66.111,-65.298],[-134.948,-41.28],[-139.68,-24.251],[-122.846,-6.695],[-95.101,6.888],[7.166,-2.013],[-75.916,36.816],[-89.266,52.634],[-95.62,92.032],[-80.993,102.413],[-15.446,80.82],[-10.671,80.83],[59.307,99.344],[73.987,89.047],[77.224,29.746],[77.116,28.309],[78.192,24.587],[81.55,20.881],[87.285,14.789],[118.567,-25.052],[113.227,-41.792],[42.243,-64.421],[38.472,-67.176],[-2.536,-105.443]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.22,1,0.956,0.846,0.61,0.976,0.757,0.452,1,0.953,0.558,0.059]}},"s":{"a":0,"k":[-14.258,-97.519]},"e":{"a":0,"k":[-8.286,53.976]},"t":1,"nm":"Gradient_iIbi2H9jky","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244.48,243.941]},"a":{"a":0,"k":[-12,-11.35]},"s":{"a":0,"k":[65,74]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 9","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[3.32,-13.085],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.683],[0,0],[-0.699,-0.718],[0,0],[1.031,6.329],[0,0],[2.98,3.411],[-0.449,0.55],[-2.251,0.212],[-1.912,1.897],[0,0],[5.26,1.385],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.45],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.734,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[3.765,-1.668],[5.449,-5.407],[3.26,-4],[0,0],[-0.818,-0.07],[0,0],[-3.192,-11.089]],"v":[[-20.685,-75.648],[-32.395,-43.435],[-34.224,-41.42],[-46.31,-42.154],[-51.238,-28.605],[-41.955,-3.687],[-41.672,-3.265],[-41.277,-2.179],[-41.196,-0.765],[-41.241,-0.413],[-44.023,46.682],[-31.893,55.965],[-12.944,42.787],[-10.633,42.794],[11.166,61.562],[24.289,52.701],[22.406,32.609],[16.337,15.354],[-25.273,-10.142],[22.898,-0.751],[31.881,-4.548],[41.405,-19.548],[36.919,-32.345],[10.854,-35.884],[8.918,-39.676],[-2.347,-76.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-27.673,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.642,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[12.78,-33.799],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-44.562,-6.362],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":23,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":34,"s":[{"i":[[4.272,-7.447],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-7.516,-6.755],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.417,0.632],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-5.779,1.766],[0,0],[7.516,6.755],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[-0.341,8.009],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.278,-8.445]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-97.205,-6.21],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.4,1,0.709,0.166,0.7,0.954,0.595,0.114,1,0.908,0.481,0.063]}},"s":{"a":0,"k":[-11,-68]},"e":{"a":0,"k":[-11,42.5]},"t":1,"nm":"Gradient_mqBB8EHEW0","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false}],"ip":3,"op":34,"st":-25,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Merged Shape Layer 7","parent":9,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[100]},{"t":73,"s":[0]}]},"r":{"a":0,"k":-0.208},"p":{"a":0,"k":[351.104,345.965,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[97.547,97.547,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":72,"s":[{"i":[[5.442,-13.773],[0,0],[3.509,-0.177],[0,0],[-11.11,-8.941],[-20.352,-8.424],[0,0],[0.868,-3.402],[30.973,-16.95],[2.005,-13.295],[0,0],[-12.091,8.034],[0,0],[-3.009,-2.017],[0,0],[3.499,14.072],[0,0],[-2.735,2.185],[0,0],[14.212,0.805],[0,0],[1.261,3.296],[0,0]],"o":[[0,0],[-1.29,3.269],[0,0],[-14.241,0.714],[0,0],[8.397,3.996],[2.735,2.204],[0,0],[-16.108,8.815],[-2.698,17.89],[-3.592,14.064],[0,0],[3.018,-2.004],[0,0],[12.04,8.081],[0,0],[-0.843,-3.399],[0,0],[11.12,-8.887],[0,0],[-3.521,-0.2],[0,0],[-5.298,-13.828]],"v":[[-27.045,-166.252],[-81.91,-100.899],[-89.795,-95.24],[-169.952,-63.277],[-178.903,-35.691],[-135.07,11.522],[-18.597,5.087],[-17.304,10.744],[-90.653,50.857],[-126.022,83.274],[-125.123,132.475],[-100.995,149.598],[-17.473,121.621],[-7.519,121.643],[76.028,150.069],[100.242,133.085],[105.503,41.383],[108.606,32.219],[154.88,-35.001],[146.071,-62.614],[64.426,-95.321],[56.566,-101.063],[3.223,-166.095]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.780392156863,0.388059608609,0.003060361451,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":38,"op":74,"st":-46,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"Merged Shape Layer 6","parent":9,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[100]},{"t":58,"s":[0]}]},"r":{"a":0,"k":-0.208},"p":{"a":0,"k":[351.104,345.965,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[97.547,97.547,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":57,"s":[{"i":[[4.082,-10.33],[0,0],[2.632,-0.133],[0,0],[-8.332,-6.706],[-15.264,-6.318],[0,0],[0.651,-2.551],[23.23,-12.713],[1.504,-9.971],[0,0],[-9.068,6.025],[0,0],[-2.257,-1.513],[0,0],[2.624,10.554],[0,0],[-2.051,1.639],[0,0],[10.66,0.604],[0,0],[0.946,2.472],[0,0]],"o":[[0,0],[-0.968,2.452],[0,0],[-10.681,0.535],[0,0],[6.298,2.997],[2.051,1.653],[0,0],[-12.081,6.611],[-2.024,13.418],[-2.694,10.548],[0,0],[2.263,-1.503],[0,0],[9.03,6.06],[0,0],[-0.633,-2.55],[0,0],[8.34,-6.666],[0,0],[-2.641,-0.15],[0,0],[-3.974,-10.371]],"v":[[-23.286,-127.425],[-64.435,-78.409],[-70.348,-74.165],[-130.467,-50.193],[-137.181,-29.503],[-104.305,5.908],[-16.95,1.081],[-15.979,5.324],[-70.992,35.409],[-97.519,59.722],[-96.845,96.623],[-78.749,109.466],[-16.106,88.482],[-8.641,88.499],[54.02,109.819],[72.181,97.081],[76.127,28.303],[78.454,21.43],[113.16,-28.985],[106.553,-49.695],[45.318,-74.226],[39.423,-78.532],[-0.585,-127.307]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.780392156863,0.388059608609,0.003060361451,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":37,"op":74,"st":-50,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"Merged Shape Layer 5","parent":9,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[100]},{"t":55,"s":[0]}]},"r":{"a":0,"k":-0.208},"p":{"a":0,"k":[351.104,345.965,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[97.547,97.547,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[1.835,-4.643],[0,0],[1.183,-0.06],[0,0],[-3.745,-3.014],[-6.861,-2.84],[0,0],[0.293,-1.147],[10.441,-5.714],[0.676,-4.482],[0,0],[-4.076,2.708],[0,0],[-1.014,-0.68],[0,0],[1.179,4.744],[0,0],[-0.922,0.737],[0,0],[4.791,0.271],[0,0],[0.425,1.111],[0,0]],"o":[[0,0],[-0.435,1.102],[0,0],[-4.801,0.241],[0,0],[2.831,1.347],[0.922,0.743],[0,0],[-5.43,2.972],[-0.91,6.031],[-1.211,4.741],[0,0],[1.017,-0.676],[0,0],[4.059,2.724],[0,0],[-0.284,-1.146],[0,0],[3.748,-2.996],[0,0],[-1.187,-0.067],[0,0],[-1.786,-4.662]],"v":[[-17.076,-63.294],[-35.571,-41.264],[-38.229,-39.356],[-65.251,-28.581],[-68.268,-19.282],[-53.492,-3.366],[-14.228,-5.536],[-13.792,-3.629],[-38.519,9.894],[-50.441,20.822],[-50.138,37.407],[-42.005,43.18],[-13.849,33.748],[-10.494,33.756],[17.67,43.338],[25.833,37.613],[27.606,6.7],[28.652,3.611],[44.252,-19.049],[41.282,-28.358],[13.759,-39.383],[11.109,-41.319],[-6.873,-63.241]],"c":true}]},{"t":54,"s":[{"i":[[2.846,-7.204],[0,0],[1.835,-0.093],[0,0],[-5.811,-4.676],[-10.645,-4.406],[0,0],[0.454,-1.779],[16.2,-8.865],[1.049,-6.954],[0,0],[-6.324,4.202],[0,0],[-1.574,-1.055],[0,0],[1.83,7.36],[0,0],[-1.431,1.143],[0,0],[7.434,0.421],[0,0],[0.66,1.724],[0,0]],"o":[[0,0],[-0.675,1.71],[0,0],[-7.448,0.373],[0,0],[4.392,2.09],[1.431,1.153],[0,0],[-8.425,4.61],[-1.411,9.357],[-1.879,7.356],[0,0],[1.578,-1.048],[0,0],[6.297,4.226],[0,0],[-0.441,-1.778],[0,0],[5.816,-4.648],[0,0],[-1.841,-0.104],[0,0],[-2.771,-7.233]],"v":[[-19.872,-92.171],[-48.568,-57.99],[-52.692,-55.03],[-94.617,-38.313],[-99.298,-23.884],[-76.372,0.81],[-15.454,-2.556],[-14.777,0.403],[-53.141,21.383],[-71.64,38.338],[-71.169,64.071],[-58.55,73.027],[-14.865,58.394],[-9.66,58.406],[34.038,73.274],[46.703,64.39],[49.454,16.427],[51.077,11.635],[75.28,-23.523],[70.673,-37.966],[27.97,-55.072],[23.859,-58.075],[-4.041,-92.089]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.780392156863,0.388059608609,0.003060361451,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":34,"op":74,"st":-53,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Merged Shape Layer 22","parent":9,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[100]},{"t":54,"s":[0]}]},"r":{"a":0,"k":-0.208},"p":{"a":0,"k":[351.104,345.965,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[123.81,123.81,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":54,"s":[{"i":[[4.082,-10.33],[0,0],[2.632,-0.133],[0,0],[-8.332,-6.706],[-15.264,-6.318],[0,0],[0.651,-2.551],[23.23,-12.713],[1.504,-9.971],[0,0],[-9.068,6.025],[0,0],[-2.257,-1.513],[0,0],[2.624,10.554],[0,0],[-2.051,1.639],[0,0],[10.66,0.604],[0,0],[0.946,2.472],[0,0]],"o":[[0,0],[-0.968,2.452],[0,0],[-10.681,0.535],[0,0],[6.298,2.997],[2.051,1.653],[0,0],[-12.081,6.611],[-2.024,13.418],[-2.694,10.548],[0,0],[2.263,-1.503],[0,0],[9.03,6.06],[0,0],[-0.633,-2.55],[0,0],[8.34,-6.666],[0,0],[-2.641,-0.15],[0,0],[-3.974,-10.371]],"v":[[-23.286,-127.425],[-64.435,-78.409],[-70.348,-74.165],[-130.467,-50.193],[-137.181,-29.503],[-104.305,5.908],[-16.95,1.081],[-15.979,5.324],[-70.992,35.409],[-97.519,59.722],[-96.845,96.623],[-78.749,109.466],[-16.106,88.482],[-8.641,88.499],[54.02,109.819],[72.181,97.081],[76.127,28.303],[78.454,21.43],[113.16,-28.985],[106.553,-49.695],[45.318,-74.226],[39.423,-78.532],[-0.585,-127.307]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":34,"op":74,"st":-53,"bm":0},{"ddd":0,"ind":15,"ty":3,"nm":"Null 1120","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[382.008,296.56,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.505,"y":0.805},"o":{"x":0.333,"y":0},"t":36,"s":[382.008,325.972,0],"to":[0,0,0],"ti":[0,0,0]},{"t":87,"s":[382.008,311.185,0]}]},"s":{"a":0,"k":[-87.75,87.75,100]}},"ao":0,"ip":1,"op":85,"st":14,"bm":0},{"ddd":0,"ind":16,"ty":0,"nm":"Star3D 2","parent":17,"refId":"comp_0","sr":1,"ks":{"p":{"a":0,"k":[250.014,246.798,0]},"a":{"a":0,"k":[356,356,0]}},"ao":0,"w":712,"h":712,"ip":33,"op":81,"st":-13,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Merged Shape Layer 18","parent":15,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.434],"y":[1.012]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[-100]},{"i":{"x":[0.4],"y":[0.719]},"o":{"x":[0.107],"y":[0]},"t":24,"s":[21]},{"t":83,"s":[7]}]},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[137.99,-40.195,0],"to":[0,0,0],"ti":[13.498,-122.332,0]},{"t":26,"s":[2.99,95.064,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[-0.156,0.156,0]},"t":0,"s":[-10,10,100]},{"t":24,"s":[-58,58,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-25.337,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.055,-3.993],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.7,-2.035],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.847,7.446],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.349,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[10.436,-33.018],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-3.68,-6.312],[-7.931,-3.78],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.008,1.124],[-0.586,2.912],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[2.376,1.132],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.011,-1.527],[0,0],[0,0],[0,0],[2.62,-5.748],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-43.856,-6.009],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":17,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":28,"s":[{"i":[[5.062,-7.447],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-5.26,-6.304],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.332,0.575],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-4.877,1.541],[0,0],[5.26,6.304],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[-0.13,7.661],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.278,-8.107]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-97.544,-5.534],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.756862745098,0.433341740627,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tm","s":{"a":0,"k":26},"e":{"a":0,"k":67},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":-2,"s":[-16.141]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[18.148]},{"t":17,"s":[19.5]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-27.673,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.687,-3.257],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.115,-2.816],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.457,6.275],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.642,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[11.803,-33.994],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-2.974,-6.077],[-8.344,-5.598],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[4.183,2.807],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-44.562,-6.362],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":17,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":28,"s":[{"i":[[4.498,-7.673],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-7.291,-6.191],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.36,0.547],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-6.231,0.751],[0,0],[7.291,6.191],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[0.002,8.107],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.165,-8.107]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-96.867,-5.985],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.822222302007,0.510682708142,0.003224401147,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-27.187,57.529],[-16.292,57.299],[-13.979,49.046],[2.837,60.423],[9.536,47.472],[8.978,11.893],[4.282,-0.878],[-31.266,-11.596],[9.888,-7.51],[16.524,-10.707],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.67,-11.523],[-38.84,-10.497],[-38.846,-7.38],[-38.504,-5.769],[-38.424,-5.351],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.589,-1.248],[14.347,-12.504],[-35.345,-11.627],[14.373,-11.972],[13.994,-15.647],[12.993,-20.351],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.242,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-1.138,6.581],[0,0],[0.062,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.088,-77.213],[-36.494,-38.446],[-37.695,-35.245],[-46.718,-26.955],[-46.108,-15.13],[-40.149,-13.848],[-36.531,-12.019],[6.313,-7.541],[-37.005,1.186],[-38.605,3.866],[-26.62,49.17],[-18.187,62.586],[-13.186,57.957],[-9.501,58.312],[0.844,60.235],[8.978,43.151],[12.802,4.817],[17.091,-10.546],[17.371,-11.594],[17.787,-11.922],[18.023,-15.825],[19.282,-26.08],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.378,-77.932]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[2.397,-8.607],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-61.892,-29.528],[-61.602,-17.551],[-51.659,-7.456],[-35.073,-4.845],[7.174,-8.715],[-31.306,6.738],[-41.675,19.794],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":17,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.852,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.809,-84.023],[-47.115,-45.046],[-50.456,-42.94],[-88.72,-35.6],[-93.071,-22.627],[-74.776,-5.077],[-58.654,0.964],[-8.688,-4.937],[-48.392,17.041],[-60.765,32.385],[-66.929,56.451],[-55.202,64.503],[-13.627,45.373],[-9.798,45.381],[30.844,64.725],[42.614,56.738],[39.745,10.565],[39.658,9.45],[40.939,7.155],[43.77,4.753],[49.482,-0.09],[69.172,-22.303],[64.891,-35.288],[24.91,-44.494],[21.58,-46.63],[-3.604,-83.949]],"c":true}]},{"t":28,"s":[{"i":[[5.523,-6.442],[0,0],[1.684,-0.085],[0,0],[-6.735,-5.421],[0,0],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-7.33,4.87],[0,0],[-1.444,-0.968],[0,0],[2.121,8.531],[0,0],[-0.044,0.474],[-0.928,0.741],[0,0],[0,0],[0,0],[8.616,0.488],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-8.634,0.433],[0,0],[0.252,0.203],[8.769,0.053],[0,0],[-12.285,7.881],[0,0],[-2.178,8.526],[0,0],[1.448,-0.961],[0,0],[7.299,4.899],[0,0],[-0.118,-0.478],[0.107,-1.143],[0,0],[0,0],[0,0],[6.741,-5.388],[0,0],[-1.689,-0.096],[0,0],[-5.537,-5.775]],"v":[[-20.886,-105.538],[-62.328,-68.012],[-66.111,-65.298],[-134.948,-41.28],[-139.68,-24.251],[-122.846,-6.695],[-95.101,6.888],[7.166,-2.013],[-75.916,36.816],[-89.266,52.634],[-95.62,92.032],[-80.993,102.413],[-15.446,80.82],[-10.671,80.83],[59.307,99.344],[73.987,89.047],[77.224,29.746],[77.116,28.309],[78.192,24.587],[81.55,20.881],[87.285,14.789],[118.567,-25.052],[113.227,-41.792],[42.243,-64.421],[38.472,-67.176],[-2.536,-105.443]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.2,1,0.994,0.927,0.45,0.998,0.909,0.597,0.7,0.996,0.824,0.267]}},"s":{"a":0,"k":[-12.22,-81.292]},"e":{"a":0,"k":[-12.49,66.21]},"t":1,"nm":"Gradient_0ALnMmLWLd","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244.48,243.941]},"a":{"a":0,"k":[-12,-11.35]},"s":{"a":0,"k":[65,74]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 9","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-27.673,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.642,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[12.78,-33.799],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-44.562,-6.362],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":17,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":28,"s":[{"i":[[4.272,-7.447],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-7.516,-6.755],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.417,0.632],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-5.779,1.766],[0,0],[7.516,6.755],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[-0.341,8.009],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.278,-8.445]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-97.205,-6.21],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.3,1,0.899,0.469,0.65,0.979,0.802,0.293,1,0.958,0.704,0.116]}},"s":{"a":0,"k":[-11,-68]},"e":{"a":0,"k":[-11,42.5]},"t":1,"nm":"Gradient_JMpFdCdy4r","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false}],"ip":4,"op":30,"st":-31,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"Merged Shape Layer 10","parent":16,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[100]},{"t":69,"s":[0]}]},"r":{"a":0,"k":0.319},"p":{"a":0,"k":[343.694,344.869,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[101.789,101.789,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":68,"s":[{"i":[[5.442,-13.773],[0,0],[3.509,-0.177],[0,0],[-11.11,-8.941],[-20.352,-8.424],[0,0],[0.868,-3.402],[30.973,-16.95],[2.005,-13.295],[0,0],[-12.091,8.034],[0,0],[-3.009,-2.017],[0,0],[3.499,14.072],[0,0],[-2.735,2.185],[0,0],[14.212,0.805],[0,0],[1.261,3.296],[0,0]],"o":[[0,0],[-1.29,3.269],[0,0],[-14.241,0.714],[0,0],[8.397,3.996],[2.735,2.204],[0,0],[-16.108,8.815],[-2.698,17.89],[-3.592,14.064],[0,0],[3.018,-2.004],[0,0],[12.04,8.081],[0,0],[-0.843,-3.399],[0,0],[11.12,-8.887],[0,0],[-3.521,-0.2],[0,0],[-5.298,-13.828]],"v":[[-27.045,-166.252],[-81.91,-100.899],[-89.795,-95.24],[-169.952,-63.277],[-178.903,-35.691],[-135.07,11.522],[-18.597,5.087],[-17.304,10.744],[-90.653,50.857],[-126.022,83.274],[-125.123,132.475],[-100.995,149.598],[-17.473,121.621],[-7.519,121.643],[76.028,150.069],[100.242,133.085],[105.503,41.383],[108.606,32.219],[154.88,-35.001],[146.071,-62.614],[64.426,-95.321],[56.566,-101.063],[3.223,-166.095]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411764706,0.811764705882,0.027450980392,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":34,"op":74,"st":-50,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"Merged Shape Layer 9","parent":16,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"t":54,"s":[0]}]},"r":{"a":0,"k":0.319},"p":{"a":0,"k":[343.694,344.869,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[101.789,101.789,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":53,"s":[{"i":[[4.082,-10.33],[0,0],[2.632,-0.133],[0,0],[-8.332,-6.706],[-15.264,-6.318],[0,0],[0.651,-2.551],[23.23,-12.713],[1.504,-9.971],[0,0],[-9.068,6.025],[0,0],[-2.257,-1.513],[0,0],[2.624,10.554],[0,0],[-2.051,1.639],[0,0],[10.66,0.604],[0,0],[0.946,2.472],[0,0]],"o":[[0,0],[-0.968,2.452],[0,0],[-10.681,0.535],[0,0],[6.298,2.997],[2.051,1.653],[0,0],[-12.081,6.611],[-2.024,13.418],[-2.694,10.548],[0,0],[2.263,-1.503],[0,0],[9.03,6.06],[0,0],[-0.633,-2.55],[0,0],[8.34,-6.666],[0,0],[-2.641,-0.15],[0,0],[-3.974,-10.371]],"v":[[-23.286,-127.425],[-64.435,-78.409],[-70.348,-74.165],[-130.467,-50.193],[-137.181,-29.503],[-104.305,5.908],[-16.95,1.081],[-15.979,5.324],[-70.992,35.409],[-97.519,59.722],[-96.845,96.623],[-78.749,109.466],[-16.106,88.482],[-8.641,88.499],[54.02,109.819],[72.181,97.081],[76.127,28.303],[78.454,21.43],[113.16,-28.985],[106.553,-49.695],[45.318,-74.226],[39.423,-78.532],[-0.585,-127.307]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411764706,0.811764705882,0.027450980392,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":33,"op":74,"st":-54,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"Merged Shape Layer 8","parent":16,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"t":51,"s":[0]}]},"r":{"a":0,"k":0.319},"p":{"a":0,"k":[343.694,344.869,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[101.789,101.789,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[1.835,-4.643],[0,0],[1.183,-0.06],[0,0],[-3.745,-3.014],[-6.861,-2.84],[0,0],[0.293,-1.147],[10.441,-5.714],[0.676,-4.482],[0,0],[-4.076,2.708],[0,0],[-1.014,-0.68],[0,0],[1.179,4.744],[0,0],[-0.922,0.737],[0,0],[4.791,0.271],[0,0],[0.425,1.111],[0,0]],"o":[[0,0],[-0.435,1.102],[0,0],[-4.801,0.241],[0,0],[2.831,1.347],[0.922,0.743],[0,0],[-5.43,2.972],[-0.91,6.031],[-1.211,4.741],[0,0],[1.017,-0.676],[0,0],[4.059,2.724],[0,0],[-0.284,-1.146],[0,0],[3.748,-2.996],[0,0],[-1.187,-0.067],[0,0],[-1.786,-4.662]],"v":[[-17.076,-63.294],[-35.571,-41.264],[-38.229,-39.356],[-65.251,-28.581],[-68.268,-19.282],[-53.492,-3.366],[-14.228,-5.536],[-13.792,-3.629],[-38.519,9.894],[-50.441,20.822],[-50.138,37.407],[-42.005,43.18],[-13.849,33.748],[-10.494,33.756],[17.67,43.338],[25.833,37.613],[27.606,6.7],[28.652,3.611],[44.252,-19.049],[41.282,-28.358],[13.759,-39.383],[11.109,-41.319],[-6.873,-63.241]],"c":true}]},{"t":50,"s":[{"i":[[2.846,-7.204],[0,0],[1.835,-0.093],[0,0],[-5.811,-4.676],[-10.645,-4.406],[0,0],[0.454,-1.779],[16.2,-8.865],[1.049,-6.954],[0,0],[-6.324,4.202],[0,0],[-1.574,-1.055],[0,0],[1.83,7.36],[0,0],[-1.431,1.143],[0,0],[7.434,0.421],[0,0],[0.66,1.724],[0,0]],"o":[[0,0],[-0.675,1.71],[0,0],[-7.448,0.373],[0,0],[4.392,2.09],[1.431,1.153],[0,0],[-8.425,4.61],[-1.411,9.357],[-1.879,7.356],[0,0],[1.578,-1.048],[0,0],[6.297,4.226],[0,0],[-0.441,-1.778],[0,0],[5.816,-4.648],[0,0],[-1.841,-0.104],[0,0],[-2.771,-7.233]],"v":[[-19.872,-92.171],[-48.568,-57.99],[-52.692,-55.03],[-94.617,-38.313],[-99.298,-23.884],[-76.372,0.81],[-15.454,-2.556],[-14.777,0.403],[-53.141,21.383],[-71.64,38.338],[-71.169,64.071],[-58.55,73.027],[-14.865,58.394],[-9.66,58.406],[34.038,73.274],[46.703,64.39],[49.454,16.427],[51.077,11.635],[75.28,-23.523],[70.673,-37.966],[27.97,-55.072],[23.859,-58.075],[-4.041,-92.089]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411764706,0.811764705882,0.027450980392,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":30,"op":74,"st":-57,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"Merged Shape Layer 23","parent":16,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"t":50,"s":[0]}]},"r":{"a":0,"k":0.319},"p":{"a":0,"k":[343.694,344.869,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[130,130,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":50,"s":[{"i":[[4.082,-10.33],[0,0],[2.632,-0.133],[0,0],[-8.332,-6.706],[-15.264,-6.318],[0,0],[0.651,-2.551],[23.23,-12.713],[1.504,-9.971],[0,0],[-9.068,6.025],[0,0],[-2.257,-1.513],[0,0],[2.624,10.554],[0,0],[-2.051,1.639],[0,0],[10.66,0.604],[0,0],[0.946,2.472],[0,0]],"o":[[0,0],[-0.968,2.452],[0,0],[-10.681,0.535],[0,0],[6.298,2.997],[2.051,1.653],[0,0],[-12.081,6.611],[-2.024,13.418],[-2.694,10.548],[0,0],[2.263,-1.503],[0,0],[9.03,6.06],[0,0],[-0.633,-2.55],[0,0],[8.34,-6.666],[0,0],[-2.641,-0.15],[0,0],[-3.974,-10.371]],"v":[[-23.286,-127.425],[-64.435,-78.409],[-70.348,-74.165],[-130.467,-50.193],[-137.181,-29.503],[-104.305,5.908],[-16.95,1.081],[-15.979,5.324],[-70.992,35.409],[-97.519,59.722],[-96.845,96.623],[-78.749,109.466],[-16.106,88.482],[-8.641,88.499],[54.02,109.819],[72.181,97.081],[76.127,28.303],[78.454,21.43],[113.16,-28.985],[106.553,-49.695],[45.318,-74.226],[39.423,-78.532],[-0.585,-127.307]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":30,"op":74,"st":-57,"bm":0},{"ddd":0,"ind":22,"ty":3,"nm":"Null 1120","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[259.124,193.338,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":26,"s":[259.124,220.313,0],"to":[0,0,0],"ti":[0,0,0]},{"t":106,"s":[259.124,190.413,0]}]},"s":{"a":0,"k":[97.5,97.5,100]}},"ao":0,"ip":1,"op":85,"st":17,"bm":0},{"ddd":0,"ind":23,"ty":0,"nm":"Star3D 2","parent":24,"refId":"comp_0","sr":1,"ks":{"p":{"a":0,"k":[256.613,254.68,0]},"a":{"a":0,"k":[356,356,0]}},"ao":0,"w":712,"h":712,"ip":36,"op":76,"st":-10,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"Merged Shape Layer 19","parent":22,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":0,"s":[136]},{"i":{"x":[0.4],"y":[0.517]},"o":{"x":[0.113],"y":[0]},"t":16,"s":[-15]},{"t":76,"s":[5]}]},"p":{"a":1,"k":[{"i":{"x":0.42,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[2.212,65.471,0],"to":[0,0,0],"ti":[-21.866,67.767,0]},{"t":16,"s":[9.546,-113.195,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[-0.122,-0.122,0]},"t":3,"s":[10,10,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.7],"y":[0,0,0]},"t":17,"s":[58,58,100]},{"t":39,"s":[50,50,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[3.32,-13.085],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.683],[0,0],[-0.699,-0.718],[0,0],[1.031,6.329],[0,0],[2.98,3.411],[-0.449,0.55],[-2.251,0.212],[-1.912,1.897],[0,0],[5.26,1.385],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.45],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.734,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[4.939,-0.682],[5.449,-5.407],[3.26,-4],[0,0],[-0.818,-0.07],[0,0],[-3.192,-11.089]],"v":[[-20.685,-75.648],[-32.395,-43.435],[-34.224,-41.42],[-46.31,-42.154],[-51.238,-28.605],[-41.955,-3.687],[-41.672,-3.265],[-41.277,-2.179],[-41.196,-0.765],[-41.241,-0.413],[-44.023,46.682],[-31.893,55.965],[-12.944,42.787],[-10.633,42.794],[11.166,61.562],[24.289,52.701],[22.406,32.609],[16.337,15.354],[-25.273,-10.142],[20.65,-1.073],[31.881,-4.548],[41.405,-19.548],[36.919,-32.345],[10.854,-35.884],[8.918,-39.676],[-2.347,-76.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-25.337,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.055,-3.993],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.7,-2.035],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.847,7.446],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.349,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[10.436,-33.018],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-3.68,-6.312],[-7.931,-3.78],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.008,1.124],[-0.586,2.912],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[2.376,1.132],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.011,-1.527],[0,0],[0,0],[0,0],[2.62,-5.748],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-43.856,-6.009],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":21,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":32,"s":[{"i":[[5.062,-7.447],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-5.26,-6.304],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.332,0.575],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-4.877,1.541],[0,0],[5.26,6.304],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[-0.13,7.661],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.278,-8.107]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-97.544,-5.534],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.756862745098,0.435294117647,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tm","s":{"a":0,"k":26},"e":{"a":0,"k":67},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[-16.141]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[18.148]},{"t":21,"s":[19.5]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[3.32,-13.085],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.683],[0,0],[-0.699,-0.718],[0,0],[1.031,6.329],[0,0],[2.98,3.411],[-0.449,0.55],[-3.343,-0.116],[-1.912,1.897],[0,0],[5.26,1.385],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.45],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.734,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[3.703,0.128],[5.449,-5.407],[3.26,-4],[0,0],[-0.818,-0.07],[0,0],[-3.192,-11.089]],"v":[[-20.685,-75.648],[-32.395,-43.435],[-34.224,-41.42],[-46.31,-42.154],[-51.238,-28.605],[-41.955,-3.687],[-41.672,-3.265],[-41.277,-2.179],[-41.196,-0.765],[-41.241,-0.413],[-44.023,46.682],[-31.893,55.965],[-12.944,42.787],[-10.633,42.794],[11.166,61.562],[24.289,52.701],[22.406,32.609],[16.337,15.354],[-25.273,-10.142],[20.949,-0.993],[31.881,-4.548],[41.405,-19.548],[36.919,-32.345],[10.854,-35.884],[8.918,-39.676],[-2.347,-76.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-27.673,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.687,-3.257],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.115,-2.816],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.457,6.275],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.642,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[11.803,-33.994],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-2.974,-6.077],[-8.344,-5.598],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[4.183,2.807],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-44.562,-6.362],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":21,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":32,"s":[{"i":[[4.498,-7.673],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-7.291,-6.191],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.36,0.547],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-6.231,0.751],[0,0],[7.291,6.191],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[0.002,8.107],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.165,-8.107]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-96.867,-5.985],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.823529411765,0.509803921569,0.003921568627,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[3.319,-13.084],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.682],[0,0],[-0.699,-0.718],[0,0],[1.032,6.33],[0,0],[2.98,3.411],[-0.449,0.55],[-2.251,0.212],[-1.912,1.897],[0,0],[5.26,1.386],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.451],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.735,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[3.765,-1.667],[5.449,-5.407],[3.259,-4],[0,0],[-0.818,-0.071],[0,0],[-3.193,-11.089]],"v":[[-20.529,-75.648],[-32.235,-43.437],[-34.064,-41.421],[-49.389,-42.156],[-54.315,-28.608],[-42.115,0.845],[-41.832,1.267],[-40.939,-3.774],[-40.857,-2.359],[-40.902,-2.008],[-43.855,46.68],[-31.723,55.964],[-12.775,42.788],[-10.464,42.795],[11.336,61.565],[24.458,52.705],[23.468,26.621],[12.866,20.499],[-38.922,-11.003],[23.133,1.682],[31.745,-3.086],[41.567,-19.542],[37.08,-32.339],[11.014,-35.881],[9.077,-39.673],[-2.191,-76.119]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-27.187,57.529],[-16.292,57.299],[-13.979,49.046],[2.837,60.423],[9.536,47.472],[8.978,11.893],[4.282,-0.878],[-31.266,-11.596],[9.888,-7.51],[16.524,-10.707],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.67,-11.523],[-38.84,-10.497],[-38.846,-7.38],[-38.504,-5.769],[-38.424,-5.351],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.589,-1.248],[14.347,-12.504],[-35.345,-11.627],[14.373,-11.972],[13.994,-15.647],[12.993,-20.351],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.242,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-1.138,6.581],[0,0],[0.062,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.088,-77.213],[-36.494,-38.446],[-37.695,-35.245],[-46.718,-26.955],[-46.108,-15.13],[-40.149,-13.848],[-36.531,-12.019],[6.313,-7.541],[-37.005,1.186],[-38.605,3.866],[-26.62,49.17],[-18.187,62.586],[-13.186,57.957],[-9.501,58.312],[0.844,60.235],[8.978,43.151],[12.802,4.817],[17.091,-10.546],[17.371,-11.594],[17.787,-11.922],[18.023,-15.825],[19.282,-26.08],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.378,-77.932]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[2.397,-8.607],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-61.892,-29.528],[-61.602,-17.551],[-51.659,-7.456],[-35.073,-4.845],[7.174,-8.715],[-31.306,6.738],[-41.675,19.794],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":21,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.852,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.809,-84.023],[-47.115,-45.046],[-50.456,-42.94],[-88.72,-35.6],[-93.071,-22.627],[-74.776,-5.077],[-58.654,0.964],[-8.688,-4.937],[-48.392,17.041],[-60.765,32.385],[-66.929,56.451],[-55.202,64.503],[-13.627,45.373],[-9.798,45.381],[30.844,64.725],[42.614,56.738],[39.745,10.565],[39.658,9.45],[40.939,7.155],[43.77,4.753],[49.482,-0.09],[69.172,-22.303],[64.891,-35.288],[24.91,-44.494],[21.58,-46.63],[-3.604,-83.949]],"c":true}]},{"t":32,"s":[{"i":[[5.523,-6.442],[0,0],[1.684,-0.085],[0,0],[-6.735,-5.421],[0,0],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-7.33,4.87],[0,0],[-1.444,-0.968],[0,0],[2.121,8.531],[0,0],[-0.044,0.474],[-0.928,0.741],[0,0],[0,0],[0,0],[8.616,0.488],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-8.634,0.433],[0,0],[0.252,0.203],[8.769,0.053],[0,0],[-12.285,7.881],[0,0],[-2.178,8.526],[0,0],[1.448,-0.961],[0,0],[7.299,4.899],[0,0],[-0.118,-0.478],[0.107,-1.143],[0,0],[0,0],[0,0],[6.741,-5.388],[0,0],[-1.689,-0.096],[0,0],[-5.537,-5.775]],"v":[[-20.886,-105.538],[-62.328,-68.012],[-66.111,-65.298],[-134.948,-41.28],[-139.68,-24.251],[-122.846,-6.695],[-95.101,6.888],[7.166,-2.013],[-75.916,36.816],[-89.266,52.634],[-95.62,92.032],[-80.993,102.413],[-15.446,80.82],[-10.671,80.83],[59.307,99.344],[73.987,89.047],[77.224,29.746],[77.116,28.309],[78.192,24.587],[81.55,20.881],[87.285,14.789],[118.567,-25.052],[113.227,-41.792],[42.243,-64.421],[38.472,-67.176],[-2.536,-105.443]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.22,1,0.963,0.851,0.61,1,0.841,0.503,1,1,0.719,0.156]}},"s":{"a":0,"k":[-10.53,-83.143]},"e":{"a":0,"k":[-11,42.5]},"t":1,"nm":"Gradient_1etpPWIk5E","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244.48,243.941]},"a":{"a":0,"k":[-12,-11.35]},"s":{"a":0,"k":[65,74]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 9","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[3.32,-13.085],[0,0],[0.815,-0.064],[0,0],[-3.263,-4.02],[0,0],[-0.084,-0.152],[-0.083,-0.395],[0.043,-0.481],[0.019,-0.117],[0,0],[-4.502,3.683],[0,0],[-0.699,-0.718],[0,0],[1.031,6.329],[0,0],[2.98,3.411],[-0.449,0.55],[-2.251,0.212],[-1.912,1.897],[0,0],[5.26,1.385],[0,0],[0.294,1.173],[0,0]],"o":[[0,0],[-0.299,1.164],[0,0],[-5.693,0.347],[0,0],[0.104,0.128],[0.178,0.322],[0.095,0.45],[-0.011,0.118],[0,0],[-0.408,7.597],[0,0],[0.7,-0.714],[0,0],[6.734,7.187],[0,0],[-0.058,-0.354],[-3.472,-3.317],[0,0],[3.765,-1.668],[5.449,-5.407],[3.26,-4],[0,0],[-0.818,-0.07],[0,0],[-3.192,-11.089]],"v":[[-20.685,-75.648],[-32.395,-43.435],[-34.224,-41.42],[-46.31,-42.154],[-51.238,-28.605],[-41.955,-3.687],[-41.672,-3.265],[-41.277,-2.179],[-41.196,-0.765],[-41.241,-0.413],[-44.023,46.682],[-31.893,55.965],[-12.944,42.787],[-10.633,42.794],[11.166,61.562],[24.289,52.701],[22.406,32.609],[16.337,15.354],[-25.273,-10.142],[22.898,-0.751],[31.881,-4.548],[41.405,-19.548],[36.919,-32.345],[10.854,-35.884],[8.918,-39.676],[-2.347,-76.121]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-27.673,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.642,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[12.78,-33.799],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-44.562,-6.362],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":21,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":32,"s":[{"i":[[4.272,-7.447],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-7.516,-6.755],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.417,0.632],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-5.779,1.766],[0,0],[7.516,6.755],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[-0.341,8.009],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.278,-8.445]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-97.205,-6.21],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.791,0.179,0.5,0.982,0.704,0.115,1,0.963,0.617,0.052]}},"s":{"a":0,"k":[-11,-68]},"e":{"a":0,"k":[-11,42.5]},"t":1,"nm":"Gradient_6gqnlohq1a","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false}],"ip":4,"op":33,"st":-27,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"Merged Shape Layer 13","parent":23,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[100]},{"t":72,"s":[0]}]},"r":{"a":0,"k":0.088},"p":{"a":0,"k":[343.67,345.032,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[101.047,101.047,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":71,"s":[{"i":[[5.442,-13.773],[0,0],[3.509,-0.177],[0,0],[-11.11,-8.941],[-20.352,-8.424],[0,0],[0.868,-3.402],[30.973,-16.95],[2.005,-13.295],[0,0],[-12.091,8.034],[0,0],[-3.009,-2.017],[0,0],[3.499,14.072],[0,0],[-2.735,2.185],[0,0],[14.212,0.805],[0,0],[1.261,3.296],[0,0]],"o":[[0,0],[-1.29,3.269],[0,0],[-14.241,0.714],[0,0],[8.397,3.996],[2.735,2.204],[0,0],[-16.108,8.815],[-2.698,17.89],[-3.592,14.064],[0,0],[3.018,-2.004],[0,0],[12.04,8.081],[0,0],[-0.843,-3.399],[0,0],[11.12,-8.887],[0,0],[-3.521,-0.2],[0,0],[-5.298,-13.828]],"v":[[-27.045,-166.252],[-81.91,-100.899],[-89.795,-95.24],[-169.952,-63.277],[-178.903,-35.691],[-135.07,11.522],[-18.597,5.087],[-17.304,10.744],[-90.653,50.857],[-126.022,83.274],[-125.123,132.475],[-100.995,149.598],[-17.473,121.621],[-7.519,121.643],[76.028,150.069],[100.242,133.085],[105.503,41.383],[108.606,32.219],[154.88,-35.001],[146.071,-62.614],[64.426,-95.321],[56.566,-101.063],[3.223,-166.095]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.945098039216,0.572549019608,0.074509803922,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":37,"op":73,"st":-47,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"Merged Shape Layer 12","parent":23,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"t":57,"s":[0]}]},"r":{"a":0,"k":0.088},"p":{"a":0,"k":[343.67,345.032,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[101.047,101.047,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":56,"s":[{"i":[[4.082,-10.33],[0,0],[2.632,-0.133],[0,0],[-8.332,-6.706],[-15.264,-6.318],[0,0],[0.651,-2.551],[23.23,-12.713],[1.504,-9.971],[0,0],[-9.068,6.025],[0,0],[-2.257,-1.513],[0,0],[2.624,10.554],[0,0],[-2.051,1.639],[0,0],[10.66,0.604],[0,0],[0.946,2.472],[0,0]],"o":[[0,0],[-0.968,2.452],[0,0],[-10.681,0.535],[0,0],[6.298,2.997],[2.051,1.653],[0,0],[-12.081,6.611],[-2.024,13.418],[-2.694,10.548],[0,0],[2.263,-1.503],[0,0],[9.03,6.06],[0,0],[-0.633,-2.55],[0,0],[8.34,-6.666],[0,0],[-2.641,-0.15],[0,0],[-3.974,-10.371]],"v":[[-23.286,-127.425],[-64.435,-78.409],[-70.348,-74.165],[-130.467,-50.193],[-137.181,-29.503],[-104.305,5.908],[-16.95,1.081],[-15.979,5.324],[-70.992,35.409],[-97.519,59.722],[-96.845,96.623],[-78.749,109.466],[-16.106,88.482],[-8.641,88.499],[54.02,109.819],[72.181,97.081],[76.127,28.303],[78.454,21.43],[113.16,-28.985],[106.553,-49.695],[45.318,-74.226],[39.423,-78.532],[-0.585,-127.307]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.945098039216,0.572549019608,0.074509803922,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":36,"op":73,"st":-51,"bm":0},{"ddd":0,"ind":27,"ty":4,"nm":"Merged Shape Layer 11","parent":23,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"t":54,"s":[0]}]},"r":{"a":0,"k":0.088},"p":{"a":0,"k":[343.67,345.032,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[101.047,101.047,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[1.835,-4.643],[0,0],[1.183,-0.06],[0,0],[-3.745,-3.014],[-6.861,-2.84],[0,0],[0.293,-1.147],[10.441,-5.714],[0.676,-4.482],[0,0],[-4.076,2.708],[0,0],[-1.014,-0.68],[0,0],[1.179,4.744],[0,0],[-0.922,0.737],[0,0],[4.791,0.271],[0,0],[0.425,1.111],[0,0]],"o":[[0,0],[-0.435,1.102],[0,0],[-4.801,0.241],[0,0],[2.831,1.347],[0.922,0.743],[0,0],[-5.43,2.972],[-0.91,6.031],[-1.211,4.741],[0,0],[1.017,-0.676],[0,0],[4.059,2.724],[0,0],[-0.284,-1.146],[0,0],[3.748,-2.996],[0,0],[-1.187,-0.067],[0,0],[-1.786,-4.662]],"v":[[-17.076,-63.294],[-35.571,-41.264],[-38.229,-39.356],[-65.251,-28.581],[-68.268,-19.282],[-53.492,-3.366],[-14.228,-5.536],[-13.792,-3.629],[-38.519,9.894],[-50.441,20.822],[-50.138,37.407],[-42.005,43.18],[-13.849,33.748],[-10.494,33.756],[17.67,43.338],[25.833,37.613],[27.606,6.7],[28.652,3.611],[44.252,-19.049],[41.282,-28.358],[13.759,-39.383],[11.109,-41.319],[-6.873,-63.241]],"c":true}]},{"t":53,"s":[{"i":[[2.846,-7.204],[0,0],[1.835,-0.093],[0,0],[-5.811,-4.676],[-10.645,-4.406],[0,0],[0.454,-1.779],[16.2,-8.865],[1.049,-6.954],[0,0],[-6.324,4.202],[0,0],[-1.574,-1.055],[0,0],[1.83,7.36],[0,0],[-1.431,1.143],[0,0],[7.434,0.421],[0,0],[0.66,1.724],[0,0]],"o":[[0,0],[-0.675,1.71],[0,0],[-7.448,0.373],[0,0],[4.392,2.09],[1.431,1.153],[0,0],[-8.425,4.61],[-1.411,9.357],[-1.879,7.356],[0,0],[1.578,-1.048],[0,0],[6.297,4.226],[0,0],[-0.441,-1.778],[0,0],[5.816,-4.648],[0,0],[-1.841,-0.104],[0,0],[-2.771,-7.233]],"v":[[-19.872,-92.171],[-48.568,-57.99],[-52.692,-55.03],[-94.617,-38.313],[-99.298,-23.884],[-76.372,0.81],[-15.454,-2.556],[-14.777,0.403],[-53.141,21.383],[-71.64,38.338],[-71.169,64.071],[-58.55,73.027],[-14.865,58.394],[-9.66,58.406],[34.038,73.274],[46.703,64.39],[49.454,16.427],[51.077,11.635],[75.28,-23.523],[70.673,-37.966],[27.97,-55.072],[23.859,-58.075],[-4.041,-92.089]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.945098039216,0.572549019608,0.074509803922,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":33,"op":73,"st":-54,"bm":0},{"ddd":0,"ind":28,"ty":4,"nm":"Merged Shape Layer 24","parent":23,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"t":53,"s":[0]}]},"r":{"a":0,"k":0.088},"p":{"a":0,"k":[343.67,345.032,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[130,130,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":53,"s":[{"i":[[4.082,-10.33],[0,0],[2.632,-0.133],[0,0],[-8.332,-6.706],[-15.264,-6.318],[0,0],[0.651,-2.551],[23.23,-12.713],[1.504,-9.971],[0,0],[-9.068,6.025],[0,0],[-2.257,-1.513],[0,0],[2.624,10.554],[0,0],[-2.051,1.639],[0,0],[10.66,0.604],[0,0],[0.946,2.472],[0,0]],"o":[[0,0],[-0.968,2.452],[0,0],[-10.681,0.535],[0,0],[6.298,2.997],[2.051,1.653],[0,0],[-12.081,6.611],[-2.024,13.418],[-2.694,10.548],[0,0],[2.263,-1.503],[0,0],[9.03,6.06],[0,0],[-0.633,-2.55],[0,0],[8.34,-6.666],[0,0],[-2.641,-0.15],[0,0],[-3.974,-10.371]],"v":[[-23.286,-127.425],[-64.435,-78.409],[-70.348,-74.165],[-130.467,-50.193],[-137.181,-29.503],[-104.305,5.908],[-16.95,1.081],[-15.979,5.324],[-70.992,35.409],[-97.519,59.722],[-96.845,96.623],[-78.749,109.466],[-16.106,88.482],[-8.641,88.499],[54.02,109.819],[72.181,97.081],[76.127,28.303],[78.454,21.43],[113.16,-28.985],[106.553,-49.695],[45.318,-74.226],[39.423,-78.532],[-0.585,-127.307]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":33,"op":73,"st":-54,"bm":0},{"ddd":0,"ind":29,"ty":3,"nm":"Null 1120","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.667,"y":0.976},"o":{"x":0.167,"y":0.167},"t":7,"s":[353.444,431.572,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.498,"y":0.826},"o":{"x":0.3,"y":0.147},"t":27,"s":[359.294,492.997,0],"to":[0,0,0],"ti":[0,0,0]},{"t":79,"s":[359.294,469.597,0]}]},"s":{"a":0,"k":[175.5,175.5,100]}},"ao":0,"ip":1,"op":85,"st":12,"bm":0},{"ddd":0,"ind":30,"ty":0,"nm":"Star3D 2","parent":31,"refId":"comp_0","sr":1,"ks":{"p":{"a":0,"k":[254.082,255.505,0]},"a":{"a":0,"k":[356,356,0]}},"ao":0,"w":712,"h":712,"ip":32,"op":79,"st":-15,"bm":0},{"ddd":0,"ind":31,"ty":4,"nm":"Merged Shape Layer 20","parent":29,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.41],"y":[1]},"o":{"x":[0.362],"y":[0]},"t":0,"s":[-120]},{"i":{"x":[0.41],"y":[0.643]},"o":{"x":[0.167],"y":[0]},"t":22,"s":[7]},{"t":80,"s":[-9]}]},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[-51.676,-101.529,0],"to":[0,0,0],"ti":[72.809,-15.498,0]},{"t":14,"s":[-150.01,-147.491,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.139,0.139,0]},"t":2,"s":[5,5,100]},{"t":15,"s":[25,25,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-25.337,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[1.055,-3.993],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.7,-2.035],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.847,7.446],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.349,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[10.436,-33.018],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-3.68,-6.312],[-7.931,-3.78],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.008,1.124],[-0.586,2.912],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[2.376,1.132],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.011,-1.527],[0,0],[0,0],[0,0],[2.62,-5.748],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-43.856,-6.009],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":16,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":27,"s":[{"i":[[5.062,-7.447],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-5.26,-6.304],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.332,0.575],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-4.877,1.541],[0,0],[5.26,6.304],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[-0.13,7.661],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.278,-8.107]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-97.544,-5.534],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.780392156863,0.434571688783,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tm","s":{"a":0,"k":26},"e":{"a":0,"k":67},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[-4.711]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[18.148]},{"t":16,"s":[19.5]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-27.673,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.687,-3.257],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.115,-2.816],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.457,6.275],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.642,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[11.803,-33.994],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-2.974,-6.077],[-8.344,-5.598],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[4.183,2.807],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-44.562,-6.362],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":16,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":27,"s":[{"i":[[4.498,-7.673],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-7.291,-6.191],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.36,0.547],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-6.231,0.751],[0,0],[7.291,6.191],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[0.002,8.107],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.165,-8.107]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-96.867,-5.985],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.824836760876,0.53827383004,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-27.187,57.529],[-16.292,57.299],[-13.979,49.046],[2.837,60.423],[9.536,47.472],[8.978,11.893],[4.282,-0.878],[-31.266,-11.596],[9.888,-7.51],[16.524,-10.707],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.67,-11.523],[-38.84,-10.497],[-38.846,-7.38],[-38.504,-5.769],[-38.424,-5.351],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.589,-1.248],[14.347,-12.504],[-35.345,-11.627],[14.373,-11.972],[13.994,-15.647],[12.993,-20.351],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.242,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-1.138,6.581],[0,0],[0.062,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.088,-77.213],[-36.494,-38.446],[-37.695,-35.245],[-46.718,-26.955],[-46.108,-15.13],[-40.149,-13.848],[-36.531,-12.019],[6.313,-7.541],[-37.005,1.186],[-38.605,3.866],[-26.62,49.17],[-18.187,62.586],[-13.186,57.957],[-9.501,58.312],[0.844,60.235],[8.978,43.151],[12.802,4.817],[17.091,-10.546],[17.371,-11.594],[17.787,-11.922],[18.023,-15.825],[19.282,-26.08],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.378,-77.932]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[2.397,-8.607],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-61.892,-29.528],[-61.602,-17.551],[-51.659,-7.456],[-35.073,-4.845],[7.174,-8.715],[-31.306,6.738],[-41.675,19.794],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":16,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.852,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.809,-84.023],[-47.115,-45.046],[-50.456,-42.94],[-88.72,-35.6],[-93.071,-22.627],[-74.776,-5.077],[-58.654,0.964],[-8.688,-4.937],[-48.392,17.041],[-60.765,32.385],[-66.929,56.451],[-55.202,64.503],[-13.627,45.373],[-9.798,45.381],[30.844,64.725],[42.614,56.738],[39.745,10.565],[39.658,9.45],[40.939,7.155],[43.77,4.753],[49.482,-0.09],[69.172,-22.303],[64.891,-35.288],[24.91,-44.494],[21.58,-46.63],[-3.604,-83.949]],"c":true}]},{"t":27,"s":[{"i":[[5.523,-6.442],[0,0],[1.684,-0.085],[0,0],[-6.735,-5.421],[0,0],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-7.33,4.87],[0,0],[-1.444,-0.968],[0,0],[2.121,8.531],[0,0],[-0.044,0.474],[-0.928,0.741],[0,0],[0,0],[0,0],[8.616,0.488],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-8.634,0.433],[0,0],[0.252,0.203],[8.769,0.053],[0,0],[-12.285,7.881],[0,0],[-2.178,8.526],[0,0],[1.448,-0.961],[0,0],[7.299,4.899],[0,0],[-0.118,-0.478],[0.107,-1.143],[0,0],[0,0],[0,0],[6.741,-5.388],[0,0],[-1.689,-0.096],[0,0],[-5.537,-5.775]],"v":[[-20.886,-105.538],[-62.328,-68.012],[-66.111,-65.298],[-134.948,-41.28],[-139.68,-24.251],[-122.846,-6.695],[-95.101,6.888],[7.166,-2.013],[-75.916,36.816],[-89.266,52.634],[-95.62,92.032],[-80.993,102.413],[-15.446,80.82],[-10.671,80.83],[59.307,99.344],[73.987,89.047],[77.224,29.746],[77.116,28.309],[78.192,24.587],[81.55,20.881],[87.285,14.789],[118.567,-25.052],[113.227,-41.792],[42.243,-64.421],[38.472,-67.176],[-2.536,-105.443]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.2,1,0.994,0.927,0.45,0.999,0.897,0.545,0.7,0.997,0.8,0.163]}},"s":{"a":0,"k":[-10.819,-96.725]},"e":{"a":0,"k":[-12.49,66.21]},"t":1,"nm":"Gradient_CcEXlcFQH2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244.48,243.941]},"a":{"a":0,"k":[-12,-11.35]},"s":{"a":0,"k":[65,74]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 9","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-32.307,-7.466],[-32.358,-6.591],[-32.256,-3.981],[-31.978,-2.419],[-31.93,-2.018],[-30.734,42.793],[-25.93,57.561],[-21.04,57.331],[-12.721,49.079],[4.095,60.455],[10.793,47.504],[9.337,12.655],[4.641,-0.116],[-27.673,-11.537],[10.248,-6.748],[16.883,-9.945],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-35.683,-26.6],[-37.498,-16.043],[-37.668,-15.017],[-37.673,-11.899],[-37.332,-10.288],[-37.252,-9.871],[-26.961,43.797],[-20.131,59.14],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.656,-0.984],[14.415,-10.953],[-31.23,-12.1],[14.441,-10.42],[14.063,-14.096],[13.061,-18.8],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-1.017,-3.012],[0,0],[-0.412,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.332,-2.38],[0,0],[-1.273,0.385],[-2.337,4.542],[-0.612,5.854],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.749,6.177],[0,0],[0.031,0.188],[0.406,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.56,8.157],[1.82,3.832],[0.951,0.74],[0,0],[2.868,-4.049],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.117,-76.115],[-34.136,-39.584],[-36.118,-35.236],[-36.69,-29.875],[-37.642,-15.902],[-36.136,-13.749],[-34.817,-11.92],[8.461,-12.228],[-37.125,-8.687],[-38.35,-3.895],[-26.937,51.778],[-22.722,66.726],[-13.22,61.569],[-9.535,61.924],[0.81,63.847],[6.749,45.547],[12.802,8.723],[13.786,-0.306],[14.066,-1.354],[14.481,-1.682],[14.718,-5.585],[15.527,-16.051],[12.78,-33.799],[10.394,-37.67],[9.371,-40.761],[-0.406,-76.834]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[-0.062,-0.767],[0.324,-2.225],[0,0],[0,0],[0,0],[2.502,-5.63],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-54.713,-32.831],[-58.426,-18.47],[-44.562,-6.362],[-35.244,-3.677],[1.224,-10.828],[-30.916,2.81],[-40.68,12.446],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[15.181,6.926],[14.582,0.999],[14.984,-3.141],[15.501,-4.722],[17.645,-8.949],[24.834,-26.852],[22.051,-41.203],[9.92,-42.178],[8.718,-44.972],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":16,"s":[{"i":[[2.914,-6.477],[0,0],[1.487,-0.066],[0,0],[-5.4,-4.204],[0,0],[-7.604,-0.044],[0,0],[5.245,-3.255],[0.046,-0.175],[0,0],[-5.877,3.778],[0,0],[-1.157,-0.751],[0,0],[1.701,6.617],[0,0],[-0.035,0.367],[-0.744,0.575],[0,0],[0,0],[0,0],[6.908,0.379],[0,0],[0.534,1.227],[0,0]],"o":[[0,0],[-0.547,1.217],[0,0],[-6.922,0.336],[0,0],[0.202,0.157],[7.031,0.041],[0,0],[-9.85,6.113],[0,0],[-1.746,6.613],[0,0],[1.161,-0.746],[0,0],[5.853,3.8],[0,0],[-0.095,-0.371],[0.086,-0.887],[0,0],[0,0],[0,0],[5.405,-4.179],[0,0],[-1.492,-0.074],[0,0],[-2.837,-6.503]],"v":[[-19.988,-83.973],[-45.288,-44.303],[-48.629,-42.197],[-88.78,-35.55],[-93.131,-22.577],[-74.836,-5.027],[-58.714,1.014],[-8.748,-4.887],[-48.451,17.091],[-60.825,32.435],[-66.989,56.501],[-55.261,64.553],[-13.838,44.136],[-10.01,44.144],[30.785,64.775],[42.555,56.788],[37.409,10.615],[37.322,9.5],[38.603,7.205],[41.434,4.803],[47.146,-0.04],[69.113,-22.253],[64.831,-35.238],[23.227,-43.355],[19.897,-45.491],[-3.783,-83.899]],"c":true}]},{"t":27,"s":[{"i":[[4.272,-7.447],[0,0],[1.684,-0.085],[0,0],[-4.394,-7.446],[-7.516,-6.755],[-9.484,-0.057],[0,0],[6.542,-4.197],[0.058,-0.226],[0,0],[-8.458,2.432],[0,0],[-1.444,-0.968],[0,0],[-0.418,8.781],[0,0],[-0.188,0.437],[-0.417,0.632],[0,0],[0,0],[0,0],[8.004,3.228],[0,0],[0.605,1.581],[0,0]],"o":[[0,0],[-0.619,1.568],[0,0],[-5.779,1.766],[0,0],[7.516,6.755],[8.77,0.053],[0,0],[-12.285,7.881],[0,0],[-0.341,8.009],[0,0],[1.448,-0.961],[0,0],[8.385,2.642],[0,0],[0.033,-0.491],[0.454,-1.054],[0,0],[0,0],[0,0],[4.184,-7.548],[0,0],[-1.689,-0.096],[0,0],[-5.278,-8.445]],"v":[[-21.137,-105.14],[-54.82,-65.443],[-58.603,-62.728],[-107.775,-42.711],[-113.131,-25.2],[-97.205,-6.21],[-67.621,1.127],[0.808,-5.858],[-66.24,28.889],[-78.063,43.708],[-80.774,75.953],[-65.405,87.564],[-14.43,69.966],[-9.655,69.977],[40.809,87.759],[58.429,76.209],[60.258,19.238],[60.772,17.656],[62.076,14.666],[64.931,10.667],[70.927,1.49],[88.967,-24.94],[82.963,-42.868],[35.917,-60.059],[32.146,-62.814],[-1.997,-105]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.3,0.995,0.882,0.404,0.65,0.963,0.774,0.228,1,0.932,0.666,0.052]}},"s":{"a":0,"k":[-11,-68]},"e":{"a":0,"k":[-11,42.5]},"t":1,"nm":"Gradient_dmepfa3R3b","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false}],"ip":3,"op":28,"st":-32,"bm":0},{"ddd":0,"ind":32,"ty":4,"nm":"Merged Shape Layer 16","parent":30,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[100]},{"t":70,"s":[0]}]},"r":{"a":0,"k":-0.91},"p":{"a":0,"k":[344.504,343.245,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[100.275,100.275,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":66,"s":[{"i":[[5.442,-13.773],[0,0],[3.509,-0.177],[0,0],[-11.11,-8.941],[-20.352,-8.424],[0,0],[0.868,-3.402],[30.973,-16.95],[2.005,-13.295],[0,0],[-12.091,8.034],[0,0],[-3.009,-2.017],[0,0],[3.499,14.072],[0,0],[-2.735,2.185],[0,0],[14.212,0.805],[0,0],[1.261,3.296],[0,0]],"o":[[0,0],[-1.29,3.269],[0,0],[-14.241,0.714],[0,0],[8.397,3.996],[2.735,2.204],[0,0],[-16.108,8.815],[-2.698,17.89],[-3.592,14.064],[0,0],[3.018,-2.004],[0,0],[12.04,8.081],[0,0],[-0.843,-3.399],[0,0],[11.12,-8.887],[0,0],[-3.521,-0.2],[0,0],[-5.298,-13.828]],"v":[[-27.045,-166.252],[-81.91,-100.899],[-89.795,-95.24],[-169.952,-63.277],[-178.903,-35.691],[-135.07,11.522],[-18.597,5.087],[-17.304,10.744],[-90.653,50.857],[-126.022,83.274],[-125.123,132.475],[-100.995,149.598],[-17.473,121.621],[-7.519,121.643],[76.028,150.069],[100.242,133.085],[105.503,41.383],[108.606,32.219],[154.88,-35.001],[146.071,-62.614],[64.426,-95.321],[56.566,-101.063],[3.223,-166.095]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.947712498085,0.721005667892,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":32,"op":73,"st":-52,"bm":0},{"ddd":0,"ind":33,"ty":4,"nm":"Merged Shape Layer 15","parent":30,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[100]},{"t":55,"s":[0]}]},"r":{"a":0,"k":-0.91},"p":{"a":0,"k":[344.504,343.245,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[100.275,100.275,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":51,"s":[{"i":[[4.082,-10.33],[0,0],[2.632,-0.133],[0,0],[-8.332,-6.706],[-15.264,-6.318],[0,0],[0.651,-2.551],[23.23,-12.713],[1.504,-9.971],[0,0],[-9.068,6.025],[0,0],[-2.257,-1.513],[0,0],[2.624,10.554],[0,0],[-2.051,1.639],[0,0],[10.66,0.604],[0,0],[0.946,2.472],[0,0]],"o":[[0,0],[-0.968,2.452],[0,0],[-10.681,0.535],[0,0],[6.298,2.997],[2.051,1.653],[0,0],[-12.081,6.611],[-2.024,13.418],[-2.694,10.548],[0,0],[2.263,-1.503],[0,0],[9.03,6.06],[0,0],[-0.633,-2.55],[0,0],[8.34,-6.666],[0,0],[-2.641,-0.15],[0,0],[-3.974,-10.371]],"v":[[-23.286,-127.425],[-64.435,-78.409],[-70.348,-74.165],[-130.467,-50.193],[-137.181,-29.503],[-104.305,5.908],[-16.95,1.081],[-15.979,5.324],[-70.992,35.409],[-97.519,59.722],[-96.845,96.623],[-78.749,109.466],[-16.106,88.482],[-8.641,88.499],[54.02,109.819],[72.181,97.081],[76.127,28.303],[78.454,21.43],[113.16,-28.985],[106.553,-49.695],[45.318,-74.226],[39.423,-78.532],[-0.585,-127.307]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.947712498085,0.721005667892,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":31,"op":73,"st":-56,"bm":0},{"ddd":0,"ind":34,"ty":4,"nm":"Merged Shape Layer 14","parent":30,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[100]},{"t":52,"s":[0]}]},"r":{"a":0,"k":-0.91},"p":{"a":0,"k":[344.504,343.245,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[100.275,100.275,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[1.835,-4.643],[0,0],[1.183,-0.06],[0,0],[-3.745,-3.014],[-6.861,-2.84],[0,0],[0.293,-1.147],[10.441,-5.714],[0.676,-4.482],[0,0],[-4.076,2.708],[0,0],[-1.014,-0.68],[0,0],[1.179,4.744],[0,0],[-0.922,0.737],[0,0],[4.791,0.271],[0,0],[0.425,1.111],[0,0]],"o":[[0,0],[-0.435,1.102],[0,0],[-4.801,0.241],[0,0],[2.831,1.347],[0.922,0.743],[0,0],[-5.43,2.972],[-0.91,6.031],[-1.211,4.741],[0,0],[1.017,-0.676],[0,0],[4.059,2.724],[0,0],[-0.284,-1.146],[0,0],[3.748,-2.996],[0,0],[-1.187,-0.067],[0,0],[-1.786,-4.662]],"v":[[-17.076,-63.294],[-35.571,-41.264],[-38.229,-39.356],[-65.251,-28.581],[-68.268,-19.282],[-53.492,-3.366],[-14.228,-5.536],[-13.792,-3.629],[-38.519,9.894],[-50.441,20.822],[-50.138,37.407],[-42.005,43.18],[-13.849,33.748],[-10.494,33.756],[17.67,43.338],[25.833,37.613],[27.606,6.7],[28.652,3.611],[44.252,-19.049],[41.282,-28.358],[13.759,-39.383],[11.109,-41.319],[-6.873,-63.241]],"c":true}]},{"t":48,"s":[{"i":[[2.846,-7.204],[0,0],[1.835,-0.093],[0,0],[-5.811,-4.676],[-10.645,-4.406],[0,0],[0.454,-1.779],[16.2,-8.865],[1.049,-6.954],[0,0],[-6.324,4.202],[0,0],[-1.574,-1.055],[0,0],[1.83,7.36],[0,0],[-1.431,1.143],[0,0],[7.434,0.421],[0,0],[0.66,1.724],[0,0]],"o":[[0,0],[-0.675,1.71],[0,0],[-7.448,0.373],[0,0],[4.392,2.09],[1.431,1.153],[0,0],[-8.425,4.61],[-1.411,9.357],[-1.879,7.356],[0,0],[1.578,-1.048],[0,0],[6.297,4.226],[0,0],[-0.441,-1.778],[0,0],[5.816,-4.648],[0,0],[-1.841,-0.104],[0,0],[-2.771,-7.233]],"v":[[-19.872,-92.171],[-48.568,-57.99],[-52.692,-55.03],[-94.617,-38.313],[-99.298,-23.884],[-76.372,0.81],[-15.454,-2.556],[-14.777,0.403],[-53.141,21.383],[-71.64,38.338],[-71.169,64.071],[-58.55,73.027],[-14.865,58.394],[-9.66,58.406],[34.038,73.274],[46.703,64.39],[49.454,16.427],[51.077,11.635],[75.28,-23.523],[70.673,-37.966],[27.97,-55.072],[23.859,-58.075],[-4.041,-92.089]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.947712498085,0.721005667892,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":28,"op":73,"st":-59,"bm":0},{"ddd":0,"ind":35,"ty":4,"nm":"Merged Shape Layer 25","parent":30,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[100]},{"t":49,"s":[0]}]},"r":{"a":0,"k":-0.91},"p":{"a":0,"k":[344.504,343.245,0]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":0,"k":[135,135,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[3.073,-7.777],[0,0],[1.981,-0.1],[0,0],[-6.273,-5.048],[-11.491,-4.756],[0,0],[0.49,-1.921],[17.488,-9.57],[1.132,-7.507],[0,0],[-6.827,4.536],[0,0],[-1.699,-1.139],[0,0],[1.975,7.945],[0,0],[-1.544,1.234],[0,0],[8.025,0.455],[0,0],[0.712,1.861],[0,0]],"o":[[0,0],[-0.728,1.846],[0,0],[-8.041,0.403],[0,0],[4.741,2.256],[1.544,1.244],[0,0],[-9.095,4.977],[-1.523,10.101],[-2.028,7.941],[0,0],[1.704,-1.131],[0,0],[6.798,4.562],[0,0],[-0.476,-1.919],[0,0],[6.278,-5.018],[0,0],[-1.988,-0.113],[0,0],[-2.991,-7.808]],"v":[[-20.498,-98.631],[-51.476,-61.732],[-55.928,-58.537],[-101.186,-40.49],[-106.24,-24.914],[-81.491,1.744],[-15.728,-1.89],[-14.997,1.304],[-56.412,23.953],[-76.382,42.257],[-75.874,70.036],[-62.252,79.705],[-15.093,63.908],[-9.473,63.92],[37.7,79.971],[51.372,70.381],[54.342,18.604],[56.094,13.43],[82.222,-24.524],[77.248,-40.115],[31.149,-58.582],[26.711,-61.824],[-3.408,-98.543]],"c":true}]},{"t":49,"s":[{"i":[[4.082,-10.33],[0,0],[2.632,-0.133],[0,0],[-8.332,-6.706],[-15.264,-6.318],[0,0],[0.651,-2.551],[23.23,-12.713],[1.504,-9.971],[0,0],[-9.068,6.025],[0,0],[-2.257,-1.513],[0,0],[2.624,10.554],[0,0],[-2.051,1.639],[0,0],[10.66,0.604],[0,0],[0.946,2.472],[0,0]],"o":[[0,0],[-0.968,2.452],[0,0],[-10.681,0.535],[0,0],[6.298,2.997],[2.051,1.653],[0,0],[-12.081,6.611],[-2.024,13.418],[-2.694,10.548],[0,0],[2.263,-1.503],[0,0],[9.03,6.06],[0,0],[-0.633,-2.55],[0,0],[8.34,-6.666],[0,0],[-2.641,-0.15],[0,0],[-3.974,-10.371]],"v":[[-23.286,-127.425],[-64.435,-78.409],[-70.348,-74.165],[-130.467,-50.193],[-137.181,-29.503],[-104.305,5.908],[-16.95,1.081],[-15.979,5.324],[-70.992,35.409],[-97.519,59.722],[-96.845,96.623],[-78.749,109.466],[-16.106,88.482],[-8.641,88.499],[54.02,109.819],[72.181,97.081],[76.127,28.303],[78.454,21.43],[113.16,-28.985],[106.553,-49.695],[45.318,-74.226],[39.423,-78.532],[-0.585,-127.307]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":28,"op":73,"st":-59,"bm":0},{"ddd":0,"ind":36,"ty":4,"nm":"Points","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":23,"s":[100]},{"t":35,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-1]},{"t":35,"s":[4]}]},"p":{"a":0,"k":[256.555,258.122,0]},"a":{"a":0,"k":[0.5,3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.107,0.107,0.347],"y":[0,0,0]},"t":-2,"s":[9.782,9.782,100]},{"i":{"x":[0.708,0.708,0.479],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":9,"s":[25.155,25.155,100]},{"t":35,"s":[29.906,29.906,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[7.226,-9.469],[9.469,7.226],[-7.226,9.469],[-9.469,-7.226]],"o":[[-7.226,9.469],[-9.469,-7.226],[7.226,-9.469],[9.469,7.226]],"v":[[385.072,18.248],[354.843,22.31],[350.781,-7.919],[381.011,-11.981]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.796078431373,0.439215686275,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[367.391,4.348]},"a":{"a":0,"k":[367.391,4.348]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.317,0.317],"y":[0,0]},"t":-2,"s":[150,150]},{"i":{"x":[0.496,0.496],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":9,"s":[100,100]},{"t":35,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[11.805,-1.586],[1.586,11.805],[-11.805,1.586],[-1.586,-11.805]],"o":[[-11.805,1.586],[-1.586,-11.805],[11.805,-1.586],[1.586,11.805]],"v":[[261.231,286.312],[236.984,267.809],[255.487,243.561],[279.735,262.064]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.796078431373,0.439215686275,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[256.522,264.13]},"a":{"a":0,"k":[256.522,264.13]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.317,0.317],"y":[0,0]},"t":-2,"s":[150,150]},{"i":{"x":[0.496,0.496],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":9,"s":[100,100]},{"t":35,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[9.469,7.226],[-7.226,9.469],[-9.469,-7.226],[7.226,-9.469]],"o":[[-9.469,-7.226],[7.226,-9.469],[9.469,7.226],[-7.226,9.469]],"v":[[-14.927,388.164],[-18.989,357.934],[11.24,353.873],[15.302,384.102]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.796078431373,0.439215686275,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-4.348,370.652]},"a":{"a":0,"k":[-4.348,370.652]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.2,0.2],"y":[0,0]},"t":-2,"s":[150,150]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":9,"s":[100,100]},{"t":35,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.586,11.805],[-11.805,1.586],[-1.586,-11.805],[11.805,-1.586]],"o":[[-1.586,-11.805],[11.805,-1.586],[1.586,11.805],[-11.805,1.586]],"v":[[-282.221,264.91],[-263.717,240.663],[-239.47,259.166],[-257.973,283.413]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.796078431373,0.439215686275,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-263.043,260.87]},"a":{"a":0,"k":[-263.043,260.87]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.2,0.2],"y":[0,0]},"t":-2,"s":[150,150]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":9,"s":[100,100]},{"t":35,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.226,9.469],[-9.469,-7.226],[7.226,-9.469],[9.469,7.226]],"o":[[7.226,-9.469],[9.469,7.226],[-7.226,9.469],[-9.469,-7.226]],"v":[[-384.072,-11.248],[-353.843,-15.31],[-349.781,14.919],[-380.011,18.981]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.796078431373,0.439215686275,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-369.565,0]},"a":{"a":0,"k":[-369.565,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.2,0.2],"y":[0,0]},"t":-2,"s":[150,150]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":9,"s":[100,100]},{"t":35,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-11.805,1.586],[-1.586,-11.805],[11.805,-1.586],[1.586,11.805]],"o":[[11.805,-1.586],[1.586,11.805],[-11.805,1.586],[-1.586,-11.805]],"v":[[-260.819,-278.542],[-236.571,-260.039],[-255.075,-235.791],[-279.322,-254.295]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.796078431373,0.439215686275,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-259.783,-258.696]},"a":{"a":0,"k":[-259.783,-258.696]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.2,0.2],"y":[0,0]},"t":-2,"s":[150,150]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":9,"s":[100,100]},{"t":35,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-9.469,-7.226],[7.226,-9.469],[9.469,7.226],[-7.226,9.469]],"o":[[9.469,7.226],[-7.226,9.469],[-9.469,-7.226],[7.226,-9.469]],"v":[[15.927,-381.164],[19.989,-350.934],[-10.24,-346.873],[-14.302,-377.102]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.796078431373,0.439215686275,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,-365.217]},"a":{"a":0,"k":[0,-365.217]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.2,0.2],"y":[0,0]},"t":-2,"s":[150,150]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":9,"s":[100,100]},{"t":35,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.586,-11.805],[11.805,-1.586],[1.586,11.805],[-11.805,1.586]],"o":[[1.586,11.805],[-11.805,1.586],[-1.586,-11.805],[11.805,-1.586]],"v":[[283.221,-257.91],[264.717,-233.663],[240.47,-252.166],[258.973,-276.413]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.796078431373,0.439215686275,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[257.609,-254.348]},"a":{"a":0,"k":[257.609,-254.348]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.2,0.2],"y":[0,0]},"t":-2,"s":[150,150]},{"i":{"x":[0.3,0.3],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":9,"s":[100,100]},{"t":35,"s":[40,40]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 8","bm":0,"hd":false}],"ip":5,"op":34,"st":-2,"bm":0},{"ddd":0,"ind":37,"ty":4,"nm":"Circle","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":5,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":23,"s":[100]},{"t":35,"s":[0]}]},"p":{"a":0,"k":[256.6,258.05,0]},"a":{"a":0,"k":[-2.049,6.248,0]},"s":{"a":0,"k":[27.95,27.95,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.05,"y":0},"t":0,"s":[{"i":[[0,-17.536],[17.536,0],[0,17.536],[-17.536,0]],"o":[[0,17.536],[-17.536,0],[0,-17.536],[17.536,0]],"v":[[29.703,6.248],[-2.049,38],[-33.801,6.248],[-2.049,-25.504]],"c":true}]},{"t":35,"s":[{"i":[[0,-196.476],[196.476,0],[0,196.476],[-196.476,0]],"o":[[0,196.476],[-196.476,0],[0,-196.476],[196.476,0]],"v":[[353.703,6.248],[-2.049,362],[-357.801,6.248],[-2.049,-349.504]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.796078431373,0.439215686275,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.05],"y":[0]},"t":0,"s":[120]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[18]},{"t":35,"s":[6]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":34,"st":0,"bm":0}]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/star_reaction_effect3.json b/TMessagesProj/src/main/res/raw/star_reaction_effect3.json new file mode 100644 index 00000000000..1c32b5cc09e --- /dev/null +++ b/TMessagesProj/src/main/res/raw/star_reaction_effect3.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":9,"op":94,"w":512,"h":512,"nm":"REACTION PREM STAR","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Light 50","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89.615,"s":[100]},{"t":94,"s":[0]}]},"p":{"a":0,"k":[420.276,174.641,0]},"a":{"a":0,"k":[413.215,412.501,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[13.5,13.5,100]},{"i":{"x":[0.5,0.5,0.5],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,4.167]},"t":84,"s":[90,90,100]},{"t":97,"s":[13.5,13.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[23.205,0],[0,-25.387],[-30.062,0],[0,26.945]],"o":[[23.205,0],[0,-24.919],[-30.997,0],[0,26.945]],"v":[[-38.789,0],[0,38.789],[38.789,0],[0,-38.789]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-29.035],[29.035,0],[0,29.035],[-29.035,0]],"o":[[0,29.035],[-29.035,0],[0,-29.035],[29.035,0]],"v":[[52.572,0],[0,52.572],[-52.572,0],[0,-52.572]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.2,1,0.996,0.8,0.6,1,0.996,0.8,1,1,0.996,0.8,0.2,1,0.6,0.5,1,0]}},"s":{"a":0,"k":[-0.215,-0.501]},"e":{"a":0,"k":[51.288,-0.501]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_o0TcRjUXr7","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":78,"op":93,"st":75,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Light 49","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82.615,"s":[100]},{"t":87,"s":[0]}]},"p":{"a":0,"k":[192.276,416.641,0]},"a":{"a":0,"k":[413.215,412.501,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[13.5,13.5,100]},{"i":{"x":[0.5,0.5,0.5],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,-3.333]},"t":74,"s":[120,120,100]},{"t":87,"s":[13.5,13.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[23.205,0],[0,-25.387],[-30.062,0],[0,26.945]],"o":[[23.205,0],[0,-24.919],[-30.997,0],[0,26.945]],"v":[[-38.789,0],[0,38.789],[38.789,0],[0,-38.789]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-29.035],[29.035,0],[0,29.035],[-29.035,0]],"o":[[0,29.035],[-29.035,0],[0,-29.035],[29.035,0]],"v":[[52.572,0],[0,52.572],[-52.572,0],[0,-52.572]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.2,1,0.996,0.8,0.6,1,0.996,0.8,1,1,0.996,0.8,0.2,1,0.6,0.5,1,0]}},"s":{"a":0,"k":[-0.215,-0.501]},"e":{"a":0,"k":[51.288,-0.501]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_0g50dtwYnN","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":66,"op":86,"st":64,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Light 48","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73.615,"s":[100]},{"t":78,"s":[0]}]},"p":{"a":0,"k":[319.276,78.641,0]},"a":{"a":0,"k":[413.215,412.501,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":55,"s":[13.5,13.5,100]},{"i":{"x":[0.5,0.5,0.5],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,-0.595]},"t":65,"s":[145,145,100]},{"t":78,"s":[13.5,13.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[23.205,0],[0,-25.387],[-30.062,0],[0,26.945]],"o":[[23.205,0],[0,-24.919],[-30.997,0],[0,26.945]],"v":[[-38.789,0],[0,38.789],[38.789,0],[0,-38.789]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-29.035],[29.035,0],[0,29.035],[-29.035,0]],"o":[[0,29.035],[-29.035,0],[0,-29.035],[29.035,0]],"v":[[52.572,0],[0,52.572],[-52.572,0],[0,-52.572]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.2,1,0.996,0.8,0.6,1,0.996,0.8,1,1,0.996,0.8,0.2,1,0.6,0.5,1,0]}},"s":{"a":0,"k":[-0.215,-0.501]},"e":{"a":0,"k":[51.288,-0.501]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_ibPFueI2Pk","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":56,"op":75,"st":55,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Light 47","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60.615,"s":[100]},{"t":65,"s":[0]}]},"p":{"a":0,"k":[87.276,259.641,0]},"a":{"a":0,"k":[413.215,412.501,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42,"s":[13.5,13.5,100]},{"i":{"x":[0.5,0.5,0.5],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,-1.667]},"t":52,"s":[110,110,100]},{"t":65,"s":[13.5,13.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[23.205,0],[0,-25.387],[-30.062,0],[0,26.945]],"o":[[23.205,0],[0,-24.919],[-30.997,0],[0,26.945]],"v":[[-38.789,0],[0,38.789],[38.789,0],[0,-38.789]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-29.035],[29.035,0],[0,29.035],[-29.035,0]],"o":[[0,29.035],[-29.035,0],[0,-29.035],[29.035,0]],"v":[[52.572,0],[0,52.572],[-52.572,0],[0,-52.572]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.2,1,0.996,0.8,0.6,1,0.996,0.8,1,1,0.996,0.8,0.2,1,0.6,0.5,1,0]}},"s":{"a":0,"k":[-0.215,-0.501]},"e":{"a":0,"k":[51.288,-0.501]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_2KEMfemvZY","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":45,"op":62,"st":42,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Light 46","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43.615,"s":[100]},{"t":48,"s":[0]}]},"p":{"a":0,"k":[422.276,395.641,0]},"a":{"a":0,"k":[413.215,412.501,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[13.5,13.5,100]},{"i":{"x":[0.5,0.5,0.5],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,-1.111]},"t":35,"s":[160,160,100]},{"t":48,"s":[13.5,13.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[23.205,0],[0,-25.387],[-30.062,0],[0,26.945]],"o":[[23.205,0],[0,-24.919],[-30.997,0],[0,26.945]],"v":[[-38.789,0],[0,38.789],[38.789,0],[0,-38.789]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-29.035],[29.035,0],[0,29.035],[-29.035,0]],"o":[[0,29.035],[-29.035,0],[0,-29.035],[29.035,0]],"v":[[52.572,0],[0,52.572],[-52.572,0],[0,-52.572]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.2,1,0.996,0.8,0.6,1,0.996,0.8,1,1,0.996,0.8,0.2,1,0.6,0.5,1,0]}},"s":{"a":0,"k":[-0.215,-0.501]},"e":{"a":0,"k":[51.288,-0.501]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_kvQ60Aov6A","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":26,"op":45,"st":25,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Light 51","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31.615,"s":[100]},{"t":36,"s":[0]}]},"p":{"a":0,"k":[152.276,130.641,0]},"a":{"a":0,"k":[413.215,412.501,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[13.5,13.5,100]},{"i":{"x":[0.5,0.5,0.5],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,-0.98]},"t":23,"s":[180,180,100]},{"t":36,"s":[13.5,13.5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[23.205,0],[0,-25.387],[-30.062,0],[0,26.945]],"o":[[23.205,0],[0,-24.919],[-30.997,0],[0,26.945]],"v":[[-38.789,0],[0,38.789],[38.789,0],[0,-38.789]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-29.035],[29.035,0],[0,29.035],[-29.035,0]],"o":[[0,29.035],[-29.035,0],[0,-29.035],[29.035,0]],"v":[[52.572,0],[0,52.572],[-52.572,0],[0,-52.572]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.2,1,0.996,0.8,0.6,1,0.996,0.8,1,1,0.996,0.8,0.2,1,0.6,0.5,1,0]}},"s":{"a":0,"k":[-0.215,-0.501]},"e":{"a":0,"k":[51.288,-0.501]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_jnpCGvptCQ","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[413.215,412.501]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":14,"op":33,"st":13,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Star 3D 9","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.592],"y":[0.358]},"o":{"x":[0.227],"y":[-0.494]},"t":33,"s":[-20]},{"i":{"x":[0.744],"y":[1]},"o":{"x":[0.343],"y":[0.608]},"t":51,"s":[-50.571]},{"t":91,"s":[-111]}]},"p":{"a":1,"k":[{"i":{"x":0.518,"y":0.924},"o":{"x":0.167,"y":0.167},"t":33,"s":[294.5,198,0],"to":[-1.721,-37.864,0],"ti":[-32.829,1.762,0]},{"i":{"x":0.681,"y":0.835},"o":{"x":0.3,"y":0.057},"t":50,"s":[379.381,29.874,0],"to":[66.407,-3.564,0],"ti":[0,0,0]},{"t":91,"s":[448.5,407,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,1.128]},"t":33,"s":[-32,32,100]},{"i":{"x":[0.536,0.536,0.462],"y":[1,1,1]},"o":{"x":[0.1,0.1,0.1],"y":[0,0,0]},"t":38,"s":[-65,65,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,3.778]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":77,"s":[-35,35,100]},{"t":91,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[243.78,183.376],[254.942,217.478]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.39],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":41,"s":[9]},{"t":70,"s":[9]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":62,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.313,34.554],[27.483,22.238]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413]],"o":[[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319]],"v":[[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517]],"o":[[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66]],"v":[[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259]],"o":[[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83]],"v":[[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[9.393,12.806],[4.697,0.035]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0]],"o":[[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0]],"v":[[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307]],"o":[[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742]],"v":[[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148]],"o":[[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704]],"v":[[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922]],"o":[[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225]],"v":[[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":81,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"t":89,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.784313785329,0.376470618154,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.39],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[5]},{"t":70,"s":[8]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[4.109,-5.958],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":62,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.313,34.554],[27.483,22.238],[-14.457,-4.833],[38.892,-4.617],[53.053,-10.875],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[3.597,-13.082],[0,0],[0.88,-0.063],[0,0],[-3.521,-4.022],[0,0],[-0.091,-0.152],[-0.09,-0.395],[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413],[-0.485,0.55],[-2.432,0.21],[-2.067,1.896],[0,0],[5.68,1.389],[0,0],[0.316,1.173],[0,0]],"o":[[0,0],[-0.324,1.164],[0,0],[-6.15,0.343],[0,0],[0.112,0.128],[0.192,0.322],[0.102,0.451],[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319],[0,0],[4.068,-1.665],[5.891,-5.403],[3.525,-3.998],[0,0],[-0.883,-0.071],[0,0],[-3.439,-11.092]],"v":[[-21.768,-75.658],[-34.443,-43.455],[-36.421,-41.441],[-52.974,-42.186],[-58.309,-28.641],[-45.156,0.82],[-44.852,1.242],[-44.426,2.329],[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323],[-14.799,-6.748],[23.956,1.7],[34.634,-3.062],[45.258,-19.512],[40.423,-32.312],[12.269,-35.871],[10.181,-39.665],[-1.958,-76.117]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[3.971,-15.52],[0,0],[0.583,-0.342],[0,0],[-1.721,-4.082],[0,0],[-0.069,-0.176],[-0.096,-0.423],[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517],[-0.243,0.275],[-1.216,0.105],[-1.033,0.948],[0,0],[3.167,1.779],[0,0],[0.273,1.186],[0,0]],"o":[[0,0],[-0.279,1.177],[0,0],[-3.379,2.142],[0,0],[0.08,0.161],[0.147,0.371],[0.109,0.482],[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66],[0,0],[2.034,-0.832],[2.945,-2.702],[1.324,-4.931],[0,0],[-0.652,-0.491],[0,0],[-3.783,-12.836]],"v":[[-22.744,-73.788],[-32.146,-45.618],[-33.635,-42.926],[-42.808,-39.976],[-46.444,-27.437],[-37.816,-1.868],[-37.748,-1.144],[-37.538,0.958],[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643],[-21.88,-7.406],[19.262,-2.153],[24.412,-6.371],[29.223,-16.948],[25.604,-30.175],[10.97,-35.141],[9.46,-38.658],[-0.915,-74.428]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[9.393,12.806],[4.697,0.035],[-21.434,-7.714],[10.304,-6.597],[16.939,-9.794],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.475,-5.557],[-38.645,-4.531],[-38.65,-1.413],[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538],[-35.15,-5.661],[14.568,-6.005],[14.19,-9.681],[13.188,-14.385],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.485,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.279,6.581],[0,0],[0.063,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.171,-72.991],[-31.987,-38.412],[-33.188,-35.211],[-42.821,-26.921],[-41.601,-15.096],[-35.128,-2.202],[-31.51,-0.373],[6.313,-7.541],[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212],[14.066,-5.26],[14.481,-5.587],[14.718,-9.491],[17.48,-25.816],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.46,-73.71]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[3.924,-15.172],[0,0],[0.5,-0.492],[0,0],[-1.049,-4.075],[0,0],[-1.601,-0.162],[-0.034,-0.15],[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148],[-0.224,0.914],[0,0],[0,0],[0,0],[1.541,1.746],[0,0],[0.233,1.182],[0,0]],"o":[[0,0],[-0.285,1.172],[0,0],[-1.897,3.1],[0,0],[0.078,0.182],[1.525,0.332],[0.039,0.171],[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704],[0,0],[0,0],[0,0],[0.267,-5.393],[0,0],[-0.501,-0.716],[0,0],[-3.739,-12.583]],"v":[[-22.621,-74.064],[-32.626,-41.045],[-34.028,-38.01],[-49.001,-31.576],[-51.624,-19.959],[-41.281,-3.597],[-33.875,-0.965],[-0.223,-8.668],[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886],[12.282,-5.109],[14.395,-5.17],[15.247,-9.301],[21.521,-28.247],[19.212,-41.496],[10.163,-45.709],[9.051,-48.651],[-1.047,-74.68]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[0.838,-5.158],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-53.93,-30.482],[-56.897,-18.823],[-44.059,-1.242],[-34.741,1.443],[-1.76,-7.796],[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":81,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"t":89,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.854902020623,0.466666696586,0.003921568627,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.39],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[5]},{"t":70,"s":[8]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.855,0.49,0.513,0.988,0.721,0.294,1,0.976,0.587,0.098]}},"s":{"a":0,"k":[-8.994,-72.71]},"e":{"a":0,"k":[-23.843,22.638]},"t":1,"nm":"Gradient_R6YssOGlwB","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":33,"op":90,"st":17,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Star 3D 8","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[28]},{"t":96,"s":[-13]}]},"p":{"a":1,"k":[{"i":{"x":0.518,"y":0.919},"o":{"x":0.167,"y":0.167},"t":43,"s":[244.5,218,0],"to":[-1.721,-37.864,0],"ti":[30.704,-0.75,0]},{"i":{"x":0.681,"y":0.928},"o":{"x":0.334,"y":0.075},"t":61,"s":[179.381,52.374,0],"to":[-43.508,1.063,0],"ti":[0,0,0]},{"t":97,"s":[106,313.5,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,-7.424]},"t":43,"s":[-15,15,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1.909]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":77,"s":[-58,58,100]},{"t":96,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.184,183.113],[231.615,216.746]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[12]},{"t":78,"s":[8]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":62,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":66,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.313,34.554],[27.483,22.238]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413]],"o":[[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319]],"v":[[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517]],"o":[[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66]],"v":[[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259]],"o":[[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83]],"v":[[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[9.393,12.806],[4.697,0.035]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0]],"o":[[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0]],"v":[[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":79,"s":[{"i":[[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307]],"o":[[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742]],"v":[[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":80,"s":[{"i":[[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148]],"o":[[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704]],"v":[[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":81,"s":[{"i":[[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922]],"o":[[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225]],"v":[[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"t":94,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.793464183807,0.468024879694,0.003111624159,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[10]},{"t":78,"s":[6]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":62,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[4.109,-5.958],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":66,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.313,34.554],[27.483,22.238],[-14.457,-4.833],[38.892,-4.617],[53.053,-10.875],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74,"s":[{"i":[[3.597,-13.082],[0,0],[0.88,-0.063],[0,0],[-3.521,-4.022],[0,0],[-0.091,-0.152],[-0.09,-0.395],[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413],[-0.485,0.55],[-2.432,0.21],[-2.067,1.896],[0,0],[5.68,1.389],[0,0],[0.316,1.173],[0,0]],"o":[[0,0],[-0.324,1.164],[0,0],[-6.15,0.343],[0,0],[0.112,0.128],[0.192,0.322],[0.102,0.451],[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319],[0,0],[4.068,-1.665],[5.891,-5.403],[3.525,-3.998],[0,0],[-0.883,-0.071],[0,0],[-3.439,-11.092]],"v":[[-21.768,-75.658],[-34.443,-43.455],[-36.421,-41.441],[-52.974,-42.186],[-58.309,-28.641],[-45.156,0.82],[-44.852,1.242],[-44.426,2.329],[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323],[-14.799,-6.748],[23.956,1.7],[34.634,-3.062],[45.258,-19.512],[40.423,-32.312],[12.269,-35.871],[10.181,-39.665],[-1.958,-76.117]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[3.971,-15.52],[0,0],[0.583,-0.342],[0,0],[-1.721,-4.082],[0,0],[-0.069,-0.176],[-0.096,-0.423],[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517],[-0.243,0.275],[-1.216,0.105],[-1.033,0.948],[0,0],[3.167,1.779],[0,0],[0.273,1.186],[0,0]],"o":[[0,0],[-0.279,1.177],[0,0],[-3.379,2.142],[0,0],[0.08,0.161],[0.147,0.371],[0.109,0.482],[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66],[0,0],[2.034,-0.832],[2.945,-2.702],[1.324,-4.931],[0,0],[-0.652,-0.491],[0,0],[-3.783,-12.836]],"v":[[-22.744,-73.788],[-32.146,-45.618],[-33.635,-42.926],[-42.808,-39.976],[-46.444,-27.437],[-37.816,-1.868],[-37.748,-1.144],[-37.538,0.958],[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643],[-21.88,-7.406],[19.262,-2.153],[24.412,-6.371],[29.223,-16.948],[25.604,-30.175],[10.97,-35.141],[9.46,-38.658],[-0.915,-74.428]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[9.393,12.806],[4.697,0.035],[-21.434,-7.714],[10.304,-6.597],[16.939,-9.794],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.475,-5.557],[-38.645,-4.531],[-38.65,-1.413],[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538],[-35.15,-5.661],[14.568,-6.005],[14.19,-9.681],[13.188,-14.385],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":79,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.485,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.279,6.581],[0,0],[0.063,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.171,-72.991],[-31.987,-38.412],[-33.188,-35.211],[-42.821,-26.921],[-41.601,-15.096],[-35.128,-2.202],[-31.51,-0.373],[6.313,-7.541],[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212],[14.066,-5.26],[14.481,-5.587],[14.718,-9.491],[17.48,-25.816],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.46,-73.71]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":80,"s":[{"i":[[3.924,-15.172],[0,0],[0.5,-0.492],[0,0],[-1.049,-4.075],[0,0],[-1.601,-0.162],[-0.034,-0.15],[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148],[-0.224,0.914],[0,0],[0,0],[0,0],[1.541,1.746],[0,0],[0.233,1.182],[0,0]],"o":[[0,0],[-0.285,1.172],[0,0],[-1.897,3.1],[0,0],[0.078,0.182],[1.525,0.332],[0.039,0.171],[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704],[0,0],[0,0],[0,0],[0.267,-5.393],[0,0],[-0.501,-0.716],[0,0],[-3.739,-12.583]],"v":[[-22.621,-74.064],[-32.626,-41.045],[-34.028,-38.01],[-49.001,-31.576],[-51.624,-19.959],[-41.281,-3.597],[-33.875,-0.965],[-0.223,-8.668],[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886],[12.282,-5.109],[14.395,-5.17],[15.247,-9.301],[21.521,-28.247],[19.212,-41.496],[10.163,-45.709],[9.051,-48.651],[-1.047,-74.68]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":81,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[0.838,-5.158],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-53.93,-30.482],[-56.897,-18.823],[-44.059,-1.242],[-34.741,1.443],[-1.76,-7.796],[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"t":94,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.878431379795,0.556862771511,0.031372550875,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[10]},{"t":78,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.904,0.6,0.512,0.999,0.863,0.434,1,0.997,0.822,0.267]}},"s":{"a":0,"k":[11.842,-51.821]},"e":{"a":0,"k":[-28.242,23.088]},"t":1,"nm":"Gradient_lrqTCfvxfh","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":46,"op":93,"st":23,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Star 3D 7","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[-23]},{"t":82,"s":[100]}]},"p":{"a":1,"k":[{"i":{"x":0.518,"y":0.785},"o":{"x":0.167,"y":0.167},"t":21,"s":[185,203,0],"to":[-15.221,-35.364,0],"ti":[38.07,-3.659,0]},{"i":{"x":0.677,"y":0.932},"o":{"x":0.356,"y":0.146},"t":41,"s":[92.381,83.874,0],"to":[-64.432,6.193,0],"ti":[0,0,0]},{"t":85,"s":[14.5,441,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.417,0.417,0.301],"y":[0,0,0]},"t":21,"s":[50,50,100]},{"i":{"x":[0.639,0.639,0.703],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":40,"s":[60,60,100]},{"i":{"x":[0.721,0.721,0.689],"y":[1,1,1]},"o":{"x":[0.533,0.533,0.3],"y":[0,0,0]},"t":69,"s":[28,28,100]},{"t":85,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.184,183.113],[231.615,216.746]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":21,"s":[9]},{"t":66,"s":[9]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":46,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.313,34.554],[27.483,22.238]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[{"i":[[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413]],"o":[[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319]],"v":[[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517]],"o":[[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66]],"v":[[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[{"i":[[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259]],"o":[[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83]],"v":[[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[9.393,12.806],[4.697,0.035]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[{"i":[[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0]],"o":[[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0]],"v":[[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[{"i":[[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307]],"o":[[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742]],"v":[[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148]],"o":[[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704]],"v":[[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886]],"c":false}]},{"i":{"x":0.69,"y":1},"o":{"x":0.167,"y":0.167},"t":62,"s":[{"i":[[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922]],"o":[[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225]],"v":[[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.31,"y":0},"t":69,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"t":85,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.785621074602,0.3764021032,0.00102690879,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":21,"s":[7]},{"t":66,"s":[8]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[4.109,-5.958],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":46,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.313,34.554],[27.483,22.238],[-14.457,-4.833],[38.892,-4.617],[53.053,-10.875],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[{"i":[[3.597,-13.082],[0,0],[0.88,-0.063],[0,0],[-3.521,-4.022],[0,0],[-0.091,-0.152],[-0.09,-0.395],[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413],[-0.485,0.55],[-2.432,0.21],[-2.067,1.896],[0,0],[5.68,1.389],[0,0],[0.316,1.173],[0,0]],"o":[[0,0],[-0.324,1.164],[0,0],[-6.15,0.343],[0,0],[0.112,0.128],[0.192,0.322],[0.102,0.451],[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319],[0,0],[4.068,-1.665],[5.891,-5.403],[3.525,-3.998],[0,0],[-0.883,-0.071],[0,0],[-3.439,-11.092]],"v":[[-21.768,-75.658],[-34.443,-43.455],[-36.421,-41.441],[-52.974,-42.186],[-58.309,-28.641],[-45.156,0.82],[-44.852,1.242],[-44.426,2.329],[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323],[-14.799,-6.748],[23.956,1.7],[34.634,-3.062],[45.258,-19.512],[40.423,-32.312],[12.269,-35.871],[10.181,-39.665],[-1.958,-76.117]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[3.971,-15.52],[0,0],[0.583,-0.342],[0,0],[-1.721,-4.082],[0,0],[-0.069,-0.176],[-0.096,-0.423],[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517],[-0.243,0.275],[-1.216,0.105],[-1.033,0.948],[0,0],[3.167,1.779],[0,0],[0.273,1.186],[0,0]],"o":[[0,0],[-0.279,1.177],[0,0],[-3.379,2.142],[0,0],[0.08,0.161],[0.147,0.371],[0.109,0.482],[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66],[0,0],[2.034,-0.832],[2.945,-2.702],[1.324,-4.931],[0,0],[-0.652,-0.491],[0,0],[-3.783,-12.836]],"v":[[-22.744,-73.788],[-32.146,-45.618],[-33.635,-42.926],[-42.808,-39.976],[-46.444,-27.437],[-37.816,-1.868],[-37.748,-1.144],[-37.538,0.958],[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643],[-21.88,-7.406],[19.262,-2.153],[24.412,-6.371],[29.223,-16.948],[25.604,-30.175],[10.97,-35.141],[9.46,-38.658],[-0.915,-74.428]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[9.393,12.806],[4.697,0.035],[-21.434,-7.714],[10.304,-6.597],[16.939,-9.794],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.475,-5.557],[-38.645,-4.531],[-38.65,-1.413],[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538],[-35.15,-5.661],[14.568,-6.005],[14.19,-9.681],[13.188,-14.385],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.485,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.279,6.581],[0,0],[0.063,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.171,-72.991],[-31.987,-38.412],[-33.188,-35.211],[-42.821,-26.921],[-41.601,-15.096],[-35.128,-2.202],[-31.51,-0.373],[6.313,-7.541],[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212],[14.066,-5.26],[14.481,-5.587],[14.718,-9.491],[17.48,-25.816],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.46,-73.71]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[3.924,-15.172],[0,0],[0.5,-0.492],[0,0],[-1.049,-4.075],[0,0],[-1.601,-0.162],[-0.034,-0.15],[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148],[-0.224,0.914],[0,0],[0,0],[0,0],[1.541,1.746],[0,0],[0.233,1.182],[0,0]],"o":[[0,0],[-0.285,1.172],[0,0],[-1.897,3.1],[0,0],[0.078,0.182],[1.525,0.332],[0.039,0.171],[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704],[0,0],[0,0],[0,0],[0.267,-5.393],[0,0],[-0.501,-0.716],[0,0],[-3.739,-12.583]],"v":[[-22.621,-74.064],[-32.626,-41.045],[-34.028,-38.01],[-49.001,-31.576],[-51.624,-19.959],[-41.281,-3.597],[-33.875,-0.965],[-0.223,-8.668],[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886],[12.282,-5.109],[14.395,-5.17],[15.247,-9.301],[21.521,-28.247],[19.212,-41.496],[10.163,-45.709],[9.051,-48.651],[-1.047,-74.68]],"c":true}]},{"i":{"x":0.69,"y":1},"o":{"x":0.167,"y":0.167},"t":62,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[0.838,-5.158],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-53.93,-30.482],[-56.897,-18.823],[-44.059,-1.242],[-34.741,1.443],[-1.76,-7.796],[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.31,"y":0},"t":69,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"t":85,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.856209309896,0.465928021599,0.00559619034,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":21,"s":[7]},{"t":66,"s":[8]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.855,0.49,0.513,0.988,0.721,0.294,1,0.976,0.587,0.098]}},"s":{"a":0,"k":[-23.79,-64.655]},"e":{"a":0,"k":[12.417,13.071]},"t":1,"nm":"Gradient_7XOEScdsi6","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":21,"op":80,"st":-5,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Star 3D 3","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[-40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[17.073]},{"t":66,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.305,"y":0.921},"o":{"x":0.167,"y":0.167},"t":8,"s":[260.5,178,0],"to":[-1.221,-23.364,0],"ti":[23.669,2.424,0]},{"i":{"x":0.71,"y":0.921},"o":{"x":0.402,"y":0.037},"t":22,"s":[225.381,77.374,0],"to":[-37.271,-3.816,0],"ti":[0,0,0]},{"t":67,"s":[166,506.5,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.55,0.55,0.4],"y":[1,1,1]},"o":{"x":[0.304,0.304,0.167],"y":[0,0,0]},"t":8,"s":[20,20,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1.98]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":52,"s":[90,90,100]},{"t":64,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.184,183.113],[231.615,216.746]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[12]},{"t":38,"s":[8]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":32,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.313,34.554],[27.483,22.238]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413]],"o":[[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319]],"v":[[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[{"i":[[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517]],"o":[[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66]],"v":[[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259]],"o":[[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83]],"v":[[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[9.393,12.806],[4.697,0.035]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0]],"o":[[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0]],"v":[[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307]],"o":[[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742]],"v":[[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148]],"o":[[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704]],"v":[[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886]],"c":false}]},{"i":{"x":0.69,"y":1},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922]],"o":[[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225]],"v":[[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.31,"y":0},"t":55,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"t":63,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.843137254902,0.472930908203,0.007714930703,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[10]},{"t":38,"s":[6]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[4.109,-5.958],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":32,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.313,34.554],[27.483,22.238],[-14.457,-4.833],[38.892,-4.617],[53.053,-10.875],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[3.597,-13.082],[0,0],[0.88,-0.063],[0,0],[-3.521,-4.022],[0,0],[-0.091,-0.152],[-0.09,-0.395],[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413],[-0.485,0.55],[-2.432,0.21],[-2.067,1.896],[0,0],[5.68,1.389],[0,0],[0.316,1.173],[0,0]],"o":[[0,0],[-0.324,1.164],[0,0],[-6.15,0.343],[0,0],[0.112,0.128],[0.192,0.322],[0.102,0.451],[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319],[0,0],[4.068,-1.665],[5.891,-5.403],[3.525,-3.998],[0,0],[-0.883,-0.071],[0,0],[-3.439,-11.092]],"v":[[-21.768,-75.658],[-34.443,-43.455],[-36.421,-41.441],[-52.974,-42.186],[-58.309,-28.641],[-45.156,0.82],[-44.852,1.242],[-44.426,2.329],[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323],[-14.799,-6.748],[23.956,1.7],[34.634,-3.062],[45.258,-19.512],[40.423,-32.312],[12.269,-35.871],[10.181,-39.665],[-1.958,-76.117]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[{"i":[[3.971,-15.52],[0,0],[0.583,-0.342],[0,0],[-1.721,-4.082],[0,0],[-0.069,-0.176],[-0.096,-0.423],[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517],[-0.243,0.275],[-1.216,0.105],[-1.033,0.948],[0,0],[3.167,1.779],[0,0],[0.273,1.186],[0,0]],"o":[[0,0],[-0.279,1.177],[0,0],[-3.379,2.142],[0,0],[0.08,0.161],[0.147,0.371],[0.109,0.482],[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66],[0,0],[2.034,-0.832],[2.945,-2.702],[1.324,-4.931],[0,0],[-0.652,-0.491],[0,0],[-3.783,-12.836]],"v":[[-22.744,-73.788],[-32.146,-45.618],[-33.635,-42.926],[-42.808,-39.976],[-46.444,-27.437],[-37.816,-1.868],[-37.748,-1.144],[-37.538,0.958],[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643],[-21.88,-7.406],[19.262,-2.153],[24.412,-6.371],[29.223,-16.948],[25.604,-30.175],[10.97,-35.141],[9.46,-38.658],[-0.915,-74.428]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[9.393,12.806],[4.697,0.035],[-21.434,-7.714],[10.304,-6.597],[16.939,-9.794],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.475,-5.557],[-38.645,-4.531],[-38.65,-1.413],[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538],[-35.15,-5.661],[14.568,-6.005],[14.19,-9.681],[13.188,-14.385],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.485,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.279,6.581],[0,0],[0.063,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.171,-72.991],[-31.987,-38.412],[-33.188,-35.211],[-42.821,-26.921],[-41.601,-15.096],[-35.128,-2.202],[-31.51,-0.373],[6.313,-7.541],[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212],[14.066,-5.26],[14.481,-5.587],[14.718,-9.491],[17.48,-25.816],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.46,-73.71]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[3.924,-15.172],[0,0],[0.5,-0.492],[0,0],[-1.049,-4.075],[0,0],[-1.601,-0.162],[-0.034,-0.15],[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148],[-0.224,0.914],[0,0],[0,0],[0,0],[1.541,1.746],[0,0],[0.233,1.182],[0,0]],"o":[[0,0],[-0.285,1.172],[0,0],[-1.897,3.1],[0,0],[0.078,0.182],[1.525,0.332],[0.039,0.171],[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704],[0,0],[0,0],[0,0],[0.267,-5.393],[0,0],[-0.501,-0.716],[0,0],[-3.739,-12.583]],"v":[[-22.621,-74.064],[-32.626,-41.045],[-34.028,-38.01],[-49.001,-31.576],[-51.624,-19.959],[-41.281,-3.597],[-33.875,-0.965],[-0.223,-8.668],[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886],[12.282,-5.109],[14.395,-5.17],[15.247,-9.301],[21.521,-28.247],[19.212,-41.496],[10.163,-45.709],[9.051,-48.651],[-1.047,-74.68]],"c":true}]},{"i":{"x":0.69,"y":1},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[0.838,-5.158],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-53.93,-30.482],[-56.897,-18.823],[-44.059,-1.242],[-34.741,1.443],[-1.76,-7.796],[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.31,"y":0},"t":55,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"t":63,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.845751713771,0.524679326076,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[10]},{"t":38,"s":[6]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.904,0.6,0.512,0.999,0.863,0.434,1,0.997,0.822,0.267]}},"s":{"a":0,"k":[-22.507,-59.66]},"e":{"a":0,"k":[-0.114,36.781]},"t":1,"nm":"Gradient_HFnzQcNVeP","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":12,"op":67,"st":-18,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Shape Layer 2 :M 3 :M","sr":1,"ks":{"o":{"a":0,"k":70},"p":{"a":0,"k":[99.889,120.452,0]},"a":{"a":0,"k":[99.889,122.952,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[62.415,106.791],[38.07,-3.659],[0,0]],"o":[[-26.221,-44.864],[-64.432,6.193],[0,0]],"v":[[-160.5,-20],[-274.619,-171.126],[-352.5,186]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[0]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.156],"y":[0.647]},"t":41,"s":[10]},{"i":{"x":[0.892],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":66,"s":[7.664]},{"t":87,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[9]},{"i":{"x":[0.597],"y":[0.553]},"o":{"x":[0.156],"y":[0.165]},"t":41,"s":[73]},{"i":{"x":[0.892],"y":[1]},"o":{"x":[0.464],"y":[0.66]},"t":66,"s":[236.225]},{"t":87,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[6]},{"i":{"x":[0.591],"y":[0.367]},"o":{"x":[0.158],"y":[0.231]},"t":41,"s":[30]},{"i":{"x":[0.894],"y":[1]},"o":{"x":[0.6],"y":[0]},"t":66,"s":[20]},{"t":87,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 3","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[62.415,106.791],[38.07,-3.659],[0,0]],"o":[[-26.221,-44.864],[-64.432,6.193],[0,0]],"v":[[-160.5,-20],[-274.619,-171.126],[-352.5,186]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[0]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.156],"y":[0.647]},"t":41,"s":[21]},{"i":{"x":[0.892],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":66,"s":[18.664]},{"t":87,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[9]},{"i":{"x":[0.597],"y":[0.536]},"o":{"x":[0.156],"y":[0.171]},"t":41,"s":[40]},{"i":{"x":[0.892],"y":[1]},"o":{"x":[0.464],"y":[0.484]},"t":66,"s":[197.225]},{"t":87,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[6]},{"i":{"x":[0.591],"y":[-0.172]},"o":{"x":[0.158],"y":[0.429]},"t":41,"s":[18]},{"i":{"x":[0.894],"y":[1]},"o":{"x":[0.6],"y":[0]},"t":66,"s":[15]},{"t":87,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 4","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[62.415,106.791],[38.07,-3.659],[0,0]],"o":[[-26.221,-44.864],[-64.432,6.193],[0,0]],"v":[[-160.5,-20],[-274.619,-171.126],[-352.5,186]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[0]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.156],"y":[0.647]},"t":41,"s":[21]},{"i":{"x":[0.892],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":66,"s":[18.664]},{"t":87,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[9]},{"i":{"x":[0.597],"y":[0.536]},"o":{"x":[0.156],"y":[0.171]},"t":41,"s":[16]},{"i":{"x":[0.892],"y":[1]},"o":{"x":[0.464],"y":[0.415]},"t":66,"s":[173.225]},{"t":87,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[6]},{"i":{"x":[0.591],"y":[-2.515]},"o":{"x":[0.158],"y":[1.286]},"t":41,"s":[12]},{"i":{"x":[0.894],"y":[1]},"o":{"x":[0.6],"y":[0]},"t":66,"s":[11]},{"t":87,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 5","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[62.415,106.791],[38.07,-3.659],[0,0]],"o":[[-26.221,-44.864],[-64.432,6.193],[0,0]],"v":[[-160.5,-20],[-274.619,-171.126],[-352.5,186]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[0]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.156],"y":[0.647]},"t":41,"s":[21]},{"i":{"x":[0.892],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":66,"s":[18.664]},{"t":87,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[9]},{"i":{"x":[0.597],"y":[0.524]},"o":{"x":[0.156],"y":[0.176]},"t":41,"s":[4]},{"i":{"x":[0.892],"y":[1]},"o":{"x":[0.464],"y":[0.379]},"t":66,"s":[157.225]},{"t":87,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[6]},{"i":{"x":[0.591],"y":[-2.515]},"o":{"x":[0.158],"y":[1.286]},"t":41,"s":[8]},{"i":{"x":[0.894],"y":[1]},"o":{"x":[0.6],"y":[0]},"t":66,"s":[7]},{"t":87,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 6","bm":0,"hd":false}],"ip":21,"op":88,"st":9,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"Star 3D 6","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[-143]},{"t":80,"s":[32]}]},"p":{"a":1,"k":[{"i":{"x":0.513,"y":0.939},"o":{"x":0.167,"y":0.167},"t":26,"s":[257,200,0],"to":[-1.058,-7.198,0],"ti":[-16.274,-0.848,0]},{"i":{"x":0.771,"y":1},"o":{"x":0.413,"y":0.041},"t":43,"s":[284.939,37.132,0],"to":[18.723,0.976,0],"ti":[0,0,0]},{"t":80,"s":[337,497,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.6,0.6,0.6],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,-7.051]},"t":26,"s":[-15,15,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,2.282]},"o":{"x":[0.709,0.709,0.709],"y":[0,0,0]},"t":69,"s":[-70,70,100]},{"t":80,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.601,184.532],[255.324,216.865]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[12]},{"t":69,"s":[9]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":46,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[33.693,37.48],[26.863,25.164]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413]],"o":[[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319]],"v":[[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517]],"o":[[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66]],"v":[[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[{"i":[[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0]],"o":[[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0]],"v":[[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[{"i":[[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307]],"o":[[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742]],"v":[[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922]],"o":[[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225]],"v":[[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"t":78,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.848366172641,0.459115839939,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[10]},{"t":69,"s":[7]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":46,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[33.693,37.48],[26.863,25.164],[-14.457,-4.833],[38.777,-4.29],[52.938,-10.548],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[3.597,-13.082],[0,0],[0.88,-0.063],[0,0],[-3.521,-4.022],[0,0],[-0.091,-0.152],[-0.09,-0.395],[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413],[-0.485,0.55],[-2.432,0.21],[-2.067,1.896],[0,0],[5.68,1.389],[0,0],[0.316,1.173],[0,0]],"o":[[0,0],[-0.324,1.164],[0,0],[-6.15,0.343],[0,0],[0.112,0.128],[0.192,0.322],[0.102,0.451],[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319],[0,0],[4.068,-1.665],[5.891,-5.403],[3.525,-3.998],[0,0],[-0.883,-0.071],[0,0],[-3.439,-11.092]],"v":[[-21.768,-75.658],[-34.443,-43.455],[-36.421,-41.441],[-52.974,-42.186],[-58.309,-28.641],[-45.156,0.82],[-44.852,1.242],[-44.426,2.329],[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323],[-14.799,-6.748],[23.956,1.7],[34.634,-3.062],[45.258,-19.512],[40.423,-32.312],[12.269,-35.871],[10.181,-39.665],[-1.958,-76.117]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[3.971,-15.52],[0,0],[0.583,-0.342],[0,0],[-1.721,-4.082],[0,0],[-0.069,-0.176],[-0.096,-0.423],[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517],[-0.243,0.275],[-1.216,0.105],[-1.033,0.948],[0,0],[3.167,1.779],[0,0],[0.273,1.186],[0,0]],"o":[[0,0],[-0.279,1.177],[0,0],[-3.379,2.142],[0,0],[0.08,0.161],[0.147,0.371],[0.109,0.482],[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66],[0,0],[2.034,-0.832],[2.945,-2.702],[1.324,-4.931],[0,0],[-0.652,-0.491],[0,0],[-3.783,-12.836]],"v":[[-22.744,-73.788],[-32.146,-45.618],[-33.635,-42.926],[-42.808,-39.976],[-46.444,-27.437],[-37.816,-1.868],[-37.748,-1.144],[-37.538,0.958],[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643],[-7.256,-4.965],[19.262,-2.153],[24.412,-6.371],[29.223,-16.948],[25.604,-30.175],[10.97,-35.141],[9.46,-38.658],[-0.915,-74.428]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.475,-5.557],[-38.645,-4.531],[-38.65,-1.413],[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538],[-35.15,-5.661],[14.568,-6.005],[14.19,-9.681],[13.188,-14.385],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":59,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.485,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.279,6.581],[0,0],[0.063,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.171,-72.991],[-31.987,-38.412],[-33.188,-35.211],[-42.821,-26.921],[-41.601,-15.096],[-35.128,-2.202],[-31.51,-0.373],[6.313,-7.541],[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212],[14.066,-5.26],[14.481,-5.587],[14.718,-9.491],[17.48,-25.816],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.46,-73.71]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[0.838,-5.158],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-53.93,-30.482],[-56.897,-18.823],[-44.059,-1.242],[-34.741,1.443],[-15.03,-4.223],[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"t":78,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.878431379795,0.556862771511,0.031372550875,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[10]},{"t":69,"s":[7]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.899,0.595,0.513,1,0.817,0.38,1,1,0.735,0.166]}},"s":{"a":0,"k":[-3.706,-58.535]},"e":{"a":0,"k":[-22.565,34.831]},"t":1,"nm":"Gradient_fLVWno7Be2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":28,"op":79,"st":1,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"Shape Layer 2 :M 2","sr":1,"ks":{"o":{"a":0,"k":75},"p":{"a":0,"k":[301.359,195.781,0]},"a":{"a":0,"k":[201.359,195.781,0]},"s":{"a":0,"k":[-100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.601,123.683],[17.496,0.526],[0,0]],"o":[[0.303,-23.393],[-27.551,-0.828],[0,0]],"v":[[-22.234,-20.064],[-42.23,-236.172],[-97,255.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.305],"y":[0.906]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.498],"y":[0.114]},"t":41,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[34.282]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[9.116]},{"t":85,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[10.333]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[21.2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[86.432]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[154.502]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[296.601]},{"t":85,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.847058883368,0.364705882353,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[3]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[7]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[6]},{"t":85,"s":[2]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.601,123.683],[17.496,0.526],[0,0]],"o":[[0.303,-23.393],[-27.551,-0.828],[0,0]],"v":[[-22.234,-20.064],[-42.23,-236.172],[-97,255.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.305],"y":[0.884]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"i":{"x":[0.712],"y":[1.27]},"o":{"x":[0.379],"y":[-0.126]},"t":40,"s":[13]},{"i":{"x":[0.796],"y":[0.932]},"o":{"x":[0.462],"y":[0.163]},"t":54,"s":[6.893]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[24.282]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[5.116]},{"t":85,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[100.622]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[166.502]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[305.971]},{"t":85,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.847058883368,0.364705882353,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[10]},{"t":85,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 3","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.601,123.683],[17.496,0.526],[0,0]],"o":[[0.303,-23.393],[-27.551,-0.828],[0,0]],"v":[[-22.234,-20.064],[-42.23,-236.172],[-97,255.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.305],"y":[0.813]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"i":{"x":[0.722],"y":[1.744]},"o":{"x":[0.388],"y":[-0.215]},"t":38,"s":[7]},{"i":{"x":[0.788],"y":[0.924]},"o":{"x":[0.454],"y":[0.192]},"t":54,"s":[2.808]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[24.282]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[15.116]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[3.369]},{"t":84,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[42]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[124.84]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[181.502]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[290.501]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[337.643]},{"t":84,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.847058883368,0.364705882353,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[32]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[15]},{"t":84,"s":[6]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.601,123.683],[17.496,0.526],[0,0]],"o":[[0.303,-23.393],[-27.551,-0.828],[0,0]],"v":[[-22.234,-20.064],[-42.23,-236.172],[-97,255.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.305],"y":[0.832]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"i":{"x":[0.736],"y":[2.723]},"o":{"x":[0.402],"y":[-1.107]},"t":35,"s":[6]},{"i":{"x":[0.775],"y":[0.929]},"o":{"x":[0.441],"y":[0.168]},"t":54,"s":[5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74,"s":[11.116]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[7.066]},{"t":81,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[52]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[135.251]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[181.502]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[318]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[319.5]},{"t":81,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.847058883368,0.364705882353,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[6]},{"i":{"x":[0.779],"y":[0.692]},"o":{"x":[0.47],"y":[0]},"t":35,"s":[14]},{"i":{"x":[0.742],"y":[0.731]},"o":{"x":[0.503],"y":[0.709]},"t":54,"s":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[24]},{"t":82,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false}],"ip":31,"op":87,"st":26,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Star 3D 5","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[30]},{"t":44,"s":[-18]}]},"p":{"a":1,"k":[{"i":{"x":0.754,"y":1},"o":{"x":0.167,"y":0.167},"t":13,"s":[263,309.5,0],"to":[1.5,34,0],"ti":[0,0,0]},{"t":47,"s":[268.5,510.75,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":13,"s":[-20,20,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.35,0.35,0.35],"y":[0,0,0]},"t":26,"s":[-75,75,100]},{"t":45,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.184,183.113],[231.615,216.746]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.842,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.723,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27.641,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[33.693,37.48],[26.863,25.164]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413]],"o":[[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319]],"v":[[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323]],"c":false}]},{"t":41,"s":[{"i":[[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517]],"o":[[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66]],"v":[[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.847058823529,0.498039215686,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.842,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.723,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[-16.268,-10.95],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27.641,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[33.693,37.48],[26.863,25.164],[-14.457,-4.833],[38.777,-4.29],[52.938,-10.548],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[3.597,-13.082],[0,0],[0.88,-0.063],[0,0],[-3.521,-4.022],[0,0],[-0.091,-0.152],[-0.09,-0.395],[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413],[-0.485,0.55],[-2.432,0.21],[-2.067,1.896],[0,0],[5.68,1.389],[0,0],[0.316,1.173],[0,0]],"o":[[0,0],[-0.324,1.164],[0,0],[-6.15,0.343],[0,0],[0.112,0.128],[0.192,0.322],[0.102,0.451],[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319],[0,0],[4.068,-1.665],[5.891,-5.403],[3.525,-3.998],[0,0],[-0.883,-0.071],[0,0],[-3.439,-11.092]],"v":[[-21.768,-75.658],[-34.443,-43.455],[-36.421,-41.441],[-52.974,-42.186],[-58.309,-28.641],[-45.156,0.82],[-44.852,1.242],[-44.426,2.329],[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323],[-14.799,-6.748],[23.956,1.7],[34.634,-3.062],[45.258,-19.512],[40.423,-32.312],[12.269,-35.871],[10.181,-39.665],[-1.958,-76.117]],"c":true}]},{"t":41,"s":[{"i":[[3.971,-15.52],[0,0],[0.583,-0.342],[0,0],[-1.721,-4.082],[0,0],[-0.069,-0.176],[-0.096,-0.423],[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517],[-0.243,0.275],[-1.216,0.105],[-1.033,0.948],[0,0],[3.167,1.779],[0,0],[0.273,1.186],[0,0]],"o":[[0,0],[-0.279,1.177],[0,0],[-3.379,2.142],[0,0],[0.08,0.161],[0.147,0.371],[0.109,0.482],[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66],[0,0],[2.034,-0.832],[2.945,-2.702],[1.324,-4.931],[0,0],[-0.652,-0.491],[0,0],[-3.783,-12.836]],"v":[[-22.744,-73.788],[-32.146,-45.618],[-33.635,-42.926],[-42.808,-39.976],[-46.444,-27.437],[-37.816,-1.868],[-37.748,-1.144],[-37.538,0.958],[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643],[-7.256,-4.965],[19.262,-2.153],[24.412,-6.371],[29.223,-16.948],[25.604,-30.175],[10.97,-35.141],[9.46,-38.658],[-0.915,-74.428]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.878431379795,0.556862771511,0.031372550875,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.922,0.686,0.513,0.999,0.872,0.477,1,0.997,0.822,0.267]}},"s":{"a":0,"k":[-19.254,-34.646]},"e":{"a":0,"k":[-42.059,42.289]},"t":1,"nm":"Gradient_FEj0ZysM9D","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":15,"op":44,"st":-16,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Shape Layer 2 :M 3 :M 3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[0]},{"t":28,"s":[75]}]},"p":{"a":0,"k":[99.889,112.452,0]},"a":{"a":0,"k":[99.889,122.952,0]},"s":{"a":0,"k":[-100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.89,-19.163],[0,0]],"o":[[-6.584,32.432],[0,0]],"v":[[-420.342,47.452],[-434.5,259.75]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[9.184]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[20.664]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[13.803]},{"t":48,"s":[4.803]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[92.561]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[225.225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[298.347]},{"t":48,"s":[336.347]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":14,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.7],"y":[0]},"t":27,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[9]},{"t":48,"s":[5]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 3","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.89,-19.163],[0,0]],"o":[[-6.584,32.432],[0,0]],"v":[[-420.342,47.452],[-434.5,259.75]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[7.111]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[7.45]},{"t":48,"s":[4.45]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[59.376]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[161.225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[274.759]},{"t":48,"s":[325.759]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[32]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.7],"y":[0]},"t":27,"s":[39]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[23.27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[6.358]},{"t":48,"s":[4]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 4","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.89,-19.163],[0,0]],"o":[[-6.584,32.432],[0,0]],"v":[[-420.342,47.452],[-434.5,259.75]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[8.295]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[18.664]},{"t":44,"s":[7.45]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[33.858]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[106.225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[254.641]},{"t":48,"s":[315.641]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[20.593]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.7],"y":[0]},"t":27,"s":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[15]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[4.882]},{"t":48,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 5","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.89,-19.163],[0,0]],"o":[[-6.584,32.432],[0,0]],"v":[[-420.342,47.452],[-434.5,259.75]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[8.295]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[18.664]},{"t":44,"s":[7.45]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[12.265]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[74.225]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[235.935]},{"t":48,"s":[305.935]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[10.444]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.7],"y":[0]},"t":27,"s":[22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[3]},{"t":48,"s":[2]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 6","bm":0,"hd":false}],"ip":14,"op":49,"st":-2,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"Star 3D 4","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[-200]},{"t":59,"s":[-334]}]},"p":{"a":1,"k":[{"i":{"x":0.579,"y":0.802},"o":{"x":0.238,"y":0.978},"t":13,"s":[283.713,202.898,0],"to":[5.532,-10.027,0],"ti":[-7.973,-2.031,0]},{"i":{"x":0.611,"y":0.93},"o":{"x":0.334,"y":0.062},"t":21,"s":[298.381,182.374,0],"to":[33.594,8.555,0],"ti":[0,0,0]},{"t":59,"s":[379,498.5,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,1.667]},"t":11,"s":[-20,20,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,2.667]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":47,"s":[-55,55,100]},{"t":58,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[244.167,187.072],[255.053,219.042]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":27,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":34,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.313,34.554],[27.483,22.238]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413]],"o":[[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319]],"v":[[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[{"i":[[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517]],"o":[[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66]],"v":[[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259]],"o":[[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83]],"v":[[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[9.393,12.806],[4.697,0.035]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0]],"o":[[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0]],"v":[[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307]],"o":[[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742]],"v":[[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148]],"o":[[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704]],"v":[[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886]],"c":false}]},{"i":{"x":0.69,"y":1},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922]],"o":[[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225]],"v":[[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.31,"y":0},"t":53,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"t":58,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.784313785329,0.376470618154,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":27,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[4.109,-5.958],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":34,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.313,34.554],[27.483,22.238],[-14.457,-4.833],[38.892,-4.617],[53.053,-10.875],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[3.597,-13.082],[0,0],[0.88,-0.063],[0,0],[-3.521,-4.022],[0,0],[-0.091,-0.152],[-0.09,-0.395],[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413],[-0.485,0.55],[-2.432,0.21],[-2.067,1.896],[0,0],[5.68,1.389],[0,0],[0.316,1.173],[0,0]],"o":[[0,0],[-0.324,1.164],[0,0],[-6.15,0.343],[0,0],[0.112,0.128],[0.192,0.322],[0.102,0.451],[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319],[0,0],[4.068,-1.665],[5.891,-5.403],[3.525,-3.998],[0,0],[-0.883,-0.071],[0,0],[-3.439,-11.092]],"v":[[-21.768,-75.658],[-34.443,-43.455],[-36.421,-41.441],[-52.974,-42.186],[-58.309,-28.641],[-45.156,0.82],[-44.852,1.242],[-44.426,2.329],[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323],[-14.799,-6.748],[23.956,1.7],[34.634,-3.062],[45.258,-19.512],[40.423,-32.312],[12.269,-35.871],[10.181,-39.665],[-1.958,-76.117]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[{"i":[[3.971,-15.52],[0,0],[0.583,-0.342],[0,0],[-1.721,-4.082],[0,0],[-0.069,-0.176],[-0.096,-0.423],[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517],[-0.243,0.275],[-1.216,0.105],[-1.033,0.948],[0,0],[3.167,1.779],[0,0],[0.273,1.186],[0,0]],"o":[[0,0],[-0.279,1.177],[0,0],[-3.379,2.142],[0,0],[0.08,0.161],[0.147,0.371],[0.109,0.482],[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66],[0,0],[2.034,-0.832],[2.945,-2.702],[1.324,-4.931],[0,0],[-0.652,-0.491],[0,0],[-3.783,-12.836]],"v":[[-22.744,-73.788],[-32.146,-45.618],[-33.635,-42.926],[-42.808,-39.976],[-46.444,-27.437],[-37.816,-1.868],[-37.748,-1.144],[-37.538,0.958],[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643],[-21.88,-7.406],[19.262,-2.153],[24.412,-6.371],[29.223,-16.948],[25.604,-30.175],[10.97,-35.141],[9.46,-38.658],[-0.915,-74.428]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[9.393,12.806],[4.697,0.035],[-21.434,-7.714],[10.304,-6.597],[16.939,-9.794],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.475,-5.557],[-38.645,-4.531],[-38.65,-1.413],[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538],[-35.15,-5.661],[14.568,-6.005],[14.19,-9.681],[13.188,-14.385],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.485,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.279,6.581],[0,0],[0.063,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.171,-72.991],[-31.987,-38.412],[-33.188,-35.211],[-42.821,-26.921],[-41.601,-15.096],[-35.128,-2.202],[-31.51,-0.373],[6.313,-7.541],[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212],[14.066,-5.26],[14.481,-5.587],[14.718,-9.491],[17.48,-25.816],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.46,-73.71]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[3.924,-15.172],[0,0],[0.5,-0.492],[0,0],[-1.049,-4.075],[0,0],[-1.601,-0.162],[-0.034,-0.15],[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148],[-0.224,0.914],[0,0],[0,0],[0,0],[1.541,1.746],[0,0],[0.233,1.182],[0,0]],"o":[[0,0],[-0.285,1.172],[0,0],[-1.897,3.1],[0,0],[0.078,0.182],[1.525,0.332],[0.039,0.171],[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704],[0,0],[0,0],[0,0],[0.267,-5.393],[0,0],[-0.501,-0.716],[0,0],[-3.739,-12.583]],"v":[[-22.621,-74.064],[-32.626,-41.045],[-34.028,-38.01],[-49.001,-31.576],[-51.624,-19.959],[-41.281,-3.597],[-33.875,-0.965],[-0.223,-8.668],[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886],[12.282,-5.109],[14.395,-5.17],[15.247,-9.301],[21.521,-28.247],[19.212,-41.496],[10.163,-45.709],[9.051,-48.651],[-1.047,-74.68]],"c":true}]},{"i":{"x":0.69,"y":1},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[0.838,-5.158],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-53.93,-30.482],[-56.897,-18.823],[-44.059,-1.242],[-34.741,1.443],[-1.76,-7.796],[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.31,"y":0},"t":53,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"t":58,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.854902020623,0.466666696586,0.003921568627,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.822,0.535,0.513,0.988,0.705,0.316,1,0.976,0.587,0.098]}},"s":{"a":0,"k":[7.439,-54.887]},"e":{"a":0,"k":[-23.238,37.877]},"t":1,"nm":"Gradient_WdA15I8Z9Y","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":13,"op":57,"st":-15,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Shape Layer 2 :M 3 :M 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[0]},{"t":39,"s":[75]}]},"p":{"a":0,"k":[99.889,120.452,0]},"a":{"a":0,"k":[99.889,122.952,0]},"s":{"a":0,"k":[-100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[36.775,118.1],[19.547,-0.512],[0,0]],"o":[[-15.449,-49.615],[-33.082,0.867],[0,0]],"v":[[-421.066,18.221],[-466.922,-65.091],[-546.5,253.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.9],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.1],"y":[0]},"t":23,"s":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[11.664]},{"t":58,"s":[5.803]}]},"o":{"a":1,"k":[{"i":{"x":[0.9],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.1],"y":[0]},"t":23,"s":[61]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[231.225]},{"t":58,"s":[335.347]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.9]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.158],"y":[-0.532]},"t":23,"s":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[34]},{"t":58,"s":[7.941]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 3","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[36.775,118.1],[19.547,-0.512],[0,0]],"o":[[-15.449,-49.615],[-33.082,0.867],[0,0]],"v":[[-421.066,18.221],[-466.922,-65.091],[-546.5,253.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.9],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.1],"y":[0]},"t":23,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[18.664]},{"t":58,"s":[7.45]}]},"o":{"a":1,"k":[{"i":{"x":[0.9],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.1],"y":[0]},"t":23,"s":[36]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[195.225]},{"t":58,"s":[324.759]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.9]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.158],"y":[-0.277]},"t":23,"s":[18]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[22.27]},{"t":58,"s":[6.358]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 4","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[36.775,118.1],[19.547,-0.512],[0,0]],"o":[[-15.449,-49.615],[-33.082,0.867],[0,0]],"v":[[-421.066,18.221],[-466.922,-65.091],[-546.5,253.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.9],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.1],"y":[0]},"t":23,"s":[9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[18.664]},{"t":58,"s":[7.45]}]},"o":{"a":1,"k":[{"i":{"x":[0.9],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.1],"y":[0]},"t":23,"s":[18]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[169.225]},{"t":58,"s":[318.641]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.9]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.158],"y":[-0.394]},"t":23,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[15]},{"t":58,"s":[4.882]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 5","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[36.775,118.1],[19.547,-0.512],[0,0]],"o":[[-15.449,-49.615],[-33.082,0.867],[0,0]],"v":[[-421.066,18.221],[-466.922,-65.091],[-546.5,253.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.9],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.1],"y":[0]},"t":23,"s":[7]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[18.664]},{"t":58,"s":[7.45]}]},"o":{"a":1,"k":[{"i":{"x":[0.9],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[12]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.1],"y":[0]},"t":23,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[149.225]},{"t":58,"s":[313.935]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.690196078431,0.188235309077,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.9]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.158],"y":[-0.591]},"t":23,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[10]},{"t":58,"s":[3.941]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[301.359,195.781]},"a":{"a":0,"k":[201.359,195.781]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2 :M 6","bm":0,"hd":false}],"ip":13,"op":59,"st":-1,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"Shape Layer 2 :M","sr":1,"ks":{"o":{"a":0,"k":75},"p":{"a":0,"k":[201.359,195.781,0]},"a":{"a":0,"k":[201.359,195.781,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[6.456,123.525],[23.669,2.424],[0,0]],"o":[[-1.221,-23.364],[-37.271,-3.816],[0,0]],"v":[[3,-86],[-32.119,-186.626],[-96.5,242]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.305],"y":[0.918]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.498],"y":[0.111]},"t":26,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[34.282]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[14.116]},{"t":69,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[13]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[154.502]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[290.601]},{"t":69,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.847058883368,0.364705882353,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[3]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[7]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[18]},{"t":69,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"t":71,"s":[0]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[6.456,123.525],[23.669,2.424],[0,0]],"o":[[-1.221,-23.364],[-37.271,-3.816],[0,0]],"v":[[3,-86],[-32.119,-186.626],[-96.5,242]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.305],"y":[0.899]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.498],"y":[0.179]},"t":25,"s":[13]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[24.282]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[12.116]},{"t":69,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[83.804]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[171.502]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[297.971]},{"t":69,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.847058883368,0.364705882353,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[27]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[6]},{"t":69,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71,"s":[100]},{"t":72,"s":[0]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 3","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[6.456,123.525],[23.669,2.424],[0,0]],"o":[[-1.221,-23.364],[-37.271,-3.816],[0,0]],"v":[[3,-86],[-32.119,-186.626],[-96.5,242]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.305],"y":[0.813]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.498],"y":[0.117]},"t":23,"s":[7]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[24.282]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[15.116]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[3.369]},{"t":68,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":23,"s":[42]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[99.84]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[186.502]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[286.501]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[329.643]},{"t":68,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.847058883368,0.364705882353,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[37]},{"t":68,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[100]},{"t":70,"s":[0]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[6.456,123.525],[23.669,2.424],[0,0]],"o":[[-1.221,-23.364],[-37.271,-3.816],[0,0]],"v":[[3,-86],[-32.119,-186.626],[-96.5,242]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.305],"y":[0.782]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[0]},{"i":{"x":[0.736],"y":[0.184]},"o":{"x":[0.402],"y":[0.524]},"t":20,"s":[6]},{"i":{"x":[0.775],"y":[0.893]},"o":{"x":[0.441],"y":[0.252]},"t":38,"s":[8]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[11.116]},{"t":65,"s":[4]}]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[9]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[52]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[117.251]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[181.502]},{"t":65,"s":[343]}]},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.847058883368,0.364705882353,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":23,"s":[14]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[24]},{"t":65,"s":[3]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[266,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":6,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[100]},{"t":67,"s":[0]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 4","bm":0,"hd":false}],"ip":20,"op":71,"st":10,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"Star 3D 2","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[120]},{"t":63,"s":[300]}]},"p":{"a":1,"k":[{"i":{"x":0.554,"y":0.821},"o":{"x":0.208,"y":0.331},"t":13,"s":[274.105,174.577,0],"to":[22.471,-71.378,0],"ti":[-38.571,-2.324,0]},{"i":{"x":0.569,"y":0.887},"o":{"x":0.275,"y":0.13},"t":32,"s":[393.381,62.874,0],"to":[54.645,3.293,0],"ti":[0,0,0]},{"t":63,"s":[490,275.5,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":11,"s":[25,25,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,3.083]},"o":{"x":[0.727,0.727,0.5],"y":[0,0,0]},"t":41,"s":[45,45,100]},{"t":63,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.184,183.113],[231.615,216.746]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":35,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[33.693,37.48],[26.863,25.164]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413]],"o":[[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319]],"v":[[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517]],"o":[[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66]],"v":[[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259]],"o":[[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83]],"v":[[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[10.005,14.824],[5.309,2.053]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0]],"o":[[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0]],"v":[[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[{"i":[[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307]],"o":[[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742]],"v":[[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148]],"o":[[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704]],"v":[[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922]],"o":[[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225]],"v":[[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44]],"c":false}]},{"t":63,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.848366172641,0.50040881587,0.003326926044,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[4.109,-5.958],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":35,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[33.693,37.48],[26.863,25.164],[-14.457,-4.833],[38.777,-4.29],[52.938,-10.548],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43,"s":[{"i":[[3.597,-13.082],[0,0],[0.88,-0.063],[0,0],[-3.521,-4.022],[0,0],[-0.091,-0.152],[-0.09,-0.395],[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413],[-0.485,0.55],[-2.432,0.21],[-2.067,1.896],[0,0],[5.68,1.389],[0,0],[0.316,1.173],[0,0]],"o":[[0,0],[-0.324,1.164],[0,0],[-6.15,0.343],[0,0],[0.112,0.128],[0.192,0.322],[0.102,0.451],[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319],[0,0],[4.068,-1.665],[5.891,-5.403],[3.525,-3.998],[0,0],[-0.883,-0.071],[0,0],[-3.439,-11.092]],"v":[[-21.768,-75.658],[-34.443,-43.455],[-36.421,-41.441],[-52.974,-42.186],[-58.309,-28.641],[-45.156,0.82],[-44.852,1.242],[-44.426,2.329],[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323],[-14.799,-6.748],[23.956,1.7],[34.634,-3.062],[45.258,-19.512],[40.423,-32.312],[12.269,-35.871],[10.181,-39.665],[-1.958,-76.117]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[3.971,-15.52],[0,0],[0.583,-0.342],[0,0],[-1.721,-4.082],[0,0],[-0.069,-0.176],[-0.096,-0.423],[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517],[-0.243,0.275],[-1.216,0.105],[-1.033,0.948],[0,0],[3.167,1.779],[0,0],[0.273,1.186],[0,0]],"o":[[0,0],[-0.279,1.177],[0,0],[-3.379,2.142],[0,0],[0.08,0.161],[0.147,0.371],[0.109,0.482],[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66],[0,0],[2.034,-0.832],[2.945,-2.702],[1.324,-4.931],[0,0],[-0.652,-0.491],[0,0],[-3.783,-12.836]],"v":[[-22.744,-73.788],[-32.146,-45.618],[-33.635,-42.926],[-42.808,-39.976],[-46.444,-27.437],[-37.816,-1.868],[-37.748,-1.144],[-37.538,0.958],[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643],[-7.256,-4.965],[19.262,-2.153],[24.412,-6.371],[29.223,-16.948],[25.604,-30.175],[10.97,-35.141],[9.46,-38.658],[-0.915,-74.428]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[10.005,14.824],[5.309,2.053],[-21,-11.37],[10.915,-4.579],[17.551,-7.776],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.475,-5.557],[-38.645,-4.531],[-38.65,-1.413],[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538],[-35.15,-5.661],[14.568,-6.005],[14.19,-9.681],[13.188,-14.385],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.485,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.279,6.581],[0,0],[0.063,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.171,-72.991],[-31.987,-38.412],[-33.188,-35.211],[-42.821,-26.921],[-41.601,-15.096],[-35.128,-2.202],[-31.51,-0.373],[6.313,-7.541],[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212],[14.066,-5.26],[14.481,-5.587],[14.718,-9.491],[17.48,-25.816],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.46,-73.71]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[3.924,-15.172],[0,0],[0.5,-0.492],[0,0],[-1.049,-4.075],[0,0],[-1.601,-0.162],[-0.034,-0.15],[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148],[-0.224,0.914],[0,0],[0,0],[0,0],[1.541,1.746],[0,0],[0.233,1.182],[0,0]],"o":[[0,0],[-0.285,1.172],[0,0],[-1.897,3.1],[0,0],[0.078,0.182],[1.525,0.332],[0.039,0.171],[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704],[0,0],[0,0],[0,0],[0.267,-5.393],[0,0],[-0.501,-0.716],[0,0],[-3.739,-12.583]],"v":[[-22.621,-74.064],[-32.626,-41.045],[-34.028,-38.01],[-49.001,-31.576],[-51.624,-19.959],[-41.281,-3.597],[-33.875,-0.965],[-9.261,-2.714],[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886],[12.282,-5.109],[14.395,-5.17],[15.247,-9.301],[21.521,-28.247],[19.212,-41.496],[10.163,-45.709],[9.051,-48.651],[-1.047,-74.68]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[0.838,-5.158],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-53.93,-30.482],[-56.897,-18.823],[-44.059,-1.242],[-34.741,1.443],[-15.03,-4.223],[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"t":63,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.878431379795,0.556862771511,0.031372550875,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.904,0.6,0.512,0.999,0.863,0.434,1,0.997,0.822,0.267]}},"s":{"a":0,"k":[40.146,-23.147]},"e":{"a":0,"k":[-56.469,10.765]},"t":1,"nm":"Gradient_uqen0XnthU","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":13,"op":64,"st":-15,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"Star 3D","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[44]},{"t":48,"s":[-9]}]},"p":{"a":1,"k":[{"i":{"x":0.71,"y":1},"o":{"x":0.214,"y":0.3},"t":13,"s":[170.967,253.74,0],"to":[-138.849,4.447,0],"ti":[0,0,0]},{"t":54,"s":[36,471.5,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,2.667]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":36,"s":[55,55,100]},{"t":48,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.184,183.113],[231.615,216.746]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":9},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":27,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413]],"o":[[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319]],"v":[[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517]],"o":[[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66]],"v":[[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259]],"o":[[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83]],"v":[[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[10.005,14.824],[5.309,2.053]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0]],"o":[[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0]],"v":[[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307]],"o":[[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742]],"v":[[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148]],"o":[[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704]],"v":[[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886]],"c":false}]},{"i":{"x":0.69,"y":1},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922]],"o":[[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225]],"v":[[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44]],"c":false}]},{"t":43,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.784313785329,0.376470618154,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[4.109,-5.958],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.29,"y":0},"t":27,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114],[-14.457,-4.833],[34.539,-1.255],[48.7,-7.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[3.597,-13.082],[0,0],[0.88,-0.063],[0,0],[-3.521,-4.022],[0,0],[-0.091,-0.152],[-0.09,-0.395],[0.047,-0.481],[0.021,-0.117],[0,0],[-4.867,3.679],[0,0],[-0.755,-0.718],[0,0],[1.109,6.33],[0,0],[3.216,3.413],[-0.485,0.55],[-2.432,0.21],[-2.067,1.896],[0,0],[5.68,1.389],[0,0],[0.316,1.173],[0,0]],"o":[[0,0],[-0.324,1.164],[0,0],[-6.15,0.343],[0,0],[0.112,0.128],[0.192,0.322],[0.102,0.451],[-0.011,0.118],[0,0],[-0.447,7.597],[0,0],[0.757,-0.713],[0,0],[7.269,7.192],[0,0],[-0.062,-0.354],[-3.747,-3.319],[0,0],[4.068,-1.665],[5.891,-5.403],[3.525,-3.998],[0,0],[-0.883,-0.071],[0,0],[-3.439,-11.092]],"v":[[-21.768,-75.658],[-34.443,-43.455],[-36.421,-41.441],[-52.974,-42.186],[-58.309,-28.641],[-45.156,0.82],[-44.852,1.242],[-44.426,2.329],[-44.339,3.743],[-44.388,4.095],[-47.078,46.654],[-33.982,55.946],[-13.502,42.783],[-11.005,42.791],[12.527,61.575],[26.71,52.724],[25.664,26.639],[19.608,11.323],[-14.799,-6.748],[23.956,1.7],[34.634,-3.062],[45.258,-19.512],[40.423,-32.312],[12.269,-35.871],[10.181,-39.665],[-1.958,-76.117]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[3.971,-15.52],[0,0],[0.583,-0.342],[0,0],[-1.721,-4.082],[0,0],[-0.069,-0.176],[-0.096,-0.423],[-0.031,-0.521],[-0.003,-0.129],[0,0],[-3.593,0.065],[0,0],[-1.121,-0.135],[-1.488,2.103],[0.066,5.478],[0,0],[5.574,4.517],[-0.243,0.275],[-1.216,0.105],[-1.033,0.948],[0,0],[3.167,1.779],[0,0],[0.273,1.186],[0,0]],"o":[[0,0],[-0.279,1.177],[0,0],[-3.379,2.142],[0,0],[0.08,0.161],[0.147,0.371],[0.109,0.482],[0.008,0.128],[0,0],[0.871,7.177],[1.159,1.774],[0.917,0.031],[0,0],[5.123,1.493],[0,0],[0.065,-0.672],[-1.874,-1.66],[0,0],[2.034,-0.832],[2.945,-2.702],[1.324,-4.931],[0,0],[-0.652,-0.491],[0,0],[-3.783,-12.836]],"v":[[-22.744,-73.788],[-32.146,-45.618],[-33.635,-42.926],[-42.808,-39.976],[-46.444,-27.437],[-37.816,-1.868],[-37.748,-1.144],[-37.538,0.958],[-37.324,2.47],[-37.308,2.855],[-37.571,44.03],[-27.057,57.083],[-12.133,50.209],[-8.759,50.377],[10.463,61.889],[21.156,51.971],[18.724,20.929],[11.575,7.643],[-22.35,-11.83],[19.262,-2.153],[24.412,-6.371],[29.223,-16.948],[25.604,-30.175],[10.97,-35.141],[9.46,-38.658],[-0.915,-74.428]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[4.159,-16.739],[0,0],[0.434,-0.482],[0,0],[-0.821,-4.112],[0,0],[-0.059,-0.187],[-0.099,-0.436],[-0.071,-0.542],[-0.014,-0.135],[0,0],[-2.956,-1.741],[0,0],[-1.304,0.156],[-2.232,3.154],[-0.455,5.051],[0,0],[2.787,2.259],[-0.121,0.138],[-0.608,0.053],[-0.517,0.474],[0,0],[1.91,1.973],[0,0],[0.251,1.193],[0,0]],"o":[[0,0],[-0.257,1.183],[0,0],[-3.876,4.031],[0,0],[0.063,0.177],[0.124,0.396],[0.113,0.498],[0.017,0.133],[0,0],[1.53,6.968],[1.739,2.661],[0.997,0.403],[0,0],[4.05,-1.356],[0,0],[0.128,-0.831],[-0.937,-0.83],[0,0],[1.017,-0.416],[1.473,-1.351],[3.444,-5.423],[0,0],[-0.537,-0.702],[0,0],[-3.955,-13.708]],"v":[[-23.233,-72.852],[-28.997,-46.699],[-30.241,-43.669],[-34.225,-38.871],[-39.011,-25.085],[-37.145,-3.962],[-37.197,-3.087],[-37.094,-0.478],[-36.816,1.084],[-36.769,1.485],[-31.068,42.717],[-23.594,57.652],[-12.699,57.422],[-10.386,49.17],[6.431,60.547],[13.129,47.595],[10.005,14.824],[5.309,2.053],[-21,-11.37],[10.915,-4.579],[17.551,-7.776],[23.706,-16.167],[20.944,-28.357],[10.321,-34.777],[9.099,-38.154],[-0.394,-73.584]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[4.346,-17.958],[0,0],[0.286,-0.622],[0,0],[0.079,-4.142],[0,0],[-0.048,-0.199],[-0.102,-0.45],[-0.11,-0.562],[-0.026,-0.141],[0,0],[-2.319,-3.548],[0,0],[-1.488,0.447],[-2.976,4.206],[-0.977,4.625],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.653,2.168],[0,0],[0.23,1.199],[0,0]],"o":[[0,0],[-0.235,1.189],[0,0],[-0.608,3.942],[0,0],[0.047,0.194],[0.102,0.421],[0.117,0.514],[0.027,0.138],[0,0],[2.19,6.758],[2.319,3.548],[1.077,0.775],[0,0],[2.976,-4.206],[0,0],[0.191,-0.989],[0,0],[0,0],[0,0],[0,0],[-0.876,-5.864],[0,0],[-0.422,-0.912],[0,0],[-4.127,-14.581]],"v":[[-23.721,-71.917],[-29.848,-47.78],[-30.848,-44.412],[-32.642,-37.765],[-34.579,-26.232],[-38.475,-5.557],[-38.645,-4.531],[-38.65,-1.413],[-38.308,0.198],[-38.229,0.615],[-28.065,41.405],[-20.131,58.221],[-13.264,64.635],[-9.012,64.963],[-1.101,59.204],[5.102,43.219],[12.785,4.719],[14.542,-6.538],[-35.15,-5.661],[14.568,-6.005],[14.19,-9.681],[13.188,-14.385],[10.784,-28.038],[9.672,-34.412],[8.739,-37.651],[0.127,-72.739]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[4.135,-16.565],[0,0],[0.393,-0.557],[0,0],[-0.485,-4.109],[0,0],[-0.825,-0.181],[-0.068,-0.3],[0.442,-0.843],[-0.018,-0.143],[0,0],[-2.64,-1.949],[0,0],[-1.441,0.316],[-2.646,3.718],[-0.693,4.792],[0,0],[-0.045,0.307],[-0.112,0.457],[0,0],[0,0],[0,0],[1.097,1.957],[0,0],[0.231,1.191],[0,0]],"o":[[0,0],[-0.26,1.181],[0,0],[-2.279,6.581],[0,0],[0.063,0.188],[0.813,0.376],[0.078,0.342],[-0.989,0.771],[0,0],[1.767,6.678],[2.061,3.137],[1.076,0.606],[0,0],[3.248,-3.314],[0,0],[0.16,-0.914],[0.108,-0.742],[0,0],[0,0],[0,0],[-0.305,-5.629],[0,0],[-0.461,-0.814],[0,0],[-3.933,-13.582]],"v":[[-23.171,-72.991],[-31.987,-38.412],[-33.188,-35.211],[-42.821,-26.921],[-41.601,-15.096],[-35.128,-2.202],[-31.51,-0.373],[6.313,-7.541],[-32.885,2.275],[-35.087,7.067],[-33.268,48.643],[-25.76,60.49],[-13.634,56.268],[-9.461,56.559],[2.254,58.133],[8.978,43.151],[12.802,4.817],[13.786,-4.212],[14.066,-5.26],[14.481,-5.587],[14.718,-9.491],[17.48,-25.816],[15.123,-39.267],[9.417,-41.186],[8.395,-44.276],[-0.46,-73.71]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[3.924,-15.172],[0,0],[0.5,-0.492],[0,0],[-1.049,-4.075],[0,0],[-1.601,-0.162],[-0.034,-0.15],[0.993,-1.124],[-0.011,-0.145],[0,0],[-2.962,-0.349],[0,0],[-1.395,0.184],[-2.315,3.231],[-0.41,4.96],[0,0],[-0.603,0.148],[-0.224,0.914],[0,0],[0,0],[0,0],[1.541,1.746],[0,0],[0.233,1.182],[0,0]],"o":[[0,0],[-0.285,1.172],[0,0],[-1.897,3.1],[0,0],[0.078,0.182],[1.525,0.332],[0.039,0.171],[-2.005,1.405],[0,0],[1.344,6.597],[1.804,2.726],[1.076,0.437],[0,0],[3.519,-2.423],[0,0],[0.129,-0.839],[2.87,-0.704],[0,0],[0,0],[0,0],[0.267,-5.393],[0,0],[-0.501,-0.716],[0,0],[-3.739,-12.583]],"v":[[-22.621,-74.064],[-32.626,-41.045],[-34.028,-38.01],[-49.001,-31.576],[-51.624,-19.959],[-41.281,-3.597],[-33.875,-0.965],[-0.223,-8.668],[-30.461,7.353],[-36.444,15.519],[-38.471,57.63],[-31.389,64.509],[-14.003,47.901],[-9.909,48.154],[5.608,57.061],[12.854,43.084],[12.819,4.915],[13.029,-1.886],[12.282,-5.109],[14.395,-5.17],[15.247,-9.301],[21.521,-28.247],[19.212,-41.496],[10.163,-45.709],[9.051,-48.651],[-1.047,-74.68]],"c":true}]},{"i":{"x":0.69,"y":1},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[3.713,-13.779],[0,0],[0.607,-0.427],[0,0],[-1.613,-4.042],[0,0],[-2.378,-0.144],[0,0],[1.545,-1.405],[-0.003,-0.148],[0,0],[-3.359,-1.11],[0,0],[-1.349,0.052],[-1.984,2.743],[-0.127,5.127],[0,0],[-0.134,0.922],[-0.336,1.371],[0,0],[0,0],[0,0],[1.985,1.535],[0,0],[0.234,1.173],[0,0]],"o":[[0,0],[-0.31,1.164],[0,0],[-2.541,2.678],[0,0],[0.094,0.176],[2.237,0.288],[0,0],[-7.438,4.73],[0,0],[0.921,6.517],[1.546,2.315],[1.076,0.268],[0,0],[3.79,-1.532],[0,0],[0.098,-0.764],[0.324,-2.225],[0,0],[0,0],[0,0],[0.838,-5.158],[0,0],[-0.54,-0.618],[0,0],[-3.546,-11.584]],"v":[[-22.071,-75.138],[-33.766,-38.927],[-35.368,-36.058],[-53.93,-30.482],[-56.897,-18.823],[-44.059,-1.242],[-34.741,1.443],[-1.76,-7.796],[-30.413,7.93],[-40.177,21.095],[-44.424,55.242],[-37.017,65.028],[-13.998,46.284],[-9.982,46.5],[8.963,55.99],[16.73,43.016],[18.461,5.013],[18.648,0.44],[19.873,-3.582],[20.683,-4.752],[20.651,-9.861],[24.312,-28.679],[22.051,-41.725],[9.659,-43.483],[8.457,-46.277],[-1.634,-75.65]],"c":true}]},{"t":43,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.854902020623,0.466666696586,0.003921568627,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.806,0.493,0.513,0.975,0.682,0.279,1,0.95,0.558,0.066]}},"s":{"a":0,"k":[-16.006,-59.997]},"e":{"a":0,"k":[-4.763,46.286]},"t":1,"nm":"Gradient_MkFHPaeN6h","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":13,"op":49,"st":-15,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"Star 3D 11","sr":1,"ks":{"r":{"a":0,"k":-33},"p":{"a":1,"k":[{"i":{"x":0.769,"y":0.887},"o":{"x":0.274,"y":0.351},"t":12,"s":[203.046,186.584,0],"to":[-48.302,-99.817,0],"ti":[51.393,-51.848,0]},{"t":33.244140625,"s":[16.5,120,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,-14]},"o":{"x":[0.518,0.518,0.3],"y":[0,0,0]},"t":13,"s":[55,55,100]},{"t":33,"s":[20,20,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.184,183.113],[231.615,216.746]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[9]},{"t":34,"s":[13]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"t":32,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.847058823529,0.498039215686,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[7]},{"t":34,"s":[11]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[4.109,-5.958],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"t":32,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114],[-14.457,-4.833],[34.539,-1.255],[48.7,-7.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.878431379795,0.556862771511,0.031372550875,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[7]},{"t":34,"s":[11]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.904,0.6,0.512,0.999,0.863,0.434,1,0.997,0.822,0.267]}},"s":{"a":0,"k":[-34.14,-41.957]},"e":{"a":0,"k":[4.711,27.11]},"t":1,"nm":"Gradient_aQkahUQs5O","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":12,"op":34,"st":-17,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"Star 3D 10","sr":1,"ks":{"r":{"a":0,"k":13},"p":{"a":1,"k":[{"i":{"x":0.754,"y":0.875},"o":{"x":0.167,"y":0.167},"t":10,"s":[305.5,196.5,0],"to":[133.5,-134,0],"ti":[0,0,0]},{"t":36,"s":[495.5,287,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,20.048]},"o":{"x":[0.585,0.585,0.3],"y":[0,0,0]},"t":20,"s":[-40,40,100]},{"t":35,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.184,183.113],[231.615,216.746]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":11},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"t":29,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.793464183807,0.468024879694,0.003111624159,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":9},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[4.109,-5.958],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"t":29,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[34.188,31.43],[27.358,19.114],[-14.457,-4.833],[34.539,-1.255],[48.7,-7.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.878431379795,0.556862771511,0.031372550875,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":9},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.904,0.6,0.512,0.999,0.863,0.434,1,0.997,0.822,0.267]}},"s":{"a":0,"k":[9.231,-40.029]},"e":{"a":0,"k":[-28.277,31.518]},"t":1,"nm":"Gradient_rRk7VNTMbf","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":12,"op":36,"st":-16,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"Star 3D 12","sr":1,"ks":{"r":{"a":0,"k":13},"p":{"a":1,"k":[{"i":{"x":0.766,"y":0.875},"o":{"x":0.254,"y":0.335},"t":12,"s":[195.586,305.868,0],"to":[-63.855,65.356,0],"ti":[0,0,0]},{"t":32,"s":[154.5,497,0]}]},"a":{"a":0,"k":[244,244.65,0]},"s":{"a":1,"k":[{"i":{"x":[0.704,0.704,0.704],"y":[-0.226,0.087,-26.386]},"o":{"x":[0.275,0.275,0.275],"y":[0,0,0]},"t":12,"s":[30,30,100]},{"i":{"x":[0.78,0.78,0.78],"y":[0.939,0.931,-3.161]},"o":{"x":[0.427,0.427,0.427],"y":[0.155,0.175,10.513]},"t":27,"s":[26.276,25,100]},{"t":31,"s":[15,15,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.184,183.113],[231.615,216.746]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":12},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351]],"o":[[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848]],"v":[[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455]],"o":[[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098]],"v":[[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207]],"o":[[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914]],"v":[[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647]],"c":false}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":23,"s":[{"i":[[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219]],"o":[[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992]],"v":[[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152]],"c":false}]},{"t":27,"s":[{"i":[[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421]],"o":[[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704]],"v":[[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[32.727,35.889],[25.897,23.574]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.793464183807,0.468024879694,0.003111624159,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":11},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-7.037,-0.042],[0,0],[4.854,-3.114],[0.043,-0.168],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.033,0.351],[-0.688,0.55],[0,0],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.187,0.15],[6.507,0.039],[0,0],[-9.116,5.848],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.088,-0.354],[0.079,-0.848],[0,0],[0,0],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-70.152,-5.284],[-55.232,0.496],[-8.99,-5.15],[-45.735,15.875],[-57.186,30.553],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[29.733,8.614],[30.918,6.418],[33.539,4.12],[38.825,-0.513],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[4.346,-17.571],[0,0],[0.524,-0.035],[0,0],[-1.343,-4.33],[-1.297,-2.034],[-2.442,-2.141],[-0.07,-0.401],[1.674,-4.294],[0.653,-7.935],[0,0],[-4.222,2.824],[0,0],[-0.666,-0.574],[-0.372,0.514],[0.583,6.105],[0,0],[-0.066,0.455],[-0.362,0.682],[0,0],[0,0],[0,0],[4.336,2.353],[0,0],[0.145,1.185],[0,0]],"o":[[0,0],[-0.36,1.111],[0,0],[-4.624,-0.063],[0,0],[1.349,2.115],[3.343,2.931],[0.08,0.457],[-1.674,4.294],[-0.653,7.935],[0.549,8.198],[0.29,0.434],[0.616,-0.53],[0,0],[7.79,7.809],[0,0],[0.013,-0.431],[0.16,-1.098],[0,0],[0,0],[0,0],[2.325,-4.073],[0,0],[-0.58,-0.212],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-31.066,-43.848],[-32.54,-41.922],[-40.296,-41.47],[-46.258,-30.014],[-43.716,-16.369],[-38.208,-9.319],[-30.119,-3.287],[-36.052,8.866],[-38.823,22.35],[-39.739,44.952],[-26.008,56.044],[-13.21,47.685],[-11.091,47.732],[0.868,59.897],[15.932,49.507],[13.044,9.568],[13.166,8.225],[13.985,5.359],[14.741,3.854],[16.266,0.819],[26.76,-16.603],[22.77,-29.975],[9.65,-35.787],[8.473,-38.053],[0.127,-73.109]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[4.346,-17.571],[0,0],[0.286,-0.608],[0,0],[0.079,-4.052],[0,0],[-0.048,-0.195],[-0.102,-0.441],[-0.11,-0.55],[-0.026,-0.138],[0,0],[-2.319,-3.472],[0,0],[-1.488,0.438],[-2.976,4.115],[-0.977,4.525],[0,0],[-0.185,1.207],[-0.159,1.782],[0,0],[0,0],[0,0],[0.653,2.121],[0,0],[0.23,1.173],[0,0]],"o":[[0,0],[-0.235,1.164],[0,0],[-0.608,3.857],[0,0],[0.047,0.189],[0.102,0.412],[0.117,0.503],[0.027,0.135],[0,0],[2.19,6.612],[2.319,3.472],[1.077,0.758],[0,0],[2.976,-4.115],[0,0],[0.191,-0.968],[0.446,-2.914],[0,0],[0,0],[0,0],[-0.876,-5.738],[0,0],[-0.422,-0.892],[0,0],[-4.127,-14.266]],"v":[[-23.721,-72.304],[-33.473,-38.781],[-34.473,-35.485],[-36.267,-28.982],[-38.204,-17.698],[-38.85,-2.971],[-38.707,-2.395],[-38.4,-1.119],[-38.058,0.457],[-37.979,0.866],[-28.065,38.575],[-20.131,55.028],[-13.264,61.305],[-9.012,61.625],[-1.101,55.99],[5.102,40.35],[12.785,2.68],[13.355,-0.647],[14.35,-8.583],[14.256,-9.188],[14.065,-10.41],[13.188,-16.012],[10.784,-29.371],[9.672,-35.608],[8.739,-38.777],[0.127,-73.109]],"c":true}]},{"i":{"x":0.71,"y":1},"o":{"x":0.167,"y":0.167},"t":23,"s":[{"i":[[3.541,-8.071],[0,0],[1.022,-0.063],[0,0],[-4.088,-4.022],[0,0],[-0.106,-0.258],[-0.104,-0.805],[0.055,-0.644],[0.024,-0.117],[0,0],[-4.746,3.722],[0,0],[-0.876,-0.718],[0,0],[-0.874,6.714],[-0.122,4.393],[4.8,3.219],[-0.519,0.507],[-2.563,2.365],[0,0],[0,0],[3.588,0.362],[0,0],[0.252,1.173],[0,0]],"o":[[0,0],[-0.376,1.164],[0,0],[-6.619,0.232],[0,0],[0.13,0.128],[0.223,0.546],[0.119,0.919],[-0.013,0.158],[0,0],[-2.117,10.425],[0,0],[0.879,-0.713],[0,0],[4.281,3.811],[0,0],[0.122,-4.393],[-2.97,-1.992],[0,0],[2.463,-2.273],[0,0],[2.807,-3.998],[0,0],[-0.703,-0.071],[0,0],[-2.973,-8.016]],"v":[[-20.166,-78.804],[-34.188,-38.218],[-36.484,-36.204],[-62.198,-30.732],[-66.617,-16.698],[-49.45,4.591],[-49.096,5.183],[-48.602,7.32],[-48.501,9.827],[-48.558,10.241],[-49.633,48.95],[-38.004,60.278],[-14.357,38.742],[-9.708,38.625],[14.365,57.07],[25.023,51.196],[25.23,24.421],[18.869,9.152],[4.109,-5.958],[27.252,-9.192],[32.65,-16.948],[38.593,-29.512],[36.369,-41.934],[13.118,-41.358],[11.548,-43.402],[-4.027,-78.984]],"c":true}]},{"t":27,"s":[{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[-0.129,-0.152],[-0.127,-0.395],[0.067,-0.481],[0.03,-0.117],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0.902,2.803],[3.791,4.421],[-0.688,0.55],[-5.639,1.165],[0,0],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.159,0.128],[0.273,0.322],[0.145,0.451],[-0.016,0.118],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-1.414,-4.394],[-1.459,-1.704],[0,0],[7.736,-2.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-54.595,6.638],[-53.99,7.725],[-53.867,9.139],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[32.727,35.889],[25.897,23.574],[-14.457,-4.833],[36.464,-5.827],[50.625,-12.085],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.878431379795,0.556862771511,0.031372550875,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":11},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.25,1,0.904,0.6,0.512,0.999,0.863,0.434,1,0.997,0.822,0.267]}},"s":{"a":0,"k":[-24.646,-37.694]},"e":{"a":0,"k":[2.54,18.993]},"t":1,"nm":"Gradient_UFPre71sSh","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[244,244.65]},"a":{"a":0,"k":[244,244.65]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 8 :M","bm":0,"hd":false}],"ip":12,"op":32,"st":-16,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"Shape Layer 26","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[100]},{"t":80,"s":[50]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"t":71,"s":[-360]}]},"p":{"a":1,"k":[{"i":{"x":0.462,"y":0.71},"o":{"x":0.112,"y":0.131},"t":12,"s":[259.658,160.283,0],"to":[1.546,-33.016,0],"ti":[5.538,18.448,0]},{"i":{"x":0.7,"y":0.95},"o":{"x":0.298,"y":0.873},"t":29,"s":[250.65,70.521,0],"to":[-11.278,-37.567,0],"ti":[0,0,0]},{"t":93,"s":[223,14.5,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":9,"s":[60,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":54,"s":[20,20,100]},{"t":75,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.580392156863,0.96862745098,0.450980392157,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":12,"op":72,"st":-77,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"Shape Layer 25","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[50]},{"t":81,"s":[100]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"t":71,"s":[-270]}]},"p":{"a":1,"k":[{"i":{"x":0.462,"y":0.709},"o":{"x":0.112,"y":0.131},"t":12,"s":[301.202,160.234,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":0.95},"o":{"x":0.298,"y":0.878},"t":29,"s":[363.643,92.278,0],"to":[0,0,0],"ti":[0,0,0]},{"t":72,"s":[407,58,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":9,"s":[60,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":57,"s":[20,20,100]},{"t":78,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333333333,0.439215686275,0.988235294118,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":12,"op":74,"st":-98,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"Shape Layer 24","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":17,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[100]},{"t":80,"s":[50]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"t":71,"s":[-180]}]},"p":{"a":1,"k":[{"i":{"x":0.462,"y":0.707},"o":{"x":0.112,"y":0.104},"t":12,"s":[350.263,202.194,0],"to":[17.532,-8.291,0],"ti":[-25.948,6.912,0]},{"i":{"x":0.7,"y":0.938},"o":{"x":0.298,"y":0.55},"t":29,"s":[428.055,178.457,0],"to":[22.292,-5.937,0],"ti":[-18.764,-7.455,0]},{"t":75,"s":[492,181,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.273]},"t":12,"s":[60,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":52,"s":[30,30,100]},{"t":73,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254901961,0.314868762446,0.314868762446,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":12,"op":72,"st":-95,"bm":0},{"ddd":0,"ind":27,"ty":4,"nm":"Shape Layer 23","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[50]},{"t":80,"s":[50]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"t":71,"s":[-90]}]},"p":{"a":1,"k":[{"i":{"x":0.462,"y":0.71},"o":{"x":0.112,"y":0.13},"t":12,"s":[352.799,238.28,0],"to":[18.502,4.824,0],"ti":[-20.417,-17.478,0]},{"i":{"x":0.7,"y":0.951},"o":{"x":0.298,"y":0.857},"t":29,"s":[429.074,280.324,0],"to":[29.828,25.535,0],"ti":[-6.493,-43.828,0]},{"t":78,"s":[489,379,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":9,"s":[60,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":54,"s":[20,20,100]},{"t":75,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.690196078431,0.517647058824,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":12,"op":72,"st":-92,"bm":0},{"ddd":0,"ind":28,"ty":4,"nm":"Shape Layer 22","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":23,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[100]},{"t":77,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"t":76,"s":[124]}]},"p":{"a":1,"k":[{"i":{"x":0.462,"y":0.709},"o":{"x":0.112,"y":0.131},"t":12,"s":[325.358,329.633,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":0.95},"o":{"x":0.298,"y":0.878},"t":29,"s":[372.199,390.259,0],"to":[0,0,0],"ti":[0,0,0]},{"t":81,"s":[438.5,470.5,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":9,"s":[60,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":56,"s":[30,30,100]},{"t":77,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.576470588235,0.235294117647,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":12,"op":78,"st":-89,"bm":0},{"ddd":0,"ind":29,"ty":4,"nm":"Shape Layer 21","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[50]},{"t":76,"s":[100]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"t":71,"s":[90]}]},"p":{"a":1,"k":[{"i":{"x":0.462,"y":0.709},"o":{"x":0.112,"y":0.131},"t":12,"s":[245.665,339.721,0],"to":[-7.296,20.229,0],"ti":[9.122,-31.98,0]},{"i":{"x":0.7,"y":0.95},"o":{"x":0.298,"y":0.877},"t":27,"s":[226.656,406.986,0],"to":[-8.802,30.859,0],"ti":[1.862,-17.763,0]},{"t":84,"s":[213.5,497.5,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":9,"s":[50,50,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":59,"s":[20,20,100]},{"t":80,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078431373,0.725490196078,0.960784313725,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":12,"op":78,"st":-86,"bm":0},{"ddd":0,"ind":30,"ty":4,"nm":"Shape Layer 20","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[50]},{"t":79,"s":[100]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"t":71,"s":[180]}]},"p":{"a":1,"k":[{"i":{"x":0.462,"y":0.709},"o":{"x":0.112,"y":0.131},"t":12,"s":[181.866,290.421,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":0.95},"o":{"x":0.298,"y":0.878},"t":29,"s":[111.006,365.381,0],"to":[0,0,0],"ti":[0,0,0]},{"t":87,"s":[67.5,417.5,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":9,"s":[60,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":52,"s":[30,30,100]},{"t":81,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.450980392157,0.96862745098,0.717647058824,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":12,"op":78,"st":-83,"bm":0},{"ddd":0,"ind":31,"ty":4,"nm":"Shape Layer 19","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[50]},{"t":81,"s":[50]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[0]},{"t":71,"s":[270]}]},"p":{"a":1,"k":[{"i":{"x":0.571,"y":0.662},"o":{"x":0.167,"y":0.167},"t":12,"s":[173.261,231.262,0],"to":[-6.14,-1.361,0],"ti":[48.974,-21.268,0]},{"i":{"x":0.708,"y":1},"o":{"x":0.304,"y":0.74},"t":32,"s":[77.502,252.366,0],"to":[-33.88,14.713,0],"ti":[21.099,-30.941,0]},{"t":93,"s":[4,314.5,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":9,"s":[60,60,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":59,"s":[20,20,100]},{"t":77,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.354248286229,0.57462385589,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":12,"op":67,"st":-80,"bm":0},{"ddd":0,"ind":32,"ty":4,"nm":"Shape Layer 35","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[50]},{"t":79,"s":[100]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[17]},{"t":77,"s":[-343]}]},"p":{"a":1,"k":[{"i":{"x":0.451,"y":0.627},"o":{"x":0.167,"y":0.167},"t":15,"s":[281.425,187.241,0],"to":[-1.336,-29.61,0],"ti":[-1.938,14.395,0]},{"i":{"x":0.7,"y":0.956},"o":{"x":0.298,"y":0.712},"t":35,"s":[283.441,142.768,0],"to":[3.125,-23.21,0],"ti":[0,0,0]},{"t":99,"s":[296.101,104.425,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":15,"s":[31.5,31.5,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":55,"s":[31.5,31.5,100]},{"t":82,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.52418308632,0.651067397174,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":15,"op":81,"st":-71,"bm":0},{"ddd":0,"ind":33,"ty":4,"nm":"Shape Layer 34","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":81,"s":[100]},{"t":82,"s":[25]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[17]},{"t":77,"s":[-253]}]},"p":{"a":1,"k":[{"i":{"x":0.451,"y":0.626},"o":{"x":0.167,"y":0.167},"t":15,"s":[302.145,200.521,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":0.956},"o":{"x":0.298,"y":0.717},"t":35,"s":[362.509,172.69,0],"to":[0,0,0],"ti":[0,0,0]},{"t":88,"s":[397.444,156.024,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":15,"s":[25.2,25.2,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":67,"s":[12.6,12.6,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.537285658892,0.617300714231,0.932026223575,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":15,"op":82,"st":-92,"bm":0},{"ddd":0,"ind":34,"ty":4,"nm":"Shape Layer 33","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":23,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[100]},{"t":85,"s":[100]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[17]},{"t":77,"s":[-163]}]},"p":{"a":1,"k":[{"i":{"x":0.451,"y":0.627},"o":{"x":0.167,"y":0.167},"t":15,"s":[342.766,239.279,0],"to":[12.208,-1.911,0],"ti":[-20.028,-1.938,0]},{"i":{"x":0.7,"y":0.956},"o":{"x":0.298,"y":0.709},"t":35,"s":[406.663,242.096,0],"to":[17.143,1.659,0],"ti":[-14.592,-11.02,0]},{"t":81,"s":[465.79,260.061,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":15,"s":[31.5,31.5,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":58,"s":[12.6,12.6,100]},{"t":79,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.62875809015,0.957164390414,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":15,"op":78,"st":-89,"bm":0},{"ddd":0,"ind":35,"ty":4,"nm":"Shape Layer 32","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":26,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":83,"s":[50]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[17]},{"t":77,"s":[-73]}]},"p":{"a":1,"k":[{"i":{"x":0.451,"y":0.627},"o":{"x":0.167,"y":0.167},"t":15,"s":[331.559,276.693,0],"to":[7.379,5.503,0],"ti":[-14.676,-16.088,0]},{"i":{"x":0.7,"y":0.956},"o":{"x":0.298,"y":0.71},"t":35,"s":[355.292,304.034,0],"to":[16.671,18.275,0],"ti":[-6.339,-23.601,0]},{"t":84,"s":[392.22,366.521,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":15,"s":[35,35,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":60,"s":[20,20,100]},{"t":81,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.450980392157,0.96862745098,0.702699190028,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":15,"op":78,"st":-86,"bm":0},{"ddd":0,"ind":36,"ty":4,"nm":"Shape Layer 31","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":66,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[100]},{"t":84,"s":[50]}]},"r":{"a":0,"k":17},"p":{"a":1,"k":[{"i":{"x":0.451,"y":0.626},"o":{"x":0.167,"y":0.167},"t":15,"s":[281.992,338.73,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":0.956},"o":{"x":0.298,"y":0.717},"t":35,"s":[291.824,379.889,0],"to":[0,0,0],"ti":[0,0,0]},{"t":87,"s":[302.249,423.637,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":15,"s":[44.1,44.1,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":62,"s":[18.9,18.9,100]},{"t":83,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.997385780484,0.918311264936,0.45240909352,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":15,"op":82,"st":-83,"bm":0},{"ddd":0,"ind":37,"ty":4,"nm":"Shape Layer 30","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":56,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":81,"s":[50]},{"t":82,"s":[100]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[17]},{"t":88,"s":[300]}]},"p":{"a":1,"k":[{"i":{"x":0.451,"y":0.628},"o":{"x":0.167,"y":0.167},"t":15,"s":[226.102,326.344,0],"to":[-8.144,4.463,0],"ti":[16.17,-24.976,0]},{"i":{"x":0.7,"y":0.956},"o":{"x":0.298,"y":0.717},"t":34,"s":[191.191,371.086,0],"to":[-10.987,16.971,0],"ti":[4.394,-10.359,0]},{"t":90,"s":[149.184,440.894,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":15,"s":[31.5,31.5,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,9.333]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":69,"s":[18.9,18.9,100]},{"t":90,"s":[5,5,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.490196078431,0.439215686275,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":15,"op":89,"st":-80,"bm":0},{"ddd":0,"ind":38,"ty":4,"nm":"Shape Layer 29","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":43,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":52,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[50]},{"t":84,"s":[50]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[17]},{"t":77,"s":[197]}]},"p":{"a":1,"k":[{"i":{"x":0.451,"y":0.626},"o":{"x":0.167,"y":0.167},"t":15,"s":[195.833,270.012,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":0.956},"o":{"x":0.298,"y":0.717},"t":35,"s":[143.036,307.22,0],"to":[0,0,0],"ti":[0,0,0]},{"t":93,"s":[104.331,336.816,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":15,"s":[31.5,31.5,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":66,"s":[15.75,15.75,100]},{"t":87,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.576470588235,0.235294117647,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":15,"op":83,"st":-77,"bm":0},{"ddd":0,"ind":39,"ty":4,"nm":"Shape Layer 28","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":46,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":55,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":61,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":62,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":82,"s":[100]},{"t":83,"s":[50]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[17]},{"t":77,"s":[287]}]},"p":{"a":1,"k":[{"i":{"x":0.451,"y":0.629},"o":{"x":0.167,"y":0.167},"t":15,"s":[192.989,221.963,0],"to":[-3.85,-6.026,0],"ti":[33.638,-0.022,0]},{"i":{"x":0.7,"y":0.956},"o":{"x":0.298,"y":0.707},"t":38,"s":[109.817,210.796,0],"to":[-10.134,0.007,0],"ti":[18.411,-14.755,0]},{"t":99,"s":[35.427,226.435,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":18,"s":[38,38,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":67,"s":[15,15,100]},{"t":83,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333333333,0.439215686275,0.988235294118,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":15,"op":83,"st":-74,"bm":0},{"ddd":0,"ind":40,"ty":4,"nm":"Shape Layer 27","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":28,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":41,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":42,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":53,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":58,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":68,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":71,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":79,"s":[100]},{"t":85,"s":[100]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[17]},{"t":77,"s":[377]}]},"p":{"a":1,"k":[{"i":{"x":0.451,"y":0.627},"o":{"x":0.167,"y":0.167},"t":15,"s":[227.568,196.69,0],"to":[-14.568,-24.197,0],"ti":[23.968,24.345,0]},{"i":{"x":0.7,"y":0.956},"o":{"x":0.298,"y":0.716},"t":35,"s":[179.133,135.408,0],"to":[-5.384,-5.468,0],"ti":[17.34,10.519,0]},{"t":99,"s":[120.25,90.342,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":15,"s":[31.5,31.5,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":68,"s":[25.2,25.2,100]},{"t":91,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.448,-6.196],[0,0],[1.249,-0.063],[0,0],[-4.998,-4.022],[0,0],[0.309,-1.211],[0,0],[-5.439,3.614],[0,0],[-1.071,-0.718],[0,0],[1.574,6.33],[0,0],[-0.974,0.778],[0,0],[6.393,0.362],[0,0],[0.449,1.173],[0,0]],"o":[[0,0],[-0.459,1.164],[0,0],[-6.406,0.321],[0,0],[0.974,0.784],[0,0],[-1.616,6.326],[0,0],[1.074,-0.713],[0,0],[5.416,3.635],[0,0],[-0.3,-1.21],[0,0],[5.002,-3.998],[0,0],[-1.253,-0.071],[0,0],[-2.383,-6.221]],"v":[[-18.772,-80.804],[-36.9,-40.968],[-39.707,-38.954],[-83.057,-34.482],[-87.084,-22.073],[-55.027,6.216],[-53.936,9.491],[-62.891,53.575],[-52.037,61.278],[-13.962,38.242],[-10.419,38.25],[27.595,61.49],[38.488,53.85],[29.813,9.68],[30.918,6.418],[63.066,-21.762],[59.104,-34.184],[15.191,-38.983],[12.393,-41.027],[-5.156,-80.734]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.529411764706,0.690196078431,0.98431372549,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":15,"op":90,"st":-71,"bm":0},{"ddd":0,"ind":41,"ty":4,"nm":"Star Splash 1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":10,"s":[100]},{"t":29,"s":[0]}]},"p":{"a":0,"k":[256,253.15,0]},"a":{"a":0,"k":[244,244.65,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[2.602,-6.356],[0,0],[1.678,-0.082],[0,0],[-5.311,-4.126],[0,0],[0.415,-1.57],[0,0],[-5.78,3.707],[0,0],[-1.438,-0.931],[0,0],[1.673,6.494],[0,0],[-1.308,1.009],[0,0],[6.794,0.372],[0,0],[0.603,1.521],[0,0]],"o":[[0,0],[-0.617,1.509],[0,0],[-6.808,0.329],[0,0],[1.308,1.017],[0,0],[-1.717,6.49],[0,0],[1.443,-0.925],[0,0],[5.756,3.729],[0,0],[-0.403,-1.569],[0,0],[5.316,-4.101],[0,0],[-1.683,-0.092],[0,0],[-2.533,-6.381]],"v":[[-19.196,-79.644],[-42.925,-40.985],[-46.694,-38.374],[-87.515,-32.124],[-91.794,-19.393],[-64.77,12.184],[-63.304,16.429],[-66.084,58.211],[-54.549,66.113],[-14.62,53.202],[-9.861,53.212],[30.08,66.33],[41.656,58.492],[39.171,16.174],[40.654,11.945],[67.776,-19.075],[63.565,-31.818],[24.033,-39.411],[20.276,-42.061],[-4.726,-79.572]],"c":true}]},{"t":29,"s":[{"i":[[3.269,-8.273],[0,0],[2.108,-0.106],[0,0],[-6.673,-5.37],[0,0],[0.522,-2.043],[0,0],[-7.262,4.825],[0,0],[-1.807,-1.212],[0,0],[2.102,8.452],[0,0],[-1.643,1.313],[0,0],[8.537,0.484],[0,0],[0.757,1.98],[0,0]],"o":[[0,0],[-0.775,1.964],[0,0],[-8.554,0.429],[0,0],[1.643,1.324],[0,0],[-2.158,8.447],[0,0],[1.813,-1.204],[0,0],[7.232,4.854],[0,0],[-0.507,-2.042],[0,0],[6.679,-5.338],[0,0],[-2.115,-0.12],[0,0],[-3.182,-8.306]],"v":[[-21.04,-104.227],[-53.994,-64.973],[-58.73,-61.574],[-106.877,-42.375],[-112.253,-25.806],[-84.581,14.645],[-82.74,20.17],[-79.95,75.203],[-65.458,85.488],[-15.29,68.684],[-9.311,68.697],[40.871,85.771],[55.416,75.57],[58.576,20.489],[60.44,14.984],[88.234,-25.391],[82.943,-41.977],[33.903,-61.622],[29.181,-65.071],[-2.859,-104.133]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.98692818436,0.539429668352,0.011610918419,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[25]},{"t":29,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":10,"op":30,"st":-78,"bm":0},{"ddd":0,"ind":42,"ty":4,"nm":"Star Splash 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":12,"s":[100]},{"t":33,"s":[0]}]},"p":{"a":0,"k":[256,253.15,0]},"a":{"a":0,"k":[244,244.65,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[3.671,-9.291],[0,0],[2.367,-0.12],[0,0],[-7.494,-6.031],[0,0],[0.586,-2.295],[0,0],[-8.156,5.419],[0,0],[-2.03,-1.361],[0,0],[2.36,9.493],[0,0],[-1.845,1.474],[0,0],[9.587,0.543],[0,0],[0.851,2.223],[0,0]],"o":[[0,0],[-0.87,2.205],[0,0],[-9.607,0.481],[0,0],[1.845,1.486],[0,0],[-2.423,9.487],[0,0],[2.036,-1.352],[0,0],[8.122,5.451],[0,0],[-0.569,-2.293],[0,0],[7.501,-5.995],[0,0],[-2.375,-0.135],[0,0],[-3.574,-9.328]],"v":[[-22.151,-115.709],[-59.162,-71.623],[-64.481,-67.806],[-118.553,-46.245],[-124.591,-27.635],[-93.513,17.793],[-91.446,23.999],[-88.312,85.805],[-72.036,97.356],[-15.694,78.483],[-8.98,78.498],[47.38,97.674],[63.714,86.217],[67.263,24.356],[69.356,18.175],[100.572,-27.17],[94.629,-45.797],[39.553,-67.861],[34.251,-71.734],[-1.733,-115.603]],"c":true}]},{"t":33,"s":[{"i":[[4.724,-11.955],[0,0],[3.046,-0.154],[0,0],[-9.643,-7.761],[0,0],[0.754,-2.952],[0,0],[-10.494,6.973],[0,0],[-2.612,-1.751],[0,0],[3.037,12.214],[0,0],[-2.374,1.897],[0,0],[12.336,0.699],[0,0],[1.095,2.861],[0,0]],"o":[[0,0],[-1.12,2.838],[0,0],[-12.361,0.619],[0,0],[2.374,1.913],[0,0],[-3.118,12.207],[0,0],[2.619,-1.739],[0,0],[10.451,7.014],[0,0],[-0.732,-2.951],[0,0],[9.652,-7.714],[0,0],[-3.056,-0.173],[0,0],[-4.599,-12.003]],"v":[[-25.06,-145.747],[-72.682,-89.022],[-79.525,-84.111],[-149.101,-56.367],[-156.87,-32.423],[-116.882,26.031],[-114.221,34.016],[-110.189,113.542],[-89.247,128.405],[-16.751,104.121],[-8.112,104.14],[64.406,128.814],[85.424,114.071],[89.99,34.475],[92.683,26.522],[132.848,-31.824],[125.202,-55.792],[54.335,-84.181],[47.513,-89.165],[1.212,-145.611]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.964705882353,0.647058823529,0.090196078431,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[20]},{"t":31,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":12,"op":34,"st":-75,"bm":0},{"ddd":0,"ind":43,"ty":4,"nm":"Star Splash 3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":13,"s":[100]},{"t":43,"s":[0]}]},"p":{"a":0,"k":[256,253.15,0]},"a":{"a":0,"k":[244,244.65,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[4.621,-11.694],[0,0],[2.98,-0.15],[0,0],[-9.433,-7.591],[0,0],[0.737,-2.888],[0,0],[-10.265,6.821],[0,0],[-2.555,-1.713],[0,0],[2.971,11.948],[0,0],[-2.322,1.856],[0,0],[12.067,0.684],[0,0],[1.071,2.799],[0,0]],"o":[[0,0],[-1.095,2.776],[0,0],[-12.091,0.606],[0,0],[2.322,1.871],[0,0],[-3.05,11.941],[0,0],[2.562,-1.701],[0,0],[10.223,6.861],[0,0],[-0.716,-2.886],[0,0],[9.441,-7.546],[0,0],[-2.989,-0.17],[0,0],[-4.498,-11.741]],"v":[[-24.775,-142.806],[-71.358,-87.319],[-78.052,-82.514],[-146.109,-55.376],[-153.709,-31.954],[-114.593,25.224],[-111.991,33.035],[-108.047,110.826],[-87.562,125.364],[-16.648,101.61],[-8.197,101.629],[62.739,125.764],[83.298,111.344],[87.764,33.484],[90.399,25.704],[129.688,-31.368],[122.208,-54.813],[52.888,-82.583],[46.214,-87.458],[0.924,-142.673]],"c":true}]},{"t":44,"s":[{"i":[[6.23,-15.767],[0,0],[4.017,-0.203],[0,0],[-12.718,-10.235],[0,0],[0.994,-3.894],[0,0],[-13.841,9.196],[0,0],[-3.444,-2.309],[0,0],[4.005,16.109],[0,0],[-3.131,2.502],[0,0],[16.27,0.922],[0,0],[1.444,3.773],[0,0]],"o":[[0,0],[-1.477,3.743],[0,0],[-16.302,0.817],[0,0],[3.131,2.523],[0,0],[-4.112,16.1],[0,0],[3.455,-2.294],[0,0],[13.783,9.25],[0,0],[-0.966,-3.891],[0,0],[12.729,-10.174],[0,0],[-4.03,-0.229],[0,0],[-6.065,-15.83]],"v":[[-29.222,-188.733],[-92.028,-113.921],[-101.055,-107.443],[-192.815,-70.853],[-203.061,-39.274],[-150.322,37.818],[-146.814,48.349],[-141.496,153.234],[-113.876,172.836],[-18.264,140.808],[-6.87,140.834],[88.771,173.375],[116.49,153.932],[122.512,48.956],[126.065,38.466],[179.037,-38.484],[168.953,-70.094],[75.489,-107.535],[66.491,-114.108],[5.427,-188.553]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.803921568627,0.180392156863,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[20]},{"t":34,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":13,"op":45,"st":-71,"bm":0},{"ddd":0,"ind":44,"ty":4,"nm":"Star Splash 4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.671],"y":[0.523]},"o":{"x":[0.272],"y":[0]},"t":15,"s":[80]},{"i":{"x":[0.671],"y":[0.939]},"o":{"x":[0.337],"y":[0.062]},"t":35,"s":[33.488]},{"i":{"x":[0.671],"y":[3.247]},"o":{"x":[0.338],"y":[-2.307]},"t":36,"s":[15]},{"i":{"x":[0.672],"y":[1.045]},"o":{"x":[0.338],"y":[-0.046]},"t":38,"s":[15]},{"i":{"x":[0.672],"y":[0.548]},"o":{"x":[0.431],"y":[0.593]},"t":39,"s":[40]},{"i":{"x":[0.68],"y":[0.875]},"o":{"x":[0.345],"y":[0.059]},"t":41,"s":[35]},{"i":{"x":[0.68],"y":[6.009]},"o":{"x":[0.426],"y":[-6.655]},"t":42,"s":[15]},{"i":{"x":[0.778],"y":[1.059]},"o":{"x":[0.426],"y":[-0.333]},"t":44,"s":[15]},{"i":{"x":[0.778],"y":[2.184]},"o":{"x":[0.167],"y":[0]},"t":45,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47,"s":[25]},{"t":48,"s":[0]}]},"p":{"a":0,"k":[256,253.15,0]},"a":{"a":0,"k":[244,244.65,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[4.717,-11.938],[0,0],[3.042,-0.154],[0,0],[-9.63,-7.75],[0,0],[0.753,-2.948],[0,0],[-10.48,6.963],[0,0],[-2.608,-1.748],[0,0],[3.033,12.198],[0,0],[-2.371,1.894],[0,0],[12.319,0.698],[0,0],[1.093,2.857],[0,0]],"o":[[0,0],[-1.118,2.834],[0,0],[-12.344,0.618],[0,0],[2.371,1.91],[0,0],[-3.114,12.19],[0,0],[2.616,-1.737],[0,0],[10.436,7.004],[0,0],[-0.731,-2.946],[0,0],[9.638,-7.703],[0,0],[-3.052,-0.173],[0,0],[-4.592,-11.986]],"v":[[-25.042,-145.562],[-72.598,-88.915],[-79.432,-84.01],[-148.912,-56.305],[-156.67,-32.393],[-116.737,25.98],[-114.081,33.954],[-110.054,113.37],[-89.141,128.213],[-16.745,103.962],[-8.117,103.981],[64.301,128.621],[85.289,113.899],[89.849,34.413],[92.539,26.47],[132.649,-31.795],[125.013,-55.73],[54.244,-84.08],[47.431,-89.057],[1.194,-145.426]],"c":true}]},{"t":49,"s":[{"i":[[12.639,-17.873],[0,0],[5.253,-0.265],[0,0],[-14.182,-20.101],[0,0],[1.3,-5.092],[0,0],[-22.123,11.018],[0,0],[-4.504,-3.02],[0,0],[-0.058,21.466],[0,0],[-4.094,3.271],[0,0],[21.908,7.577],[0,0],[1.888,4.934],[0,0]],"o":[[0,0],[-1.931,4.894],[0,0],[-15.505,5.276],[0,0],[4.094,3.299],[0,0],[-1.374,22.379],[0,0],[4.518,-3],[0,0],[18.625,10.861],[0,0],[-1.263,-5.089],[0,0],[11.466,-15.096],[0,0],[-5.27,-0.299],[0,0],[-15.654,-20.853]],"v":[[-34.397,-243.382],[-116.528,-145.551],[-128.331,-137.08],[-248.324,-89.233],[-261.723,-47.937],[-192.758,52.874],[-188.169,66.646],[-181.216,203.8],[-145.098,229.434],[-20.068,187.552],[-5.168,187.586],[119.9,230.139],[156.148,204.713],[164.022,67.439],[168.668,53.721],[237.939,-46.904],[224.752,-88.24],[102.531,-137.201],[90.765,-145.796],[10.913,-243.147]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.956331260532,0.503267894072,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[30]},{"t":40,"s":[7]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[256,256]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape Layer 7","bm":0,"hd":false}],"ip":15,"op":50,"st":-69,"bm":0},{"ddd":0,"ind":45,"ty":4,"nm":"GRADIENT LIGHT","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[100]},{"t":30,"s":[0]}]},"p":{"a":0,"k":[256,256,0]},"a":{"a":0,"k":[44,74,0]},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,-1.348]},"t":10,"s":[110,110,100]},{"t":25,"s":[160,160,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-90.575,0],[0,-90.575],[90.575,0],[0,90.575]],"o":[[90.575,0],[0,90.575],[-90.575,0],[0,-90.575]],"v":[[0,-164],[164,0],[0,164],[-164,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.15,1,1,1,0.36,1,1,1,0.45,1,1,1,0.78,1,1,1,1,1,1,1,0.15,0,0.36,0.5,0.45,1,0.78,0.5,1,0]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[160.5,0]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_9366IkNRH0","hd":false},{"ty":"tr","p":{"a":0,"k":[44,74]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":10,"op":31,"st":9,"bm":0},{"ddd":0,"ind":46,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.72],"y":[1]},"o":{"x":[0.28],"y":[0]},"t":20,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":61,"s":[75]},{"t":91,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[197,387,0],"to":[0,0,0],"ti":[0,0,0]},{"t":84,"s":[144,414,0]}]},"a":{"a":0,"k":[-97,-19,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,1.117]},"t":13,"s":[36,36,100]},{"t":82,"s":[52,52,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[382,382]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.839,0.469,0.65,1,0.839,0.47,1,1,0.839,0.471,0,1,0.65,0.5,1,0]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[177,0]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_tEoam5RiKy","hd":false},{"ty":"tr","p":{"a":0,"k":[-97,-19]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":13,"op":89,"st":1,"bm":0},{"ddd":0,"ind":47,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[75]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":30,"s":[45]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":53,"s":[100]},{"t":80,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.8,"y":1},"o":{"x":0.167,"y":0.167},"t":12,"s":[314.5,158,0],"to":[-3.5,-31.5,0],"ti":[0,0,0]},{"t":80,"s":[308,85.5,0]}]},"a":{"a":0,"k":[-97,-19,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,3.174]},"t":12,"s":[25,25,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,3.248]},"o":{"x":[0.4,0.4,0.4],"y":[0,0,0]},"t":44,"s":[50,50,100]},{"t":80,"s":[40,40,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[382,382]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.943,0.605,0.65,1,0.942,0.605,1,1,0.941,0.604,0,1,0.65,0.5,1,0]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[177,0]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_7QdFZkjyma","hd":false},{"ty":"tr","p":{"a":0,"k":[-97,-19]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":13,"op":81,"st":-1,"bm":0},{"ddd":0,"ind":48,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":30,"s":[100]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":48,"s":[45]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":67,"s":[75]},{"t":89,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":0.905},"o":{"x":0.167,"y":0.167},"t":23,"s":[120,256.5,0],"to":[0,0,0],"ti":[18,-3,0]},{"t":89,"s":[69.5,252.5,0]}]},"a":{"a":0,"k":[-97,-19,0]},"s":{"a":1,"k":[{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,-1.641]},"t":23,"s":[30,30,100]},{"t":89,"s":[38,38,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[382,382]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.941,0.604,0.65,1,0.941,0.604,1,1,0.941,0.604,0,1,0.65,0.5,1,0]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[177,0]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_St4IBLrCCt","hd":false},{"ty":"tr","p":{"a":0,"k":[-97,-19]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":23,"op":89,"st":12,"bm":0},{"ddd":0,"ind":49,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.41],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":12,"s":[0]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.593],"y":[0]},"t":41,"s":[100]},{"t":83,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":0.911},"o":{"x":0.167,"y":0.167},"t":13,"s":[332,375.5,0],"to":[0,0,0],"ti":[-9,-50.5,0]},{"t":85,"s":[358.5,446,0]}]},"a":{"a":0,"k":[-97,-19,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,3.444]},"t":13,"s":[50,50,100]},{"t":85,"s":[26,26,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[382,382]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.95,0.658,0.65,1,0.95,0.658,1,1,0.949,0.659,0,1,0.65,0.5,1,0]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[177,0]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_5ynFuNzS96","hd":false},{"ty":"tr","p":{"a":0,"k":[-97,-19]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":13,"op":86,"st":2,"bm":0},{"ddd":0,"ind":50,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":14,"s":[30]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.4],"y":[0]},"t":44,"s":[100]},{"t":79,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":14,"s":[179,149,0],"to":[0,0,0],"ti":[26.5,9.5,0]},{"t":78,"s":[127,109.5,0]}]},"a":{"a":0,"k":[-97,-19,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,4.861]},"t":14,"s":[25,25,100]},{"t":79,"s":[45,45,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[382,382]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.95,0.658,0.65,1,0.95,0.658,1,1,0.949,0.659,0,1,0.65,0.5,1,0]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[177,0]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_0vIEzeG9ST","hd":false},{"ty":"tr","p":{"a":0,"k":[-97,-19]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":14,"op":80,"st":10,"bm":0},{"ddd":0,"ind":51,"ty":4,"nm":"Shape Layer 6","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.72],"y":[1]},"o":{"x":[0.28],"y":[0]},"t":24,"s":[100]},{"i":{"x":[0.72],"y":[1]},"o":{"x":[0.28],"y":[0]},"t":44,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.28],"y":[0]},"t":67,"s":[100]},{"t":92,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":24,"s":[410,198.75,0],"to":[0,0,0],"ti":[-14,0,0]},{"t":92,"s":[457,184.5,0]}]},"a":{"a":0,"k":[-97,-19,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.259,0.259,0.4],"y":[0,0,0]},"t":24,"s":[40,40,100]},{"i":{"x":[0.501,0.501,0.5],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":60,"s":[26,26,100]},{"t":92,"s":[30,30,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[382,382]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.839,0.471,0.65,1,0.839,0.471,1,1,0.839,0.471,0,1,0.65,0.5,1,0]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[177,0]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_FPIvVktlvg","hd":false},{"ty":"tr","p":{"a":0,"k":[-97,-19]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":24,"op":91,"st":20,"bm":0},{"ddd":0,"ind":52,"ty":4,"nm":"Shape Layer 7","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":16,"s":[90]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":36,"s":[45]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":61,"s":[80]},{"t":82,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[371.5,286,0],"to":[0,0,0],"ti":[-13,-9,0]},{"t":82,"s":[423,310.5,0]}]},"a":{"a":0,"k":[-97,-19,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,3.704]},"t":16,"s":[20,20,100]},{"t":81,"s":[40,40,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[382,382]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.95,0.658,0.65,1,0.95,0.658,1,1,0.949,0.659,0,1,0.65,0.5,1,0]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[177,0]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_iRgF43tCuP","hd":false},{"ty":"tr","p":{"a":0,"k":[-97,-19]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Ellipse 1","bm":0,"hd":false}],"ip":16,"op":82,"st":12,"bm":0}]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/star_reaction_effect4.json b/TMessagesProj/src/main/res/raw/star_reaction_effect4.json new file mode 100644 index 00000000000..cc6b8713dee --- /dev/null +++ b/TMessagesProj/src/main/res/raw/star_reaction_effect4.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":0,"op":90,"w":512,"h":512,"nm":"Reaction 512x512","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"salut1","sr":1,"ks":{"p":{"a":0,"k":[107.116,114.024,0]},"a":{"a":0,"k":[47.333,109.333,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-42.063,2.3],[48.832,0.352],[-67.878,7.615],[138.212,-10.086],[-137.056,-4.451],[129.387,-9.659]],"o":[[45.363,-2.481],[-71.38,-0.515],[119.193,-13.373],[-135.982,9.923],[143.545,4.662],[-219.408,16.379]],"v":[[53.991,99.63],[38.276,134.655],[47.561,67.658],[47.754,171.063],[51.585,29.122],[58.054,203.981]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":13,"s":[6]},{"t":40,"s":[0]}]},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":1}},{"n":"g","nm":"gap","v":{"a":0,"k":42}},{"n":"d","nm":"dash2","v":{"a":0,"k":1}},{"n":"g","nm":"gap2","v":{"a":0,"k":34}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":7,"s":[12.95],"h":1},{"t":14,"s":[25.9],"h":1},{"t":21,"s":[38.85],"h":1},{"t":27,"s":[49.95],"h":1},{"t":33,"s":[61.05],"h":1},{"t":40,"s":[74],"h":1}]}}],"nm":"Stroke 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.917647118662,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":13,"s":[12]},{"t":40,"s":[0]}]},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":1}},{"n":"g","nm":"gap","v":{"a":0,"k":42}},{"n":"d","nm":"dash2","v":{"a":0,"k":1}},{"n":"g","nm":"gap2","v":{"a":0,"k":34}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":7,"s":[12.95],"h":1},{"t":14,"s":[25.9],"h":1},{"t":21,"s":[38.85],"h":1},{"t":27,"s":[49.95],"h":1},{"t":33,"s":[61.05],"h":1},{"t":40,"s":[74],"h":1}]}}],"nm":"Stroke 2","hd":false},{"ty":"tr","p":{"a":0,"k":[48.25,102]},"a":{"a":0,"k":[48.25,102]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":0,"s":[0,0]},{"t":40,"s":[100,100]}]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"t":4,"s":[100],"h":1},{"t":7,"s":[0],"h":1},{"t":10,"s":[100],"h":1},{"t":13,"s":[0],"h":1},{"t":16,"s":[100],"h":1},{"t":19,"s":[0],"h":1},{"t":22,"s":[100],"h":1},{"t":25,"s":[0],"h":1},{"t":28,"s":[100],"h":1},{"t":31,"s":[0],"h":1},{"t":34,"s":[100],"h":1},{"t":37,"s":[0],"h":1},{"t":40,"s":[100],"h":1}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.593,-36.693],[-4.029,42.276],[-0.245,-59.628],[4.888,120.803],[0.491,-177.799],[-36.29,102.441]],"o":[[-1.718,39.571],[5.889,-61.796],[0.431,104.705],[-3.895,-96.273],[-0.491,177.799],[64.093,-180.927]],"v":[[54.715,106.138],[30.668,88.792],[78.271,103.97],[-13.762,90.564],[113.96,113.61],[-31.633,90.342]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":13,"s":[6]},{"t":40,"s":[0]}]},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":1}},{"n":"g","nm":"gap","v":{"a":0,"k":42}},{"n":"d","nm":"dash2","v":{"a":0,"k":1}},{"n":"g","nm":"gap2","v":{"a":0,"k":34}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":7,"s":[12.95],"h":1},{"t":14,"s":[25.9],"h":1},{"t":21,"s":[38.85],"h":1},{"t":27,"s":[49.95],"h":1},{"t":33,"s":[61.05],"h":1},{"t":40,"s":[74],"h":1}]}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[48.25,102]},"a":{"a":0,"k":[48.25,102]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":0,"s":[0,0]},{"t":40,"s":[100,100]}]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"t":2,"s":[100],"h":1},{"t":5,"s":[0],"h":1},{"t":8,"s":[100],"h":1},{"t":11,"s":[0],"h":1},{"t":14,"s":[100],"h":1},{"t":17,"s":[0],"h":1},{"t":20,"s":[100],"h":1},{"t":23,"s":[0],"h":1},{"t":26,"s":[100],"h":1},{"t":29,"s":[0],"h":1},{"t":32,"s":[100],"h":1},{"t":35,"s":[0],"h":1},{"t":38,"s":[100],"h":1},{"t":41,"s":[0],"h":1}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-25.333,1.82],[29.212,-4.9],[-41.137,-0.662],[83.378,3.528],[-122.678,-0.413],[132.348,6.765]],"o":[[27.321,-1.963],[-42.7,7.162],[72.236,1.163],[-111.49,-4.718],[122.678,0.413],[-132.349,-6.765]],"v":[[52.263,114.241],[40.555,83.417],[50.512,144.324],[43.84,48.958],[55.45,179.48],[47.845,17.64]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":13,"s":[6]},{"t":40,"s":[0]}]},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":1}},{"n":"g","nm":"gap","v":{"a":0,"k":42}},{"n":"d","nm":"dash2","v":{"a":0,"k":1}},{"n":"g","nm":"gap2","v":{"a":0,"k":34}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":7,"s":[12.95],"h":1},{"t":14,"s":[25.9],"h":1},{"t":21,"s":[38.85],"h":1},{"t":27,"s":[49.95],"h":1},{"t":33,"s":[61.05],"h":1},{"t":40,"s":[74],"h":1}]}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[48.25,102]},"a":{"a":0,"k":[48.25,102]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":0,"s":[0,0]},{"t":40,"s":[100,100]}]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"t":0,"s":[100],"h":1},{"t":3,"s":[0],"h":1},{"t":6,"s":[100],"h":1},{"t":9,"s":[0],"h":1},{"t":12,"s":[100],"h":1},{"t":15,"s":[0],"h":1},{"t":18,"s":[100],"h":1},{"t":21,"s":[0],"h":1},{"t":24,"s":[100],"h":1},{"t":27,"s":[0],"h":1},{"t":30,"s":[100],"h":1},{"t":33,"s":[0],"h":1},{"t":36,"s":[100],"h":1},{"t":39,"s":[0],"h":1},{"t":42,"s":[100],"h":1}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.623,-16.922],[4.105,19.497],[0.25,-27.5],[-2.25,55.75],[-0.5,-82],[-4.5,88.5]],"o":[[1.75,18.25],[-6,-28.5],[-0.439,48.289],[3.009,-74.547],[0.5,82],[4.5,-88.5]],"v":[[39.5,110],[64,102],[15.5,109],[91.5,104],[-12.5,112.5],[116.5,106.5]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":13,"s":[6]},{"t":40,"s":[0]}]},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":1}},{"n":"g","nm":"gap","v":{"a":0,"k":42}},{"n":"d","nm":"dash2","v":{"a":0,"k":1}},{"n":"g","nm":"gap2","v":{"a":0,"k":34}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":7,"s":[12.95],"h":1},{"t":14,"s":[25.9],"h":1},{"t":21,"s":[38.85],"h":1},{"t":27,"s":[49.95],"h":1},{"t":33,"s":[61.05],"h":1},{"t":40,"s":[74],"h":1}]}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[48.25,102]},"a":{"a":0,"k":[48.25,102]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":0,"s":[0,0]},{"t":40,"s":[100,100]}]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"t":-2,"s":[100],"h":1},{"t":1,"s":[0],"h":1},{"t":4,"s":[100],"h":1},{"t":7,"s":[0],"h":1},{"t":10,"s":[100],"h":1},{"t":13,"s":[0],"h":1},{"t":16,"s":[100],"h":1},{"t":19,"s":[0],"h":1},{"t":22,"s":[100],"h":1},{"t":25,"s":[0],"h":1},{"t":28,"s":[100],"h":1},{"t":31,"s":[0],"h":1},{"t":34,"s":[100],"h":1},{"t":37,"s":[0],"h":1},{"t":40,"s":[100],"h":1}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[49.5,106.5]},"a":{"a":0,"k":[49.5,106.5]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[83,-32.75]],"o":[[0,0],[-83,32.75]],"v":[[-148.75,-152],[-249.5,-219.25]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[113.75,30.25]],"o":[[0,0],[-113.75,-30.25]],"v":[[-148.75,-152],[-245.25,-281.25]],"c":false}},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-118,-21]],"o":[[0,0],[118,21]],"v":[[-148.75,-152],[17.5,-220.5]],"c":false}},"nm":"Path 3","hd":false},{"ind":3,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-9.75,-183]],"o":[[0,0],[9.75,183]],"v":[[-148.75,-152],[-67.25,33.5]],"c":false}},"nm":"Path 4","hd":false},{"ind":4,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-72.25,-202.75]],"o":[[0,0],[72.25,202.75]],"v":[[-148.75,-152],[34.75,-48.75]],"c":false}},"nm":"Path 5","hd":false},{"ind":5,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[78.5,-147.25]],"o":[[0,0],[-78.5,147.25]],"v":[[-148.75,-152],[-319,-93.25]],"c":false}},"nm":"Path 6","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.077],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[0]},{"t":30,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"t":19,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[10]},{"t":30,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.949019129136,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[24]},{"t":30,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-43.781,-147.331]],"o":[[0,0],[39.51,132.957]],"v":[[-144.361,-155.071],[-29.543,-57.342]],"c":false}},"nm":"Path 12","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-154.103,-108.094]],"o":[[0,0],[154.103,108.094]],"v":[[-144.361,-155.071],[93.19,-146.235]],"c":false}},"nm":"Path 11","hd":false},{"ind":2,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-41.582,87.11]],"o":[[0,0],[64.633,-135.401]],"v":[[-147.441,-169.915],[-122.418,-361.11]],"c":false}},"nm":"Path 10","hd":false},{"ind":3,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[15.453,-198.051]],"o":[[0,0],[-15.453,198.051]],"v":[[-149.059,-155.201],[-253.023,-1.49]],"c":false}},"nm":"Path 9","hd":false},{"ind":4,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[39.907,-333.853]],"o":[[0,0],[-25.542,213.68]],"v":[[-149.066,-167.184],[-285.907,-50.147]],"c":false}},"nm":"Path 8","hd":false},{"ind":5,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-129.719,-169.197]],"o":[[0,0],[129.719,169.197]],"v":[[-147.059,-154.201],[97.422,-193.87]],"c":false}},"nm":"Path 7","hd":false},{"ind":6,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-93.91,-67.25]],"o":[[0,0],[84.748,60.689]],"v":[[-148.327,-152.5],[-30.59,-211.75]],"c":false}},"nm":"Path 1","hd":false},{"ind":7,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-135.621,30.25]],"o":[[0,0],[135.621,-30.25]],"v":[[-148.327,-152.5],[-14.197,-301.75]],"c":false}},"nm":"Path 2","hd":false},{"ind":8,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[140.688,-21]],"o":[[0,0],[-140.688,21]],"v":[[-148.327,-152.5],[-295.87,-242]],"c":false}},"nm":"Path 3","hd":false},{"ind":9,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[11.625,-183]],"o":[[0,0],[-11.625,183]],"v":[[-148.327,-152.5],[-190.767,43]],"c":false}},"nm":"Path 4","hd":false},{"ind":10,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[107.609,-170.75]],"o":[[0,0],[-117.451,186.368]],"v":[[-148.327,-152.5],[-363.609,-126.25]],"c":false}},"nm":"Path 5","hd":false},{"ind":11,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-93.593,-147.25]],"o":[[0,0],[93.593,147.25]],"v":[[-148.327,-152.5],[54.657,-93.75]],"c":false}},"nm":"Path 6","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.077],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":2.4,"s":[0]},{"t":24,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"t":24,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[10]},{"t":24,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.854901432991,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[24]},{"t":24,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[50,98.125]},"a":{"a":0,"k":[-144,-171]},"s":{"a":0,"k":[40,40]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"2","bm":0,"hd":false}],"ip":0,"op":41,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"slap1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[100]},{"t":5,"s":[0]}]},"r":{"a":0,"k":-17},"p":{"a":0,"k":[138.288,117.395,0]},"s":{"a":0,"k":[78,269,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":1,"y":1},"o":{"x":0.5,"y":0},"t":-5,"s":[{"i":[[0.086,0.008],[0.106,-0.04],[-0.086,-0.043],[-0.099,-0.003],[0.003,0],[0,-0.001],[0.004,-0.001],[0,0]],"o":[[0.066,0.005],[0.11,-0.03],[-0.036,-0.051],[-0.077,-0.005],[-0.003,0],[-0.001,-0.001],[0.003,-0.001],[0,0]],"v":[[0.25,-5.53],[0.29,-5.448],[0.618,-5.424],[0.812,-5.493],[0.536,-5.51],[0.53,-5.509],[0.522,-5.509],[0.52,-5.512]],"c":true}]},{"i":{"x":1,"y":1},"o":{"x":0,"y":0},"t":0.834,"s":[{"i":[[34.792,3.333],[42.708,-16.042],[-34.583,-17.5],[-40,-1.25],[14.375,1.042],[-1.25,-7.292],[20.833,-5],[0,0]],"o":[[26.875,1.875],[44.375,-12.292],[-14.583,-20.625],[-31.042,-1.875],[-14.375,-1.042],[-2.917,-4.583],[17.5,-7.708],[0,0]],"v":[[-108.5,-12.292],[-92.25,21.042],[40.458,30.833],[119,2.917],[46.708,-2.292],[14.208,7.708],[-32.25,3.958],[-43.292,-8.125]],"c":true}]},{"t":5,"s":[{"i":[[15.548,1.562],[60.86,-22.86],[-63.456,-31.565],[-57.001,-1.781],[-0.307,0.024],[-20.66,-32.013],[35.33,-10.202],[27.637,2.538]],"o":[[40.027,3.281],[46.018,-13.493],[-20.781,-29.391],[-13.57,-0.935],[-45.973,-1.523],[-76.159,-36.513],[64.079,-27.616],[0,0]],"v":[[-158.422,-16.254],[-135.266,31.246],[59.206,48.353],[169.553,5.102],[169.057,5.226],[59.159,48.263],[-134.329,31.616],[-155.452,-16.009]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":1,"y":1},"o":{"x":0.5,"y":0},"t":-5,"s":[{"i":[[0.048,0.023],[0,0],[-0.001,0],[0,0.002],[-0.003,0.001],[0,0],[-0.135,-0.006],[-0.029,0.02]],"o":[[-0.01,0.049],[0,0],[0.001,0],[0.001,0.001],[-0.002,0.001],[0,0],[-0.152,-0.02],[-0.056,0.012]],"v":[[0.452,-5.576],[0.254,-5.53],[0.519,-5.511],[0.526,-5.513],[0.533,-5.512],[0.536,-5.51],[0.81,-5.493],[0.693,-5.561]],"c":true}]},{"i":{"x":1,"y":1},"o":{"x":0,"y":0},"t":0.834,"s":[{"i":[[19.583,9.375],[0,0],[-7.5,0],[-1.042,8.958],[-18.75,3.542],[0,0],[-54.792,-2.292],[-11.667,8.125]],"o":[[-3.958,20],[0,0],[7.5,0],[2.917,3.333],[-12.708,6.042],[0,0],[-61.667,-7.917],[-22.5,4.792]],"v":[[-26.833,-30.833],[-106.833,-12.292],[-45.375,-7.292],[-10.167,-16.458],[30.875,-13.125],[44.208,-2.292],[117.958,2.917],[70.667,-24.583]],"c":true}]},{"t":5,"s":[{"i":[[31.823,13.773],[0,0],[-3.324,0],[-4.216,27.342],[-48.682,11.091],[-0.049,0.422],[-0.193,-0.102],[-16.421,12.286]],"o":[[-4.153,27.469],[-0.087,0.243],[3.324,0],[18.784,9.592],[-39.432,28.091],[-0.049,0.672],[-86.943,-10.852],[-31.786,8.128]],"v":[[-37.789,-41.73],[-156.047,-16.254],[-155.346,-15.767],[-37.534,-41.842],[96.932,-33.841],[168.049,5.078],[168.068,5.102],[96.893,-33.77]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false}],"ip":0,"op":6,"st":-5,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"p":{"a":0,"k":[329.25,83.375,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[53.5,53.5,100]},{"t":30,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-58.975,-102.584],[-37.504,-34.797],[-188.473,-26.813],[-47.945,6.824],[-113.55,144.63],[-7.378,50.769],[97.604,175],[50.088,17.249],[185.223,-5.048],[64.082,-30.632],[104.695,-103.745],[13.441,-54.817]],"c":true}]},{"t":29,"s":[{"i":[[2.33,0.388],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-2.33,-0.388],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-48.583,-112.612],[-28.004,-30.297],[-118.473,-19.813],[-29.945,-1.176],[-69.55,51.63],[-2.378,33.769],[44.604,99],[55.087,11.249],[110.223,-12.048],[58.582,-29.132],[80.714,-102.128],[6.941,-52.817]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.88627355239,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":20},"lc":1,"lj":1,"ml":49,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":27,"op":30,"st":19,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 13","sr":1,"ks":{"p":{"a":0,"k":[346.5,342,0]},"s":{"a":0,"k":[84,84,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-51.858,56.592],[-9.5,-155.695]],"o":[[141.551,-154.471],[12.271,201.104]],"v":[[24.079,-294.777],[142.429,35.355]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[40.023,65.563],[-17.149,-255.856]],"o":[[-59.828,-98.008],[14.998,223.759]],"v":[[24.709,-294.254],[-114.398,135.618]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":30,"s":[1,0.487581849098,0.776947379112,1],"h":1},{"t":31,"s":[1,1,1,1],"h":1},{"t":33,"s":[1,0.487581849098,0.776947379112,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":38.824,"s":[18]},{"t":66,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-51.858,56.592],[-14.718,-212.079]],"o":[[141.551,-154.471],[19.011,273.933]],"v":[[24.079,-294.777],[322.241,111.166]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-33.04,69.344],[-84.136,-282.967]],"o":[[34.136,-71.646],[78.377,263.599]],"v":[[24.709,-294.254],[282.35,-167.033]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":32,"s":[1,0.854901432991,0,1],"h":1},{"t":33,"s":[1,1,1,1],"h":1},{"t":35,"s":[1,0.854901432991,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":36.646,"s":[18]},{"t":63.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-81.315,2.253],[-9.5,-173.5]],"o":[[73.249,-2.029],[12.271,224.102]],"v":[[24.079,-294.777],[98.381,64.524]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-53.011,55.074],[-43.537,-232.859]],"o":[[96.142,-99.884],[50.704,271.193]],"v":[[24.709,-294.254],[369.282,160.439]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":34,"s":[1,0.603920638561,0,1],"h":1},{"t":35,"s":[1,1,1,1],"h":1},{"t":37,"s":[1,0.603920638561,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":38.824,"s":[18]},{"t":66,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-53.516,55.066],[-58.845,-395.913]],"o":[[95.366,-98.129],[40.333,271.363]],"v":[[24.079,-294.777],[368.964,49.485]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-42.478,63.553],[-56.154,-232.543]],"o":[[73.715,-110.289],[57.312,237.34]],"v":[[24.709,-294.254],[237.107,111.71]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":36,"s":[0,0.760785162449,1,1],"h":1},{"t":37,"s":[1,1,1,1],"h":1},{"t":39,"s":[0,0.760785162449,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":36.646,"s":[18]},{"t":63.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-61.433,46.635],[-219.553,-184.895]],"o":[[91.504,-69.463],[209.541,176.463]],"v":[[24.079,-294.777],[378.482,-268.676]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-61.175,53.034],[14.657,-352.039]],"o":[[113.445,-98.347],[-11.396,273.71]],"v":[[24.709,-294.254],[32.515,124.092]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":38,"s":[1,0.487581849098,0.776947379112,1],"h":1},{"t":39,"s":[1,1,1,1],"h":1},{"t":41,"s":[1,0.487581849098,0.776947379112,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":38.824,"s":[18]},{"t":66,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-49.442,58.691],[-8.905,-156.364]],"o":[[103.455,-122.808],[11.461,201.242]],"v":[[24.079,-294.776],[55.333,140.888]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-52.118,61.957],[14.658,-352.039]],"o":[[80.432,-95.616],[-11.396,273.711]],"v":[[24.709,-294.254],[13.549,66.661]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":40,"s":[1,0.273202955723,0.592423915863,1],"h":1},{"t":41,"s":[1,1,1,1],"h":1},{"t":43,"s":[1,0.273202955723,0.592423915863,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":36.646,"s":[18]},{"t":63.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[-100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[18.516,74.492],[13.422,-333.479]],"o":[[-26.303,-105.821],[-9.897,245.881]],"v":[[-18.34,-299.536],[109.792,-156.997]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[62.033,45.301],[53.255,-408.833]],"o":[[-64.092,-46.805],[-28.968,222.383]],"v":[[-17.71,-300.058],[-247.898,6.452]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":42,"s":[1,0.854901432991,0,1],"h":1},{"t":43,"s":[1,1,1,1],"h":1},{"t":45,"s":[1,0.854901432991,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":38.824,"s":[18]},{"t":66,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[45.766,61.623],[71.756,-200.146]],"o":[[-114.398,-154.036],[-83.048,231.644]],"v":[[-18.34,-299.536],[-349.137,-188.545]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[62.033,45.302],[11.898,-405.5]],"o":[[-64.092,-46.805],[-6.577,224.165]],"v":[[-17.71,-300.058],[-175.874,135.023]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":44,"s":[1,0.854901432991,0,1],"h":1},{"t":45,"s":[1,1,1,1],"h":1},{"t":47,"s":[1,0.854901432991,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":36.646,"s":[18]},{"t":63.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[62.004,52.656],[12.759,-250.824]],"o":[[-53.196,-45.176],[-13.928,273.814]],"v":[[-18.34,-299.536],[178.313,-89.653]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[54.595,53.504],[-0.911,-288.004]],"o":[[-94.743,-92.851],[0.641,202.472]],"v":[[-17.71,-300.058],[-131.827,130.861]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":46,"s":[0,0.760785162449,1,1],"h":1},{"t":47,"s":[1,1,1,1],"h":1},{"t":49,"s":[0,0.760785162449,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":38.824,"s":[18]},{"t":66,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[71.302,39.158],[-8.758,-212.08]],"o":[[-55.945,-30.725],[11.313,273.933]],"v":[[-18.34,-299.536],[178.313,-89.653]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[12.337,75.439],[-25.173,-403.476]],"o":[[-28.123,-171.965],[13.965,223.826]],"v":[[-17.71,-300.058],[53.149,83.238]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":48,"s":[0,0.760785162449,1,1],"h":1},{"t":49,"s":[1,1,1,1],"h":1},{"t":51,"s":[0,0.760785162449,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":36.646,"s":[18]},{"t":63.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[66.329,43.928],[-11.985,-199.245]],"o":[[-104.53,-69.227],[16.45,273.474]],"v":[[-18.34,-299.536],[32.325,142.858]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[80.936,2.087],[-29.792,-379.643]],"o":[[-83.014,-2.141],[17.545,223.574]],"v":[[-17.71,-300.058],[155.387,-114.405]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"t":66,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":50,"s":[1,0.273202955723,0.592423915863,1],"h":1},{"t":51,"s":[1,1,1,1],"h":1},{"t":53,"s":[1,0.273202955723,0.592423915863,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":38.824,"s":[18]},{"t":66,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-15.996,75.451],[14.578,-355.139]],"o":[[23.697,-111.774],[-11.236,273.716]],"v":[[-18.34,-299.536],[69.351,148.591]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[80.936,2.087],[15.898,-288]],"o":[[-83.014,-2.141],[-12.361,223.92]],"v":[[-17.71,-300.058],[155.387,-114.405]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"t":63.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":52,"s":[1,0.273202955723,0.592423915863,1],"h":1},{"t":53,"s":[1,1,1,1],"h":1},{"t":55,"s":[1,0.273202955723,0.592423915863,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":36.646,"s":[18]},{"t":63.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"1","bm":0,"hd":false}],"ip":27,"op":66,"st":22,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"con3","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.592],"y":[-0.45]},"o":{"x":[0.235],"y":[0.539]},"t":6,"s":[254.562]},{"i":{"x":[0.839],"y":[0.885]},"o":{"x":[0.36],"y":[0.25]},"t":9,"s":[266.189]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[1],"y":[0]},"t":17,"s":[424.562]},{"t":26.08203125,"s":[302]}]},"p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":6,"s":[227,278.5,0],"to":[-345.667,104.833,0],"ti":[-250.833,-189.333,0]},{"t":26.08203125,"s":[373,112.5,0]}]},"a":{"a":0,"k":[512,512,0]},"s":{"a":1,"k":[{"i":{"x":[0.125,0.125,0.125],"y":[-0.082,0.536,1]},"o":{"x":[0.27,0.27,0.27],"y":[0.59,0.253,0]},"t":6,"s":[0,0,100]},{"i":{"x":[0.559,0.559,0.559],"y":[1,1,1]},"o":{"x":[0.238,0.238,0.238],"y":[0.127,2.076,0]},"t":12,"s":[30.409,70.909,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":17,"s":[89,74.5,100]},{"i":{"x":[0.657,0.657,0.657],"y":[1.105,1.105,1]},"o":{"x":[0.323,0.323,0.323],"y":[0,0,0]},"t":26.082,"s":[73.996,73.996,100]},{"i":{"x":[0.656,0.656,0.656],"y":[1.126,0.886,1]},"o":{"x":[0.32,0.32,0.32],"y":[-0.046,0.042,0]},"t":26.805,"s":[80.457,80.458,100]},{"i":{"x":[0.67,0.67,0.67],"y":[0.741,1.569,1]},"o":{"x":[0.328,0.328,0.328],"y":[0.09,-0.198,0]},"t":28.252,"s":[107.749,50.25,100]},{"i":{"x":[0.657,0.657,0.657],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":31.143,"s":[35.423,83.226,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.32,0.32,0.32],"y":[0,0,0]},"t":36.082,"s":[20.957,20.958,100]},{"t":39,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-28.92],[0,28.92]],"o":[[0,28.92],[0,-28.92]],"v":[[52.365,-1.276],[-52.365,-1.276]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.305882364511,0,0.447058826685,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":37,"s":[0.890196084976,0.890196084976,0.890196084976,1]},{"t":39,"s":[0.660035133362,0.764959335327,0.903267920017,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[512,462.867]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-9.701,-8.422],[0,0]],"o":[[0,0],[-13.368,-3.712]],"v":[[1.904,9.371],[12.123,-12.997]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[523.179,534.386]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[12.035,-0.992],[0,0]],"o":[[0,0],[7.467,-8.453]],"v":[[-5.326,-0.327],[4.586,20.584]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[502.626,540.301]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[5.637,-0.698],[-5.944,2.009],[0,0]],"o":[[1.758,15.656],[3.476,-8.479],[-10.07,5.228]],"v":[[-9.485,1.423],[10.246,17.141],[21.092,-6.537]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[533.915,483.855]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-2.137,-12.885],[1.619,12.043]],"o":[[2.115,12.753],[-1.619,-12.043]],"v":[[-8.545,1.67],[8.613,-1.697]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[513.302,506.818]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[16.362,0.218],[0,0]],"o":[[0,0],[8.806,-7.597]],"v":[[-13.94,-8.969],[-2.569,16.518]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[488.8,499.198]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[52.365,-58.796],[0,57.52],[-52.365,-58.796]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.305882364511,0,0.447058826685,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0.501960813999,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[512,520.387]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false}],"ip":6,"op":39,"st":-28,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"r":{"a":0,"k":-186},"p":{"a":0,"k":[382.75,368.375,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":26,"s":[42,42,100]},{"t":27,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-64.583,-173.612],[-37.504,-34.797],[-188.473,-26.813],[-47.945,6.824],[-113.55,144.63],[-7.378,50.769],[97.604,175],[50.088,17.249],[185.223,-5.048],[64.082,-30.632],[118.714,-141.128],[13.441,-54.817]],"c":true}]},{"t":26,"s":[{"i":[[2.33,0.388],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-2.33,-0.388],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-48.583,-112.612],[-28.004,-30.297],[-118.473,-19.813],[-29.945,-1.176],[-69.55,51.63],[-2.378,33.769],[44.604,99],[55.087,11.249],[110.223,-12.048],[58.582,-29.132],[80.714,-102.128],[6.941,-52.817]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.88627355239,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":20},"lc":1,"lj":1,"ml":49,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":24,"op":27,"st":16,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 12","sr":1,"ks":{"p":{"a":0,"k":[309,286.5,0]},"s":{"a":0,"k":[-84,84,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.888,65.039],[-9.5,-155.695]],"o":[[3.98,-291.593],[12.271,201.104]],"v":[[137.092,178.497],[166.238,-1.55]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[43.635,50.844],[11.898,-405.5]],"o":[[-45.083,-52.531],[-6.577,224.165]],"v":[[138.016,178.147],[-43.565,169.547]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":27,"s":[1,0.487581849098,0.776947379112,1],"h":1},{"t":28,"s":[1,1,1,1],"h":1},{"t":30,"s":[1,0.487581849098,0.776947379112,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":35.824,"s":[18]},{"t":63,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[18.762,62.281],[-9.5,-173.5]],"o":[[-51.212,-170],[12.271,224.102]],"v":[[137.092,178.497],[-124.667,167.048]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[43.635,50.844],[11.898,-405.5]],"o":[[-45.083,-52.531],[-6.577,224.165]],"v":[[138.016,178.146],[-213.565,222.547]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":29,"s":[1,0.854901432991,0,1],"h":1},{"t":30,"s":[1,1,1,1],"h":1},{"t":32,"s":[1,0.854901432991,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":33.646,"s":[18]},{"t":60.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[29.762,81.394],[-9.5,-173.5]],"o":[[-33.419,-91.396],[12.271,224.102]],"v":[[137.092,178.497],[63.857,150.833]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[31.735,56.782],[-28.102,-190.5]],"o":[[-55.073,-98.539],[32.728,221.861]],"v":[[138.016,178.147],[-136.565,125.548]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":31,"s":[1,0.603920638561,0,1],"h":1},{"t":32,"s":[1,1,1,1],"h":1},{"t":34,"s":[1,0.603920638561,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":35.824,"s":[18]},{"t":63,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[16.188,63.153],[-0.5,-126]],"o":[[-28.848,-112.54],[0.891,224.436]],"v":[[137.092,178.497],[-90.667,174.047]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[31.735,56.782],[50.898,-197.872]],"o":[[-55.073,-98.539],[-50.44,196.091]],"v":[[138.016,178.147],[-188.66,-14.113]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":33,"s":[0,0.760785162449,1,1],"h":1},{"t":34,"s":[1,1,1,1],"h":1},{"t":36,"s":[0,0.760785162449,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":33.646,"s":[18]},{"t":60.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.807,66.937],[-25,-304]],"o":[[-4.18,-99.702],[18.395,223.683]],"v":[[137.092,178.498],[-256.667,177.047]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[84.812,16.008],[60.232,-390.024]],"o":[[-86.99,-16.42],[-34.227,221.633]],"v":[[138.016,178.147],[-318.565,62.048]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":35,"s":[1,0.487581849098,0.776947379112,1],"h":1},{"t":36,"s":[1,1,1,1],"h":1},{"t":38,"s":[1,0.487581849098,0.776947379112,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":35.824,"s":[18]},{"t":63,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0.94,64.943],[-8.905,-156.364]],"o":[[-1.973,-136.236],[11.461,201.243]],"v":[[137.092,178.497],[134.5,-21.612]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[84.812,16.008],[15.898,-288]],"o":[[-86.99,-16.42],[-12.361,223.92]],"v":[[138.016,178.147],[-305.565,165.047]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":37,"s":[1,0.273202955723,0.592423915863,1],"h":1},{"t":38,"s":[1,1,1,1],"h":1},{"t":40,"s":[1,0.273202955723,0.592423915863,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":33.646,"s":[18]},{"t":60.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[-100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.916,64.562],[-9.5,-155.695]],"o":[[41.179,-335.86],[12.271,201.104]],"v":[[-128.679,181.694],[248.857,15.009]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.131,66.991],[11.898,-405.5]],"o":[[1.168,-69.214],[-6.577,224.165]],"v":[[-127.755,182.044],[-38.374,250.5]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":39,"s":[1,0.854901432991,0,1],"h":1},{"t":40,"s":[1,1,1,1],"h":1},{"t":42,"s":[1,0.854901432991,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":35.824,"s":[18]},{"t":63,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.899,64.861],[-9.5,-155.695]],"o":[[34.631,-458.479],[12.271,201.104]],"v":[[-128.679,181.694],[160.762,-23.087]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.131,66.991],[11.898,-405.5]],"o":[[1.168,-69.214],[-6.577,224.165]],"v":[[-127.755,182.045],[-97.898,225.5]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":41,"s":[1,0.854901432991,0,1],"h":1},{"t":42,"s":[1,1,1,1],"h":1},{"t":44,"s":[1,0.854901432991,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":33.646,"s":[18]},{"t":60.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-85.133,16.221],[-65.5,-231.476]],"o":[[76.688,-14.612],[61.109,215.958]],"v":[[-128.679,181.694],[359.548,63.619]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.972,63.53],[50.898,-197.872]],"o":[[24.246,-110.25],[-50.44,196.091]],"v":[[-127.755,182.045],[-205.636,-36.996]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":43,"s":[0,0.760785162449,1,1],"h":1},{"t":44,"s":[1,1,1,1],"h":1},{"t":46,"s":[0,0.760785162449,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":35.824,"s":[18]},{"t":63,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-85.133,16.221],[-9.5,-173.5]],"o":[[76.688,-14.612],[12.271,224.102]],"v":[[-128.679,181.694],[244.667,172.547]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.972,63.53],[50.898,-220.5]],"o":[[24.246,-110.25],[-50.44,218.515]],"v":[[-127.755,182.045],[-182.565,198.119]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":45,"s":[0,0.760785162449,1,1],"h":1},{"t":46,"s":[1,1,1,1],"h":1},{"t":48,"s":[0,0.760785162449,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":33.646,"s":[18]},{"t":60.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-72.83,30.077],[-13,-163]],"o":[[60.268,-24.889],[17.843,223.727]],"v":[[-128.679,181.694],[319.167,146.547]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[52.79,68.284],[15.898,-288]],"o":[[-54.145,-70.037],[-12.361,223.92]],"v":[[-127.755,182.045],[-194.017,89.167]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"t":63,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":47,"s":[1,0.273202955723,0.592423915863,1],"h":1},{"t":48,"s":[1,1,1,1],"h":1},{"t":50,"s":[1,0.273202955723,0.592423915863,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":24.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":35.824,"s":[18]},{"t":63,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-42.346,51.916],[-25,-304]],"o":[[63.074,-77.328],[18.395,223.683]],"v":[[-128.679,181.694],[338.667,121.047]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[52.79,68.284],[15.898,-288]],"o":[[-54.145,-70.037],[-12.361,223.92]],"v":[[-127.755,182.045],[-183.898,185]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"t":60.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":49,"s":[1,0.273202955723,0.592423915863,1],"h":1},{"t":50,"s":[1,1,1,1],"h":1},{"t":52,"s":[1,0.273202955723,0.592423915863,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":33.646,"s":[18]},{"t":60.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"1","bm":0,"hd":false}],"ip":24,"op":63,"st":19,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"con2","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.424],"y":[0.027]},"t":3,"s":[52]},{"i":{"x":[0.565],"y":[1.325]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[181.408]},{"t":23.08203125,"s":[336.228]}]},"p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":3,"s":[271,250,0],"to":[202.485,-142.785,0],"ti":[89.277,-55.997,0]},{"t":23.08203125,"s":[400.5,414.5,0]}]},"a":{"a":0,"k":[512,512,0]},"s":{"a":1,"k":[{"i":{"x":[0,0,0],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":3,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.307,0.307,0.307],"y":[0,0,0]},"t":12.045,"s":[92,92,100]},{"i":{"x":[0.657,0.657,0.657],"y":[1.105,1.105,1]},"o":{"x":[0.323,0.323,0.323],"y":[0,0,0]},"t":23.082,"s":[70.997,70.997,100]},{"i":{"x":[0.656,0.656,0.656],"y":[1.126,0.887,1]},"o":{"x":[0.32,0.32,0.32],"y":[-0.046,0.042,0]},"t":23.807,"s":[77.459,77.459,100]},{"i":{"x":[0.67,0.67,0.67],"y":[0.74,1.569,1]},"o":{"x":[0.328,0.328,0.328],"y":[0.09,-0.198,0]},"t":25.252,"s":[104.75,47.25,100]},{"i":{"x":[0.657,0.657,0.657],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":28.145,"s":[32.424,80.227,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.32,0.32,0.32],"y":[0,0,0]},"t":33.082,"s":[17.959,17.959,100]},{"t":36,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-28.398],[0,28.398]],"o":[[0,28.398],[0,-28.398]],"v":[[51.42,-2.219],[-51.42,-2.219]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.549019634724,0,0.105882354081,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[0.890196084976,0.890196084976,0.890196084976,1]},{"t":34,"s":[0.660035133362,0.764959335327,0.903267920017,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[512,462.867]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-17.698,-2.763],[0,0],[5.321,9.711]],"o":[[0,0],[-2.072,5.698],[0,0],[-3.707,-10.587]],"v":[[-18.406,-16.397],[16.346,3.608],[10.158,17.686],[-7.431,8.336]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[508.607,540.326]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[21.046,2.412],[0,0],[0,0],[0,0]],"o":[[20.873,16.916],[0,0],[0,0],[0,0]],"v":[[-24.813,-4.336],[21.168,13.551],[28.331,-2.991],[8.886,-5.177]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[522.419,487.75]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[21.813,23.677],[0,0],[-31.424,-4.662],[0,0]],"o":[[0,0],[0,0],[2.849,-6.993],[-23.05,-2.849]],"v":[[-35.3,-23.8],[-25.36,-0.869],[23.042,27.59],[31.2,9.677]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[507.009,504.323]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[51.42,-59.739],[0,57.52],[-51.42,-59.739]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.549019634724,0,0.105882354081,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.760784327984,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[512,520.387]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false}],"ip":3,"op":36,"st":-31,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Shape Layer 6","sr":1,"ks":{"r":{"a":0,"k":189},"p":{"a":0,"k":[120.75,295.875,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23,"s":[48.5,48.5,100]},{"t":24,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-64.583,-173.612],[-37.504,-34.797],[-188.473,-26.813],[-47.945,6.824],[-113.55,144.63],[-7.378,50.769],[97.604,175],[50.088,17.249],[185.223,-5.048],[64.082,-30.632],[118.714,-141.128],[13.441,-54.817]],"c":true}]},{"t":23,"s":[{"i":[[2.33,0.388],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-2.33,-0.388],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-48.583,-112.612],[-28.004,-30.297],[-118.473,-19.813],[-29.945,-1.176],[-69.55,51.63],[-2.378,33.769],[44.604,99],[55.087,11.249],[110.223,-12.048],[58.582,-29.132],[80.714,-102.128],[6.941,-52.817]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.88627355239,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":20},"lc":1,"lj":1,"ml":49,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":21,"op":24,"st":13,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Shape Layer 11","sr":1,"ks":{"p":{"a":0,"k":[124.5,423,0]},"s":{"a":0,"k":[84,84,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.579,92.546],[-9.5,-155.695]],"o":[[12.5,-252.612],[12.271,201.104]],"v":[[12.833,-128.936],[98.976,-56.311]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[22.734,89.895],[11.898,-405.5]],"o":[[-23.488,-92.879],[-6.577,224.165]],"v":[[13.822,-128.936],[-20.946,73.119]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":24,"s":[1,0.487581849098,0.776947379112,1],"h":1},{"t":25,"s":[1,1,1,1],"h":1},{"t":27,"s":[1,0.487581849098,0.776947379112,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":32.824,"s":[18]},{"t":60,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.579,92.546],[-14.438,-173.5]],"o":[[12.5,-252.612],[18.649,224.102]],"v":[[12.833,-128.936],[-208.113,63.476]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[22.734,89.895],[18.083,-405.5]],"o":[[-23.488,-92.879],[-9.996,224.165]],"v":[[13.822,-128.936],[-246.174,28.5]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":26,"s":[1,0.854901432991,0,1],"h":1},{"t":27,"s":[1,1,1,1],"h":1},{"t":29,"s":[1,0.854901432991,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":30.646,"s":[18]},{"t":57.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.448,98.196],[-9.5,-173.5]],"o":[[0.262,-57.374],[12.271,224.102]],"v":[[12.833,-128.936],[46,77.024]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[9.501,91.786],[-42.709,-190.5]],"o":[[-16.488,-159.285],[49.74,221.861]],"v":[[13.821,-128.936],[-226.196,21.976]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":28,"s":[1,0.603920638561,0,1],"h":1},{"t":29,"s":[1,1,1,1],"h":1},{"t":31,"s":[1,0.603920638561,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":32.824,"s":[18]},{"t":60,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.295,92.405],[-0.5,-126]],"o":[[13,-164.669],[0.891,224.436]],"v":[[12.833,-128.936],[-68.048,77.619]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[9.501,91.786],[77.356,-197.872]],"o":[[-16.488,-159.284],[-76.659,196.091]],"v":[[13.821,-128.936],[-387.444,-116.494]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":30,"s":[0,0.760785162449,1,1],"h":1},{"t":31,"s":[1,1,1,1],"h":1},{"t":33,"s":[0,0.760785162449,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":30.646,"s":[18]},{"t":57.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-21.148,90.672],[-37.995,-304]],"o":[[31.5,-135.055],[27.957,223.683]],"v":[[12.833,-128.936],[-313.49,80.619]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[73.599,64.306],[24.162,-288]],"o":[[-75.488,-65.957],[-18.786,223.92]],"v":[[13.821,-128.936],[-407.564,-34.381]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":32,"s":[1,0.487581849098,0.776947379112,1],"h":1},{"t":33,"s":[1,1,1,1],"h":1},{"t":35,"s":[1,0.487581849098,0.776947379112,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":32.824,"s":[18]},{"t":60,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.717,92.634],[-8.905,-156.364]],"o":[[1.5,-193.834],[11.461,201.243]],"v":[[12.833,-128.936],[23.19,-128.16]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[73.599,64.306],[24.162,-288]],"o":[[-75.488,-65.957],[-18.786,223.92]],"v":[[13.822,-128.936],[-387.806,68.619]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":34,"s":[1,0.273202955723,0.592423915863,1],"h":1},{"t":35,"s":[1,1,1,1],"h":1},{"t":37,"s":[1,0.273202955723,0.592423915863,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":30.646,"s":[18]},{"t":57.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[-100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.579,92.546],[-14.438,-155.695]],"o":[[12.5,-252.612],[18.649,201.104]],"v":[[-3.833,-128.936],[345.044,-125.468]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[22.734,89.895],[11.898,-405.5]],"o":[[-23.488,-92.878],[-6.577,224.165]],"v":[[-2.845,-128.936],[121.745,42.762]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":36,"s":[1,0.854901432991,0,1],"h":1},{"t":37,"s":[1,1,1,1],"h":1},{"t":39,"s":[1,0.854901432991,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":32.824,"s":[18]},{"t":60,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 6","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.579,92.546],[-14.438,-155.695]],"o":[[12.5,-252.612],[18.649,201.104]],"v":[[-3.833,-128.936],[345.044,-125.468]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[22.734,89.895],[11.898,-405.5]],"o":[[-23.488,-92.879],[-6.577,224.165]],"v":[[-2.845,-128.936],[-3.851,123.119]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":38,"s":[1,0.854901432991,0,1],"h":1},{"t":39,"s":[1,1,1,1],"h":1},{"t":41,"s":[1,0.854901432991,0,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":30.646,"s":[18]},{"t":57.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-73.823,64.753],[-14.438,-173.5]],"o":[[66.5,-58.329],[18.649,224.102]],"v":[[-3.833,-128.936],[295.252,76.119]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[9.501,91.785],[50.898,-197.872]],"o":[[-16.488,-159.285],[-50.44,196.091]],"v":[[-2.845,-128.936],[-129.446,-153.663]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":40,"s":[0,0.760785162449,1,1],"h":1},{"t":41,"s":[1,1,1,1],"h":1},{"t":43,"s":[0,0.760785162449,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":32.824,"s":[18]},{"t":60,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-73.823,64.753],[-14.438,-173.5]],"o":[[66.5,-58.329],[18.649,224.102]],"v":[[-3.833,-128.936],[295.252,76.119]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[9.501,91.786],[50.898,-220.5]],"o":[[-16.488,-159.285],[-50.44,218.515]],"v":[[-2.845,-128.936],[-46.851,23.119]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":42,"s":[0,0.760785162449,1,1],"h":1},{"t":43,"s":[1,1,1,1],"h":1},{"t":45,"s":[0,0.760785162449,1,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":30.646,"s":[18]},{"t":57.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-57.401,76.995],[-19.758,-163]],"o":[[47.5,-63.714],[27.118,223.727]],"v":[[-3.833,-128.936],[408.478,50.119]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[7.607,92.626],[15.898,-288]],"o":[[-8.205,-99.908],[-12.361,223.92]],"v":[[-2.845,-128.936],[-82.112,76.667]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"t":60,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":44,"s":[1,0.273202955723,0.592423915863,1],"h":1},{"t":45,"s":[1,1,1,1],"h":1},{"t":47,"s":[1,0.273202955723,0.592423915863,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":21.176,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":32.824,"s":[18]},{"t":60,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-21.148,90.672],[-37.995,-304]],"o":[[31.5,-135.055],[27.957,223.682]],"v":[[-3.833,-128.936],[438.115,24.619]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[28.539,93.475],[15.898,-288]],"o":[[-27.512,-90.112],[-12.361,223.92]],"v":[[-2.845,-128.936],[-130.922,44.524]],"c":false}},"nm":"Path 2","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.23],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"t":57.82421875,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"t":46,"s":[1,0.273202955723,0.592423915863,1],"h":1},{"t":47,"s":[1,1,1,1],"h":1},{"t":49,"s":[1,0.273202955723,0.592423915863,1],"h":1}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":19,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":30.646,"s":[18]},{"t":57.82421875,"s":[0]}]},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":17}},{"n":"g","nm":"gap","v":{"a":0,"k":60}},{"n":"o","nm":"offset","v":{"a":0,"k":119}}],"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"1","bm":0,"hd":false}],"ip":21,"op":60,"st":16,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"con1","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.401],"y":[0.037]},"o":{"x":[0.516],"y":[0.117]},"t":0,"s":[-544]},{"i":{"x":[0.446],"y":[1]},"o":{"x":[0.162],"y":[0.25]},"t":6,"s":[-485.939]},{"t":20.08203125,"s":[-344]}]},"p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[271.5,282,0],"to":[74.574,198.911,0],"ti":[-62.939,168.367,0]},{"t":20.08203125,"s":[104.5,350.5,0]}]},"a":{"a":0,"k":[512,512,0]},"s":{"a":1,"k":[{"i":{"x":[0.182,0.182,0.182],"y":[0.69,0.884,-24.46]},"o":{"x":[0.309,0.309,0.309],"y":[0.143,0.054,11.743]},"t":0,"s":[0,0,100]},{"i":{"x":[0.523,0.523,0.523],"y":[1,1,1]},"o":{"x":[0.211,0.211,0.211],"y":[0.366,-0.055,6.56]},"t":5.047,"s":[41.033,109.533,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":10.096,"s":[50,50,100]},{"i":{"x":[0.657,0.657,0.657],"y":[1.134,1.134,1.005]},"o":{"x":[0.323,0.323,0.323],"y":[0,0,0]},"t":20.082,"s":[74.497,74.497,100]},{"i":{"x":[0.656,0.656,0.656],"y":[1.126,0.887,1.018]},"o":{"x":[0.32,0.32,0.32],"y":[-0.046,0.042,-0.008]},"t":21.006,"s":[80.959,80.959,100]},{"i":{"x":[0.67,0.67,0.67],"y":[0.746,1.556,37.686]},"o":{"x":[0.328,0.328,0.328],"y":[0.088,-0.194,-0.034]},"t":22.451,"s":[108.25,50.75,100]},{"i":{"x":[0.657,0.657,0.657],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":25.277,"s":[35.924,83.727,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.32,0.32,0.32],"y":[0,0,0]},"t":30.082,"s":[21.459,21.459,100]},{"t":33,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-30.244],[0,30.244]],"o":[[0,30.244],[0,-30.244]],"v":[[54.762,0],[-54.762,0]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.06274510175,0,0.658823549747,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[0.890196084976,0.890196084976,0.890196084976,1]},{"t":31,"s":[0.660035133362,0.764959335327,0.903267920017,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[512,462.867]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[54.762,-57.52],[0,57.52],[-54.762,-57.52]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.06274510175,0,0.658823549747,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0,1,0.5,0.5,0.5,1,1,0,1,1]}},"s":{"a":0,"k":[-7,-33.387]},"e":{"a":0,"k":[-47.748,60.023]},"t":1,"nm":"Gradient_LkmdtAqsKe","hd":false},{"ty":"tr","p":{"a":0,"k":[512,520.387]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":33,"st":-34,"bm":0},{"ddd":0,"ind":10,"ty":0,"nm":"fierwork","refId":"comp_0","sr":1,"ks":{"r":{"a":0,"k":19},"p":{"a":0,"k":[365.391,387.205,0]},"a":{"a":0,"k":[112,110.5,0]},"s":{"a":0,"k":[109.661,100,100]}},"ao":0,"w":224,"h":221,"ip":49,"op":90,"st":49,"bm":0},{"ddd":0,"ind":11,"ty":0,"nm":"fierwork","refId":"comp_0","sr":1,"ks":{"r":{"a":0,"k":3},"p":{"a":0,"k":[138.102,364.843,0]},"a":{"a":0,"k":[112,110.5,0]},"s":{"a":0,"k":[128.54,128.54,100]}},"ao":0,"w":224,"h":221,"ip":44,"op":85,"st":44,"bm":0},{"ddd":0,"ind":12,"ty":0,"nm":"fierwork","refId":"comp_0","sr":1,"ks":{"r":{"a":0,"k":19},"p":{"a":0,"k":[366.5,146,0]},"a":{"a":0,"k":[112,110.5,0]}},"ao":0,"w":224,"h":221,"ip":38,"op":79,"st":38,"bm":0},{"ddd":0,"ind":13,"ty":0,"nm":"fierwork","refId":"comp_0","sr":1,"ks":{"r":{"a":0,"k":-14},"p":{"a":0,"k":[150.507,141.952,0]},"a":{"a":0,"k":[112,110.5,0]},"s":{"a":0,"k":[-116.935,112.424,100]}},"ao":0,"w":224,"h":221,"ip":33,"op":74,"st":33,"bm":0},{"ddd":0,"ind":14,"ty":0,"nm":"slap","refId":"comp_1","sr":1,"ks":{"p":{"a":0,"k":[447,277,0]},"a":{"a":0,"k":[140,117.5,0]},"s":{"a":0,"k":[39.673,40.638,100]}},"ao":0,"w":280,"h":235,"ip":84,"op":90,"st":84,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"1","sr":1,"ks":{"r":{"a":0,"k":-7.442},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[148.7,423.572,0],"to":[36.212,-73.721,0],"ti":[-43.496,152.841,0]},{"i":{"x":0.619,"y":1},"o":{"x":0.167,"y":0.167},"t":65,"s":[392.931,282.143,0],"to":[9.343,-32.83,0],"ti":[-4.936,-35.273,0]},{"t":86,"s":[444.2,283.572,0]}]},"a":{"a":0,"k":[256,306.275,0]},"s":{"a":1,"k":[{"i":{"x":[0.557,0.557,0.557],"y":[1,1,1]},"o":{"x":[0.273,0.273,0.273],"y":[0.045,0.045,3.688]},"t":38,"s":[0,0,100]},{"i":{"x":[0.557,0.557,0.557],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":42,"s":[58.5,58.5,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":68,"s":[72,72,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27.145,"s":[{"i":[[-8.563,31.024],[18.5,17.75]],"o":[[-23.179,9.555],[-0.503,45.167]],"v":[[517.26,513.492],[444.349,503.098]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35.779,"s":[{"i":[[-12.25,15.875],[18.5,17.75]],"o":[[-23.5,1.5],[-1.625,38.875]],"v":[[498.625,517.5],[434.25,501.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41.586,"s":[{"i":[[-15.75,2.875],[2.625,33.375]],"o":[[-19.625,5.125],[2.5,33.5]],"v":[[469.75,524],[410.125,499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42.414,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":51.535,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":59,"s":[{"i":[[8.189,59.335],[21.124,3.466]],"o":[[-22.5,26.625],[28.402,20.507]],"v":[[579.779,491.202],[498.01,524.629]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":66.463,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"t":75.5859375,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.407843167174,0.003921568627,0.533333333333,1]},"o":{"a":0,"k":50},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27.145,"s":[{"i":[[7.367,4.157],[-15.962,20.935],[-0.419,5.206],[2.064,4.224],[-12.88,9.655],[-0.675,9.778],[-6.774,0]],"o":[[-5.895,-3.504],[1.934,-4.055],[0.42,-5.22],[-23.232,-14.914],[4.164,-2.93],[1.796,-12.531],[6.774,0]],"v":[[485.008,612.805],[491.252,548.222],[495.162,533.782],[493.502,518.668],[490.569,469.102],[497.397,449.375],[510.108,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35.779,"s":[{"i":[[11.271,5.001],[-21.483,22.219],[-0.395,5.388],[4.329,4.362],[-19.712,10.534],[-1.339,9.438],[-10.127,0]],"o":[[-9.501,-4.216],[3.267,-3.656],[0.396,-5.402],[-31.33,-16.625],[6.082,-3.25],[2.594,-12.519],[10.127,0]],"v":[[473.501,612.966],[479.983,547.781],[486.162,533.704],[481.33,518.375],[480.668,471],[491.058,449.375],[510.061,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41.586,"s":[{"i":[[25.066,0],[-2.709,18.878],[3.826,8.747],[18.227,15.875],[-44.391,3.875],[-3.41,8.375],[-20.586,0]],"o":[[-25.066,0],[3.73,-26],[-3.886,-8.885],[-16.515,-14.384],[11.257,-0.983],[5.083,-12.484],[20.586,0]],"v":[[465.465,615.375],[437.52,576],[475.924,527.503],[419.523,519.125],[448.641,459.75],[471.285,449.375],[509.914,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42.414,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":51.535,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":59,"s":[{"i":[[-9.426,0.527],[3.336,30.533],[-0.525,4.423],[-1.674,5.011],[16.277,5.225],[2.182,11.243],[7.649,0]],"o":[[9.613,-0.445],[-0.002,-3.793],[0.527,-4.435],[11.243,-31.005],[-4.144,-1.327],[-1.638,-12.579],[-7.649,0]],"v":[[534.712,612.192],[538.458,559.735],[539.089,547.396],[542.236,533.212],[537.778,467.105],[529.364,456.73],[510.31,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":66.463,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"t":75.5859375,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.572549019608,0.03137254902,0.780392216701,1]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":27.145,"s":[66.014]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":42.414,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":59,"s":[66.014]},{"t":75.5859375,"s":[0]}]},"w":{"a":0,"k":3},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27.145,"s":[{"i":[[-4.985,-4.102],[-3.554,-4.626]],"o":[[4.45,2.507],[12.17,7.144]],"v":[[-30.461,-3.879],[-17.21,6.852]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":42.414,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":59,"s":[{"i":[[-4.985,-4.102],[-3.554,-4.626]],"o":[[4.45,2.507],[12.17,7.144]],"v":[[-30.461,-3.879],[-17.21,6.852]],"c":false}]},{"t":75.5859375,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":27.145,"s":[8.157]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":42.414,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":59,"s":[8.157]},{"t":75.5859375,"s":[24]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[577.467,481.038]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27.145,"s":[{"i":[[-0.472,4.593],[-7.623,2.539],[-3.528,9.553],[-7.812,0]],"o":[[0.706,-6.267],[4.543,-2.418],[3.761,-10.186],[7.812,0]],"v":[[-5.476,33.425],[7.073,18.693],[21.053,-4.994],[43.07,-32.939]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":42.414,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":59,"s":[{"i":[[-0.472,4.593],[-7.623,2.539],[-3.528,9.553],[-7.812,0]],"o":[[0.706,-6.267],[4.543,-2.418],[3.761,-10.186],[7.812,0]],"v":[[-5.476,33.425],[7.073,18.693],[21.054,-4.994],[43.07,-32.939]],"c":false}]},{"t":75.5859375,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[467.626,460.618]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27.145,"s":[{"i":[[4.458,-1.658],[-2.702,28.332],[0.653,11.426],[5.665,4.649],[-18.371,11.345],[-2.317,6.432],[-14.026,-45.509],[-2.91,-2.568],[15.965,-19.373],[0.411,-7.049],[-0.265,-10.052],[17.692,6.636]],"o":[[-17.599,6.545],[2.224,-16.938],[-0.653,-11.426],[-11.402,-10.107],[3.058,-2.631],[15.412,-42.542],[1.948,6.42],[18.709,14.082],[-0.839,2.551],[-0.477,7.198],[5.65,39.486],[-4.442,-1.666]],"v":[[-6.823,86.707],[-43.572,61.351],[-29.82,26.814],[-47.266,7.929],[-35.626,-38.619],[-26.731,-52.763],[27.766,-51.604],[35.261,-38.773],[47.576,15.282],[45.669,28.97],[45.277,54.319],[8.554,86.712]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":42.414,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.445,73.742],[-54.689,63.17],[-18.449,15.821],[-70.059,7.574],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[56.509,24.315],[51.127,30.695],[50.286,40.27],[9.572,73.754]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":59,"s":[{"i":[[4.458,-1.658],[-2.702,28.332],[0.653,11.426],[5.665,4.649],[-18.371,11.345],[-2.317,6.432],[-14.026,-45.509],[-2.91,-2.568],[15.965,-19.373],[0.411,-7.049],[-0.265,-10.052],[17.692,6.636]],"o":[[-17.599,6.545],[2.224,-16.938],[-0.653,-11.426],[-11.402,-10.107],[3.058,-2.631],[15.412,-42.542],[1.948,6.42],[18.709,14.082],[-0.839,2.551],[-0.477,7.198],[5.65,39.486],[-4.442,-1.666]],"v":[[-6.823,86.707],[-43.572,61.351],[-29.82,26.814],[-47.266,7.929],[-35.626,-38.619],[-26.731,-52.763],[27.766,-51.604],[35.261,-38.773],[47.576,15.282],[45.669,28.97],[45.277,54.319],[8.554,86.712]],"c":true}]},{"t":75.5859375,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.445,73.742],[-54.689,63.17],[-18.449,15.821],[-70.059,7.574],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[56.509,24.315],[51.127,30.695],[50.286,40.27],[9.572,73.754]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.962,0.665,1,0.5,0.885,0.333,1,1,0.808,0,1]}},"s":{"a":0,"k":[-184.004,-76.56]},"e":{"a":0,"k":[-187.174,85.547]},"t":1,"nm":"Gradient_NSgQ8Mf14K","hd":false},{"ty":"tr","p":{"a":0,"k":[510.004,508.06]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27.145,"s":[{"i":[[-5.781,-1.021],[5.349,50.111],[-0.335,5.682],[-0.738,3.458],[22.406,11.428],[2.515,5.936],[22.413,-52.919],[3.315,-4.14],[-6.579,-18.541],[-1.201,-10.635],[1.192,-24.401],[-29.073,5.137]],"o":[[29.056,5.131],[-0.226,-4.422],[0.313,-5.243],[15.524,-30.374],[-3.682,-3.649],[-22.348,-52.741],[-2.514,5.936],[-21.263,12.913],[6.915,16.093],[1.201,10.636],[-2.031,36.013],[5.779,-1.021]],"v":[[8.43,97.656],[59.176,48.368],[59.413,32.21],[61.028,20.534],[47.619,-48.424],[38.318,-63.419],[-40.646,-63.419],[-49.122,-48.424],[-66.126,6.233],[-46.131,25.134],[-59.775,62.881],[-10.866,97.656]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":42.414,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.905,89.332],[61.185,42.958],[61.749,34.437],[66.481,27.975],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-94.558,6.232],[-35.111,14.18],[-69.838,64.217],[-10.715,89.332]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":59,"s":[{"i":[[-5.781,-1.021],[5.349,50.111],[-0.335,5.682],[-0.738,3.458],[22.406,11.428],[2.515,5.936],[22.413,-52.919],[3.315,-4.14],[-6.579,-18.541],[-1.201,-10.635],[1.192,-24.401],[-29.073,5.137]],"o":[[29.056,5.131],[-0.226,-4.422],[0.313,-5.243],[15.524,-30.374],[-3.682,-3.649],[-22.348,-52.741],[-2.514,5.936],[-21.263,12.913],[6.915,16.093],[1.201,10.635],[-2.031,36.013],[5.779,-1.021]],"v":[[8.43,97.656],[59.176,48.368],[59.413,32.21],[61.028,20.534],[47.619,-48.424],[38.318,-63.419],[-40.646,-63.419],[-49.122,-48.424],[-66.126,6.233],[-46.131,25.134],[-59.775,62.881],[-10.866,97.656]],"c":true}]},{"t":75.5859375,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.905,89.332],[61.185,42.958],[61.749,34.437],[66.481,27.975],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-94.558,6.232],[-35.111,14.18],[-69.838,64.217],[-10.715,89.332]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.404756792854,0,0.532025984222,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.369,0.983,0.5,0.766,0.184,0.872,1,0.532,0,0.762]}},"s":{"a":0,"k":[-184,-92]},"e":{"a":0,"k":[-187.809,102.794]},"t":1,"nm":"Gradient_en82WAW6Tf","hd":false},{"ty":"tr","p":{"a":0,"k":[512,512.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[255.281,215.034]},"a":{"a":0,"k":[511.25,509.5]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"balooon","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.109,0],[0,0]],"o":[[0,0],[7.109,0],[0,0]],"v":[[-4.725,-9.63],[0.089,9.63],[4.623,-9.63]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.403921598547,0,0.533333333333,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.572549019608,0.03137254902,0.780392216701,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[254.291,315.229]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,223.521]},"a":{"a":0,"k":[254.578,223.521]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":30.879,"s":[100,100]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":47.465,"s":[90,110]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":64.051,"s":[110,90]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":80.635,"s":[90,110]},{"t":97.220703125,"s":[110,90]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.93,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44.977,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45.807,"s":[{"i":[[0,0],[-6.117,-23.74],[-28.956,-52.995]],"o":[[0,0],[13.682,53.098],[22.599,41.361]],"v":[[1.722,-90.458],[12.265,-58.635],[-1.097,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69.855,"s":[{"i":[[-0.4,-26.92],[6.383,-58.635],[0,0]],"o":[[-21.596,64.546],[-1.601,14.708],[0,0]],"v":[[1.919,-90.458],[12.189,59.848],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.686,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"t":94.732421875,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.756862745098,0.872905536726,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":55.758,"s":[53]},{"t":93.07421875,"s":[27]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[253.053,407.037]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":38,"op":84,"st":28,"bm":0},{"ddd":0,"ind":16,"ty":0,"nm":"slap","refId":"comp_1","sr":1,"ks":{"p":{"a":0,"k":[378,412.5,0]},"a":{"a":0,"k":[140,117.5,0]},"s":{"a":0,"k":[59.362,59.362,100]}},"ao":0,"w":280,"h":235,"ip":81,"op":87,"st":81,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"9","sr":1,"ks":{"r":{"a":0,"k":6.301},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[153.864,435.179,0],"to":[48.958,-77.021,0],"ti":[-44.065,49.842,0]},{"i":{"x":0.619,"y":1},"o":{"x":0.167,"y":0.167},"t":62,"s":[424.867,453.681,0],"to":[18.732,-21.188,0],"ti":[26.521,-28.982,0]},{"t":83,"s":[373.864,425.679,0]}]},"a":{"a":0,"k":[256,306.275,0]},"s":{"a":1,"k":[{"i":{"x":[0.535,0.535,0.535],"y":[1,1,1]},"o":{"x":[0.296,0.296,0.296],"y":[0.058,0.058,4.43]},"t":38,"s":[0,0,100]},{"i":{"x":[0.535,0.535,0.535],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":42,"s":[41.5,41.5,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":65,"s":[55,55,100]},{"t":83,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":38,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.75,505],[465.75,506.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49.635,"s":[{"i":[[-12.25,15.875],[18.5,17.75]],"o":[[-23.5,1.5],[-1.625,38.875]],"v":[[498.625,517.5],[434.25,501.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53.783,"s":[{"i":[[-15.75,2.875],[2.625,33.375]],"o":[[-19.625,5.125],[2.5,33.5]],"v":[[469.75,524],[410.125,499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54.611,"s":[{"i":[[3.5,25],[12.75,-8.959]],"o":[[5.25,24.25],[13.5,-9.959]],"v":[[615.75,489.75],[587.25,539.459]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":60.416,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":71,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.75,505],[465.75,506.75]],"c":true}]},{"t":81.9765625,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.062745098039,0.443137284821,0.807843197093,1]},"o":{"a":0,"k":50},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":38,"s":[{"i":[[-0.906,2.369],[-4.263,18.214],[-0.472,4.82],[-2.736,3.93],[1.599,7.792],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[-0.89,-4.901],[0.473,-4.833],[-6.071,-11.289],[0.098,-2.251],[0.104,-12.555],[-0.332,0]],"v":[[509.392,612.464],[515.131,549.155],[514.235,533.945],[519.295,519.289],[511.551,465.079],[510.83,449.375],[510.207,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49.635,"s":[{"i":[[11.271,5.001],[-21.483,22.219],[-0.395,5.388],[4.329,4.362],[-19.712,10.534],[-1.339,9.438],[-10.127,0]],"o":[[-9.501,-4.216],[3.267,-3.656],[0.396,-5.402],[-31.33,-16.625],[6.082,-3.25],[2.594,-12.519],[10.127,0]],"v":[[473.501,612.966],[479.983,547.781],[486.162,533.704],[481.33,518.375],[480.668,471],[491.058,449.375],[510.061,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":53.783,"s":[{"i":[[25.066,0],[-2.709,18.878],[3.826,8.747],[18.227,15.875],[-44.391,3.875],[-3.41,8.375],[-20.586,0]],"o":[[-25.066,0],[3.73,-26],[-3.886,-8.885],[-16.515,-14.384],[11.257,-0.983],[5.083,-12.484],[20.586,0]],"v":[[465.465,615.375],[437.52,576],[475.924,527.503],[419.523,519.125],[448.641,459.75],[471.285,449.375],[509.914,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54.611,"s":[{"i":[[-25.875,0],[6.375,37.5],[-0.625,3.685],[-6.266,5.508],[45.5,5.875],[4.875,12.625],[21.25,0]],"o":[[25.875,0],[-0.655,-3.855],[0.627,-3.695],[39.25,-34.5],[-11.562,-1.493],[-4.875,-12.625],[-21.25,0]],"v":[[556.125,614.875],[585.875,559.125],[584.75,548.308],[594,535],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":60.416,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":71,"s":[{"i":[[-0.906,2.369],[-0.676,31.14],[-0.472,4.82],[0.797,4.744],[0.555,4.875],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[0.349,-3.76],[0.473,-4.833],[-3.824,-29.125],[-0.153,-1.238],[0.104,-12.555],[-0.332,0]],"v":[[510.339,612.819],[512.947,560.062],[514.524,546.906],[514.387,532.25],[513.979,467.474],[513.614,457.099],[510.207,409.5]],"c":false}]},{"t":81.9765625,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.176470588235,0.61568627451,1,1]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":38,"s":[100]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":54.611,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":71,"s":[100]},{"t":87.783203125,"s":[0]}]},"w":{"a":0,"k":3},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":38,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":54.611,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[16.983,4.139]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":71,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]},{"t":87.783203125,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[16.983,4.139]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":38,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":54.611,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":71,"s":[0]},{"t":87.783203125,"s":[24]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[577.467,481.038]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":38,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":54.611,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":71,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]},{"t":87.783203125,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[467.626,460.618]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":38,"s":[{"i":[[3.645,0.118],[0.057,28.368],[-0.01,9.977],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-10.811,-43.431],[-0.844,-4.117],[-0.442,-13.119],[-0.008,-9.243],[0.047,-13.382],[14.463,-0.472]],"o":[[-14.388,-0.465],[-0.027,-13.751],[0.01,-9.977],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[1.598,6.419],[4.679,22.836],[0.1,2.962],[0.008,9.244],[-0.084,24.242],[-3.632,0.118]],"v":[[-5.462,93.821],[-35.623,61.372],[-35.674,32.473],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[25.807,-53.004],[28.942,-38.771],[37.501,12.505],[37.647,29.642],[37.528,62.643],[7.109,93.821]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":54.611,"s":[{"i":[[6.039,-5.108],[-8.061,28.263],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[47.834,-31.523],[1.226,-2.786],[-0.871,-3.584],[23.963,20.442]],"o":[[-23.837,20.162],[6.596,-23.129],[-1.941,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.661,1.754],[-1.419,3.224],[16.788,69.096],[-6.017,-5.133]],"v":[[-9.466,72.889],[-59.013,61.311],[-18.449,15.821],[-70.059,7.574],[-45.796,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[67.145,20.677],[61.251,27.663],[60.33,38.15],[11.361,72.902]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":71,"s":[{"i":[[3.792,1.874],[8.19,23.284],[1.193,11.478],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-13.908,-41.954],[-0.844,-4.117],[0.058,-32.304],[1.027,-9.186],[2.499,-9.673],[7.991,-2.081]],"o":[[-3.445,-1.703],[-2.315,-6.582],[-1.031,-9.924],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[2.082,6.279],[4.679,22.836],[-0.005,2.964],[-1.164,10.412],[-6.217,24.058],[-3.516,0.916]],"v":[[-6.522,92.832],[-29.064,60.631],[-34.014,33.839],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[27.848,-53.805],[31.987,-38.989],[37.501,12.505],[35.671,33.353],[30.913,59.554],[7.109,93.821]],"c":true}]},{"t":87.783203125,"s":[{"i":[[6.039,-5.108],[-8.061,28.263],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[47.834,-31.523],[1.226,-2.786],[-0.871,-3.584],[23.963,20.442]],"o":[[-23.837,20.162],[6.596,-23.129],[-1.941,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.661,1.754],[-1.419,3.224],[16.788,69.096],[-6.017,-5.133]],"v":[[-9.466,72.889],[-59.013,61.311],[-18.449,15.821],[-70.059,7.574],[-45.796,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[67.145,20.677],[61.251,27.663],[60.33,38.15],[11.361,72.902]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0,0.506,0.952,1,0,0.506,0.976,0.939,0,0.506,1,0.878,0.5,0.253,0.857,0.939,1,0,0.714,1]}},"s":{"a":0,"k":[7.996,-79.56]},"e":{"a":0,"k":[10.826,49.547]},"t":1,"nm":"Gradient_kDyl5j3fhn","hd":false},{"ty":"tr","p":{"a":0,"k":[510.004,508.06]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":38,"s":[{"i":[[-5.781,0.601],[-0.323,40.051],[0.062,7.102],[0.108,4.266],[6.966,16.874],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.241,-18.578],[0.044,-10.635],[-0.026,-23.02],[-29.073,-3.023]],"o":[[29.056,-3.019],[0.041,-5.065],[-0.057,-6.537],[-0.659,-26.835],[-2.26,-5.473],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.188,14.446],[-0.044,10.635],[0.035,30.865],[5.779,0.601]],"v":[[8.327,101.399],[52.34,51.895],[52.381,32.224],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-51.489,6.233],[-51.805,30.773],[-51.723,62.881],[-10.969,101.399]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":54.611,"s":[{"i":[[-5.781,-4.17],[16.366,69.651],[-1.105,2.925],[-2.382,1.889],[52.397,0.85],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.558,-27.083],[-29.073,20.987]],"o":[[29.056,20.96],[-0.745,-3.172],[1.031,-2.729],[46.959,-37.248],[-6.446,-0.105],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-6.045,46.013],[5.779,-4.172]],"v":[[8.63,90.384],[72.456,41.515],[73.073,32.185],[78.256,25.107],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.168,-53.378],[-94.558,6.232],[-35.111,14.18],[-75.414,62.88],[-10.666,90.384]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":71,"s":[{"i":[[-5.793,0.469],[-9.882,27.03],[-1.816,6.746],[-0.184,4.263],[3.476,11.513],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.03,-18.008],[-1.039,-7.183],[-4.464,-12.429],[-13.272,-1.636]],"o":[[12.176,-0.985],[1.707,-4.67],[1.671,-6.21],[1.329,-30.748],[-1.712,-5.669],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.019,11.418],[1.205,8.333],[6.355,17.694],[5.767,0.711]],"v":[[6.319,101.943],[44.646,58.552],[49.535,39.225],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-52.21,5.966],[-49.611,33.886],[-41.768,62.977],[-8.532,101.726]],"c":true}]},{"t":87.783203125,"s":[{"i":[[-5.781,-4.17],[16.366,69.651],[-1.105,2.925],[-2.382,1.889],[52.397,0.85],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.558,-27.083],[-29.073,20.987]],"o":[[29.056,20.96],[-0.745,-3.172],[1.031,-2.729],[46.959,-37.248],[-6.446,-0.105],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-6.045,46.013],[5.779,-4.172]],"v":[[8.63,90.384],[72.456,41.515],[73.073,32.185],[78.256,25.107],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.168,-53.378],[-94.558,6.232],[-35.111,14.18],[-75.414,62.88],[-10.666,90.384]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.062404901841,0.443099048091,0.809150247013,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.369,0.859,1,0.5,0.184,0.629,1,1,0,0.4,1]}},"s":{"a":0,"k":[-184,-92]},"e":{"a":0,"k":[-187.809,102.794]},"t":1,"nm":"Gradient_0oidiW3rhK","hd":false},{"ty":"tr","p":{"a":0,"k":[512,512.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[255.281,215.034]},"a":{"a":0,"k":[511.25,509.5]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"balooon","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.109,0],[0,0]],"o":[[0,0],[7.109,0],[0,0]],"v":[[-4.725,-9.63],[0.089,9.63],[4.623,-9.63]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.062745098039,0.443137284821,0.807843197093,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.027450982262,0.545098039216,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,311.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,223.271]},"a":{"a":0,"k":[254.578,223.521]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":38,"s":[100,100]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":54.611,"s":[90,110]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":71,"s":[110,90]},{"t":87.783203125,"s":[90,110]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.441,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45.488,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46.318,"s":[{"i":[[0,0],[-6.117,-23.74],[-28.956,-52.995]],"o":[[0,0],[13.682,53.098],[22.599,41.361]],"v":[[1.722,-90.458],[12.265,-58.635],[-1.097,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70,"s":[{"i":[[-0.4,-26.92],[6.383,-58.635],[0,0]],"o":[[-21.596,64.546],[-1.601,14.708],[0,0]],"v":[[1.919,-90.458],[12.189,59.848],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"t":95.244140625,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.785621074602,0.887938256357,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":49,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":57,"s":[34]},{"t":75,"s":[71]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[253.053,407.037]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":38,"op":81,"st":25,"bm":0},{"ddd":0,"ind":18,"ty":0,"nm":"slap","refId":"comp_1","sr":1,"ks":{"p":{"a":0,"k":[392.5,110,0]},"a":{"a":0,"k":[140,117.5,0]},"s":{"a":0,"k":[43.214,50,100]}},"ao":0,"w":280,"h":235,"ip":78,"op":84,"st":78,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"10","sr":1,"ks":{"r":{"a":0,"k":3.876},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[181.18,437.565,0],"to":[46.274,-87.384,0],"ti":[27.533,224.417,0]},{"i":{"x":0.619,"y":1},"o":{"x":0.167,"y":0.167},"t":59,"s":[442.504,174.027,0],"to":[-3.099,-25.255,0],"ti":[26.462,-6.921,0]},{"t":80,"s":[387.18,118.565,0]}]},"a":{"a":0,"k":[256,306.275,0]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5,0.5],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0.077,0.077,5.614]},"t":38,"s":[0,0,100]},{"i":{"x":[0.5,0.5,0.5],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":42,"s":[34.5,34.5,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":62,"s":[48,48,100]},{"t":80,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.75,505],[465.75,506.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69.879,"s":[{"i":[[-7.125,-4.375],[1.5,21.375]],"o":[[-6.75,-3.375],[3.125,25.5]],"v":[[439.5,530.75],[410.125,499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.709,"s":[{"i":[[0.871,22.343],[38.508,4.562]],"o":[[2.496,22.468],[39.008,4.437]],"v":[[613.75,489.75],[567.11,525.786]],"c":true}]},{"t":87,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.75,505],[465.75,506.75]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.305882352941,0.619607843137,1]},"o":{"a":0,"k":50},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[-0.906,2.369],[-0.676,31.14],[-0.472,4.82],[0.797,4.744],[0.555,4.875],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[0.349,-3.76],[0.473,-4.833],[-3.824,-29.125],[-0.153,-1.238],[0.104,-12.555],[-0.332,0]],"v":[[510.339,612.819],[512.947,560.062],[514.524,546.906],[514.387,532.25],[513.979,467.474],[513.614,457.099],[510.207,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69.879,"s":[{"i":[[25.066,0],[-12.145,32.875],[-0.318,5.956],[8.073,3.528],[-44.391,3.875],[-3.41,8.375],[-20.586,0]],"o":[[-25.066,0],[1.354,-3.665],[0.319,-5.972],[-39.898,-17.438],[11.257,-0.983],[5.083,-12.484],[20.586,0]],"v":[[465.465,615.375],[440.02,561],[444.299,545.503],[434.773,529.5],[448.641,459.75],[471.285,449.375],[509.914,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.709,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.719,9.609],[-7.482,-1.433],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.255,-3.413],[66.602,12.758],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[573.481,561.374],[544.821,525.865],[564.522,524.841],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"t":87,"s":[{"i":[[-0.906,2.369],[-0.676,31.14],[-0.472,4.82],[0.797,4.744],[0.555,4.875],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[0.349,-3.76],[0.473,-4.833],[-3.824,-29.125],[-0.153,-1.238],[0.104,-12.555],[-0.332,0]],"v":[[510.339,612.819],[512.947,560.062],[514.524,546.906],[514.387,532.25],[513.979,467.474],[513.614,457.099],[510.207,409.5]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.207843152214,0.61568627451,0.807843197093,1]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69.879,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70.709,"s":[0]},{"t":87,"s":[100]}]},"w":{"a":0,"k":3},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.709,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]},{"t":87,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":54,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":70.709,"s":[24]},{"t":87,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[577.467,481.038]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.709,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-39.972,30.672],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"t":87,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[467.626,460.618]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.445,73.742],[-54.689,63.17],[-18.449,15.821],[-70.059,7.574],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[56.509,24.315],[51.127,30.695],[50.286,40.27],[9.572,73.754]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[3.792,1.874],[8.19,23.284],[1.193,11.478],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-13.908,-41.954],[-0.844,-4.117],[0.574,-17.588],[1.027,-9.186],[2.499,-9.673],[7.991,-2.081]],"o":[[-3.445,-1.703],[-2.315,-6.582],[-1.031,-9.924],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[2.082,6.279],[4.679,22.836],[-0.097,2.962],[-1.164,10.412],[-6.217,24.058],[-3.516,0.916]],"v":[[-6.522,92.832],[-29.064,60.631],[-34.014,33.839],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[27.848,-53.805],[32.326,-36.554],[37.501,12.505],[35.67,33.353],[30.913,59.554],[7.109,93.821]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.709,"s":[{"i":[[5.601,-4.559],[-1.765,26.779],[1.219,14.319],[13.51,15.089],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[82.365,8.225],[1.119,-2.544],[-2.543,-2.208],[27.777,22.927]],"o":[[-29.1,23.689],[0.89,-13.501],[-0.716,-8.412],[-23.607,-26.366],[7.027,0.425],[19.009,-48.344],[2.628,6.422],[45.96,-2.921],[-8.631,-0.862],[-1.295,2.944],[67.833,58.912],[-5.57,-4.597]],"v":[[-9.445,73.742],[-52.938,61.294],[-49.082,32.45],[-72.685,9.074],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[37.88,8.061],[20.369,12.565],[25.03,27.517],[9.572,73.754]],"c":true}]},{"t":87,"s":[{"i":[[3.792,1.874],[8.19,23.284],[1.193,11.478],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-13.908,-41.954],[-0.844,-4.117],[0.574,-17.588],[1.027,-9.186],[2.499,-9.673],[7.991,-2.081]],"o":[[-3.445,-1.703],[-2.315,-6.582],[-1.031,-9.924],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[2.082,6.279],[4.679,22.836],[-0.097,2.962],[-1.164,10.412],[-6.217,24.058],[-3.516,0.916]],"v":[[-6.522,92.832],[-29.064,60.631],[-34.014,33.839],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[27.848,-53.805],[32.326,-36.554],[37.501,12.505],[35.67,33.353],[30.913,59.554],[7.109,93.821]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0,0.566,0.971,1,0,0.783,0.986,1,0,1,1,1,0.5,0.5,0.935,1,1,0,0.871,1]}},"s":{"a":0,"k":[-184.004,-76.56]},"e":{"a":0,"k":[-187.174,85.547]},"t":1,"nm":"Gradient_uZDXlwKduE","hd":false},{"ty":"tr","p":{"a":0,"k":[510.004,508.06]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.905,89.332],[61.185,42.958],[61.749,34.437],[66.481,27.975],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-94.558,6.232],[-35.111,14.18],[-69.838,64.217],[-10.715,89.332]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[-5.793,0.469],[-9.882,27.03],[-1.816,6.746],[-0.184,4.263],[3.476,11.513],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.03,-18.008],[-1.039,-7.183],[-4.464,-12.429],[-13.272,-1.636]],"o":[[12.176,-0.985],[1.707,-4.67],[1.671,-6.21],[1.329,-30.748],[-1.712,-5.669],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.019,11.418],[1.205,8.333],[6.355,17.694],[5.767,0.711]],"v":[[6.319,101.943],[44.646,58.552],[49.535,39.225],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-52.21,5.966],[-49.611,33.886],[-41.768,62.977],[-8.532,101.726]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.709,"s":[{"i":[[-5.274,-3.814],[59.064,50.034],[-1.009,2.671],[-2.721,-0.548],[60.997,-2.167],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-16.767,-21.286],[-4.43,-8.711],[2.54,-17.361],[-26.548,19.164]],"o":[[44.827,32.417],[-2.27,-1.923],[0.942,-2.492],[80.15,16.13],[-6.442,0.229],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[12.006,15.242],[5.093,10.014],[-6.135,41.93],[5.277,-3.809]],"v":[[6.905,89.332],[40.93,27.954],[32.867,12.932],[46.226,11.596],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-92.057,4.481],[-65.118,33.06],[-69.838,64.217],[-10.715,89.332]],"c":true}]},{"t":87,"s":[{"i":[[-5.793,0.469],[-9.882,27.03],[-1.816,6.746],[-0.184,4.263],[3.476,11.513],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.03,-18.008],[-1.039,-7.183],[-4.464,-12.429],[-13.272,-1.636]],"o":[[12.176,-0.985],[1.707,-4.67],[1.671,-6.21],[1.329,-30.748],[-1.712,-5.669],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.019,11.418],[1.205,8.333],[6.355,17.694],[5.767,0.711]],"v":[[6.319,101.943],[44.646,58.552],[49.535,39.225],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-52.21,5.966],[-49.611,33.886],[-41.768,62.977],[-8.532,101.726]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.452902520872,0.620914952895,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.393,0.897,0.924,0.5,0.196,0.774,0.881,1,0,0.651,0.838]}},"s":{"a":0,"k":[-184,-92]},"e":{"a":0,"k":[-187.809,102.794]},"t":1,"nm":"Gradient_DjLtsFwTXS","hd":false},{"ty":"tr","p":{"a":0,"k":[512,512.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[255.281,215.034]},"a":{"a":0,"k":[511.25,509.5]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"balooon","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.109,0],[0,0]],"o":[[0,0],[7.109,0],[0,0]],"v":[[-4.725,-9.63],[0.089,9.63],[4.623,-9.63]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.450980422076,0.619607843137,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.027450982262,0.666666666667,0.84313731474,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,315.618]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,223.271]},"a":{"a":0,"k":[254.578,223.521]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":29.244,"s":[90,110]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":45.83,"s":[110,90]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":62.416,"s":[90,110]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":79,"s":[110,90]},{"t":95.5859375,"s":[90,110]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.758,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50.807,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":51.635,"s":[{"i":[[0,0],[-6.117,-23.74],[-28.956,-52.995]],"o":[[0,0],[13.682,53.098],[22.599,41.361]],"v":[[1.722,-90.458],[12.265,-58.635],[-1.097,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75.686,"s":[{"i":[[-0.4,-26.92],[6.383,-58.635],[0,0]],"o":[[-21.596,64.546],[-1.601,14.708],[0,0]],"v":[[1.919,-90.458],[12.189,59.848],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":76.514,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"t":100.5625,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.815322157916,0.900968244964,0.994771082261,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":38,"s":[1]},{"i":{"x":[0.663],"y":[0.785]},"o":{"x":[0.157],"y":[0]},"t":54.953,"s":[61]},{"i":{"x":[0.797],"y":[1]},"o":{"x":[0.436],"y":[-0.619]},"t":67.391,"s":[20.088]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":70.709,"s":[25]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":83.977,"s":[61]},{"t":111.34375,"s":[61]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[253.053,407.037]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":38,"op":78,"st":21,"bm":0},{"ddd":0,"ind":20,"ty":0,"nm":"slap","refId":"comp_1","sr":1,"ks":{"r":{"a":0,"k":-91},"p":{"a":0,"k":[169.5,122,0]},"a":{"a":0,"k":[140,117.5,0]},"s":{"a":0,"k":[45.745,45.745,100]}},"ao":0,"w":280,"h":235,"ip":79,"op":85,"st":79,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"11","sr":1,"ks":{"r":{"a":0,"k":-6.506},"p":{"a":1,"k":[{"i":{"x":0.538,"y":0.242},"o":{"x":0.167,"y":0.167},"t":33,"s":[424.87,229.576,0],"to":[-113.38,-117.097,0],"ti":[42.038,65.476,0]},{"i":{"x":0.619,"y":1},"o":{"x":0.21,"y":1},"t":60,"s":[105.538,160.476,0],"to":[-14.895,-23.199,0],"ti":[-35.202,-21.185,0]},{"t":81,"s":[173.87,140.076,0]}]},"a":{"a":0,"k":[256,306.275,0]},"s":{"a":1,"k":[{"i":{"x":[0.517,0.517,0.517],"y":[1,1,1]},"o":{"x":[0.315,0.315,0.315],"y":[0.029,0.029,2.082]},"t":33,"s":[0,0,100]},{"i":{"x":[0.517,0.517,0.517],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":35,"s":[35.5,35.5,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":63,"s":[49,49,100]},{"t":81,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.311,496.464],[465.312,498.214]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.879,"s":[{"i":[[-7.125,-4.375],[1.5,21.375]],"o":[[-6.75,-3.375],[3.125,25.5]],"v":[[439.5,530.75],[410.125,499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65.709,"s":[{"i":[[0.871,22.343],[38.508,4.562]],"o":[[2.496,22.468],[39.008,4.437]],"v":[[613.75,489.75],[567.11,525.786]],"c":true}]},{"t":82,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.807,496.759],[465.807,498.509]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.898039275525,0.454901990704,0.156862745098,1]},"o":{"a":0,"k":50},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[-0.906,2.369],[-0.676,31.14],[-0.472,4.82],[0.797,4.744],[0.555,4.875],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[0.349,-3.76],[0.473,-4.833],[-3.824,-29.125],[-0.153,-1.238],[0.104,-12.555],[-0.332,0]],"v":[[510.339,612.819],[512.947,560.062],[514.524,546.906],[514.387,532.25],[513.979,467.474],[513.614,457.099],[510.207,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.879,"s":[{"i":[[25.066,0],[-12.145,32.875],[-0.318,5.956],[8.073,3.528],[-44.391,3.875],[-3.41,8.375],[-20.586,0]],"o":[[-25.066,0],[1.354,-3.665],[0.319,-5.972],[-39.898,-17.438],[11.257,-0.983],[5.083,-12.484],[20.586,0]],"v":[[465.465,615.375],[440.02,561],[444.299,545.503],[434.773,529.5],[448.641,459.75],[471.285,449.375],[509.914,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65.709,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.719,9.609],[-7.482,-1.433],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.255,-3.413],[66.602,12.758],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[573.481,561.374],[544.821,525.865],[564.522,524.841],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"t":82,"s":[{"i":[[-0.906,2.369],[-0.676,31.14],[-0.472,4.82],[0.797,4.744],[0.555,4.875],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[0.349,-3.76],[0.473,-4.833],[-3.824,-29.125],[-0.153,-1.238],[0.104,-12.555],[-0.332,0]],"v":[[510.339,612.819],[512.947,560.062],[514.524,546.906],[514.387,532.25],[513.979,467.474],[513.614,457.099],[510.207,409.5]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.572549045086,0.031372550875,1]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64.879,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65.709,"s":[0]},{"t":82,"s":[100]}]},"w":{"a":0,"k":3},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65.709,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]},{"t":82,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":49,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":65.709,"s":[24]},{"t":82,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[577.467,481.038]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65.709,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-39.972,30.672],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"t":82,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[467.626,460.618]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.445,73.742],[-54.689,63.17],[-18.449,15.821],[-70.059,7.574],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[56.509,24.315],[51.127,30.695],[50.286,40.27],[9.572,73.754]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[3.792,1.874],[8.19,23.284],[1.193,11.478],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-13.908,-41.954],[-0.844,-4.117],[0.574,-17.588],[1.027,-9.186],[2.499,-9.673],[7.991,-2.081]],"o":[[-3.445,-1.703],[-2.315,-6.582],[-1.031,-9.924],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[2.082,6.279],[4.679,22.836],[-0.097,2.962],[-1.164,10.412],[-6.217,24.058],[-3.516,0.916]],"v":[[-6.522,92.832],[-29.064,60.631],[-34.014,33.839],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[27.848,-53.805],[32.326,-36.554],[37.501,12.505],[35.67,33.353],[30.913,59.554],[7.109,93.821]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65.709,"s":[{"i":[[5.601,-4.559],[-1.765,26.779],[1.219,14.319],[13.51,15.089],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[82.365,8.225],[1.119,-2.544],[-2.543,-2.208],[27.777,22.927]],"o":[[-29.1,23.689],[0.89,-13.501],[-0.716,-8.412],[-23.607,-26.366],[7.027,0.425],[19.009,-48.344],[2.628,6.422],[45.96,-2.921],[-8.631,-0.862],[-1.295,2.944],[67.833,58.912],[-5.57,-4.597]],"v":[[-9.445,73.742],[-52.938,61.294],[-49.082,32.45],[-72.685,9.074],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[37.88,8.061],[20.369,12.565],[25.03,27.517],[9.572,73.754]],"c":true}]},{"t":82,"s":[{"i":[[3.792,1.874],[8.19,23.284],[1.193,11.478],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-13.908,-41.954],[-0.844,-4.117],[0.574,-17.588],[1.027,-9.186],[2.499,-9.673],[7.991,-2.081]],"o":[[-3.445,-1.703],[-2.315,-6.582],[-1.031,-9.924],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[2.082,6.279],[4.679,22.836],[-0.097,2.962],[-1.164,10.412],[-6.217,24.058],[-3.516,0.916]],"v":[[-6.522,92.832],[-29.064,60.631],[-34.014,33.839],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[27.848,-53.805],[32.326,-36.554],[37.501,12.505],[35.67,33.353],[30.913,59.554],[7.109,93.821]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.447,0.5,1,0.865,0.224,1,1,0.729,0]}},"s":{"a":0,"k":[-184.004,-76.56]},"e":{"a":0,"k":[-187.174,85.547]},"t":1,"nm":"Gradient_nOQRf2qsS7","hd":false},{"ty":"tr","p":{"a":0,"k":[510.004,508.06]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.905,89.332],[61.185,42.958],[61.749,34.437],[66.481,27.975],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-94.558,6.232],[-35.111,14.18],[-69.838,64.217],[-10.715,89.332]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":49,"s":[{"i":[[-5.793,0.469],[-9.882,27.03],[-1.816,6.746],[-0.184,4.263],[3.476,11.513],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.03,-18.008],[-1.039,-7.183],[-4.464,-12.429],[-13.272,-1.636]],"o":[[12.176,-0.985],[1.707,-4.67],[1.671,-6.21],[1.329,-30.748],[-1.712,-5.669],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.019,11.418],[1.205,8.333],[6.355,17.694],[5.767,0.711]],"v":[[6.319,101.943],[44.646,58.552],[49.535,39.225],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-52.21,5.966],[-49.611,33.886],[-41.768,62.977],[-8.532,101.726]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65.709,"s":[{"i":[[-5.274,-3.814],[59.064,50.034],[-1.009,2.671],[-2.721,-0.548],[60.997,-2.167],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-16.767,-21.286],[-4.43,-8.711],[2.54,-17.361],[-26.548,19.164]],"o":[[44.827,32.417],[-2.27,-1.923],[0.942,-2.492],[80.15,16.13],[-6.442,0.229],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[12.006,15.242],[5.093,10.014],[-6.135,41.93],[5.277,-3.809]],"v":[[6.905,89.332],[40.93,27.954],[32.867,12.932],[46.226,11.596],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-92.057,4.481],[-65.118,33.06],[-69.838,64.217],[-10.715,89.332]],"c":true}]},{"t":82,"s":[{"i":[[-5.793,0.469],[-9.882,27.03],[-1.816,6.746],[-0.184,4.263],[3.476,11.513],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.03,-18.008],[-1.039,-7.183],[-4.464,-12.429],[-13.272,-1.636]],"o":[[12.176,-0.985],[1.707,-4.67],[1.671,-6.21],[1.329,-30.748],[-1.712,-5.669],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.019,11.418],[1.205,8.333],[6.355,17.694],[5.767,0.711]],"v":[[6.319,101.943],[44.646,58.552],[49.535,39.225],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-52.21,5.966],[-49.611,33.886],[-41.768,62.977],[-8.532,101.726]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.898039221764,0.454901963472,0.156862750649,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.875,0.369,0.5,1,0.71,0.184,1,1,0.545,0]}},"s":{"a":0,"k":[-184,-92]},"e":{"a":0,"k":[-187.809,102.794]},"t":1,"nm":"Gradient_nNc6FnBRIw","hd":false},{"ty":"tr","p":{"a":0,"k":[512,512.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[255.281,215.034]},"a":{"a":0,"k":[511.25,509.5]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"balooon","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.109,0],[0,0]],"o":[[0,0],[7.109,0],[0,0]],"v":[[-4.725,-9.63],[0.089,9.63],[4.623,-9.63]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.898039221764,0.454901963472,0.156862750649,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.54509806633,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,311.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,223.521]},"a":{"a":0,"k":[254.578,223.521]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":26.539,"s":[100,100]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":43.123,"s":[90,110]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":59.709,"s":[110,90]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":76.295,"s":[90,110]},{"t":92.87890625,"s":[110,90]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.586,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40.635,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41.465,"s":[{"i":[[0,0],[-6.117,-23.74],[-28.956,-52.995]],"o":[[0,0],[13.682,53.098],[22.599,41.361]],"v":[[1.722,-90.458],[12.265,-58.635],[-1.097,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65.514,"s":[{"i":[[-0.4,-26.92],[6.383,-58.635],[0,0]],"o":[[-21.596,64.546],[-1.601,14.708],[0,0]],"v":[[1.919,-90.458],[12.189,59.848],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":66.344,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"t":90.390625,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.811764705882,0.901604267195,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[0]},{"t":70.48828125,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[253.053,407.037]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":33,"op":79,"st":24,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"12","sr":1,"ks":{"r":{"a":0,"k":1.197},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[421.246,211.879,0],"to":[55.487,-79.905,0],"ti":[42.26,6.62,0]},{"i":{"x":0.619,"y":1},"o":{"x":0.167,"y":0.167},"t":57,"s":[309.662,108.023,0],"to":[-21.06,-3.299,0],"ti":[10.302,-7.566,0]},{"t":78,"s":[265.246,115.879,0]}]},"a":{"a":0,"k":[256,306.275,0]},"s":{"a":1,"k":[{"i":{"x":[0.479,0.479,0.479],"y":[1,1,1]},"o":{"x":[0.356,0.356,0.356],"y":[0.025,0.025,2.565]},"t":33,"s":[0,0,100]},{"i":{"x":[0.479,0.479,0.479],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":35,"s":[37.5,37.5,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":60,"s":[35.5,35.5,100]},{"t":78,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":36,"s":[{"i":[[-8.563,31.024],[18.5,17.75]],"o":[[-23.179,9.555],[-0.503,45.167]],"v":[[517.26,513.492],[444.349,503.098]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44.807,"s":[{"i":[[-12.25,15.875],[18.5,17.75]],"o":[[-23.5,1.5],[-1.625,38.875]],"v":[[498.625,517.5],[434.25,501.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50.611,"s":[{"i":[[-15.75,2.875],[2.625,33.375]],"o":[[-19.625,5.125],[2.5,33.5]],"v":[[469.75,524],[410.125,499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":51.441,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":60.562,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":68.025,"s":[{"i":[[8.189,59.335],[21.124,3.466]],"o":[[-22.5,26.625],[28.402,20.507]],"v":[[579.779,491.202],[498.01,524.629]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75.488,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"t":84.611328125,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.062745098039,0.443137284821,0.807843197093,1]},"o":{"a":0,"k":50},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":36,"s":[{"i":[[7.367,4.157],[-15.962,20.935],[-0.419,5.206],[2.064,4.224],[-12.88,9.655],[-0.675,9.778],[-6.774,0]],"o":[[-5.895,-3.504],[1.934,-4.055],[0.42,-5.22],[-23.232,-14.914],[4.164,-2.93],[1.796,-12.531],[6.774,0]],"v":[[485.008,612.805],[491.252,548.222],[495.162,533.782],[493.502,518.668],[490.569,469.102],[497.397,449.375],[510.108,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44.807,"s":[{"i":[[11.271,5.001],[-21.483,22.219],[-0.395,5.388],[4.329,4.362],[-19.712,10.534],[-1.339,9.438],[-10.127,0]],"o":[[-9.501,-4.216],[3.267,-3.656],[0.396,-5.402],[-31.33,-16.625],[6.082,-3.25],[2.594,-12.519],[10.127,0]],"v":[[473.501,612.966],[479.983,547.781],[486.162,533.704],[481.33,518.375],[480.668,471],[491.058,449.375],[510.061,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50.611,"s":[{"i":[[25.066,0],[-2.709,18.878],[3.826,8.747],[18.227,15.875],[-44.391,3.875],[-3.41,8.375],[-20.586,0]],"o":[[-25.066,0],[3.73,-26],[-3.886,-8.885],[-16.515,-14.384],[11.257,-0.983],[5.083,-12.484],[20.586,0]],"v":[[465.465,615.375],[437.52,576],[475.924,527.503],[419.523,519.125],[448.641,459.75],[471.285,449.375],[509.914,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":51.441,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":60.562,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":68.025,"s":[{"i":[[-9.426,0.527],[3.336,30.533],[-0.525,4.423],[-1.674,5.011],[16.277,5.225],[2.182,11.243],[7.649,0]],"o":[[9.613,-0.445],[-0.002,-3.793],[0.527,-4.435],[11.243,-31.005],[-4.144,-1.327],[-1.638,-12.579],[-7.649,0]],"v":[[534.712,612.192],[538.458,559.735],[539.089,547.396],[542.236,533.212],[537.778,467.105],[529.364,456.73],[510.31,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75.488,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"t":84.611328125,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.176470588235,0.61568627451,1,1]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":36,"s":[66.014]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":51.441,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":68.025,"s":[66.014]},{"t":84.611328125,"s":[0]}]},"w":{"a":0,"k":3},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":36,"s":[{"i":[[-4.985,-4.102],[-3.554,-4.626]],"o":[[4.45,2.507],[12.17,7.144]],"v":[[-30.461,-3.879],[-17.21,6.852]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":51.441,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":68.025,"s":[{"i":[[-4.985,-4.102],[-3.554,-4.626]],"o":[[4.45,2.507],[12.17,7.144]],"v":[[-30.461,-3.879],[-17.21,6.852]],"c":false}]},{"t":84.611328125,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":36,"s":[8.157]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":51.441,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":68.025,"s":[8.157]},{"t":84.611328125,"s":[24]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[577.467,481.038]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":36,"s":[{"i":[[-0.472,4.593],[-7.623,2.539],[-3.528,9.553],[-7.812,0]],"o":[[0.706,-6.267],[4.543,-2.418],[3.761,-10.186],[7.812,0]],"v":[[-5.476,33.425],[7.073,18.693],[21.053,-4.994],[43.07,-32.939]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":51.441,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":68.025,"s":[{"i":[[-0.472,4.593],[-7.623,2.539],[-3.528,9.553],[-7.812,0]],"o":[[0.706,-6.267],[4.543,-2.418],[3.761,-10.186],[7.812,0]],"v":[[-5.476,33.425],[7.073,18.693],[21.054,-4.994],[43.07,-32.939]],"c":false}]},{"t":84.611328125,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[467.626,460.618]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":36,"s":[{"i":[[4.458,-1.658],[-2.702,28.332],[0.653,11.426],[5.665,4.649],[-18.371,11.345],[-2.317,6.432],[-14.026,-45.509],[-2.91,-2.568],[15.965,-19.373],[0.411,-7.049],[-0.265,-10.052],[17.692,6.636]],"o":[[-17.599,6.545],[2.224,-16.938],[-0.653,-11.426],[-11.402,-10.107],[3.058,-2.631],[15.412,-42.542],[1.948,6.42],[18.709,14.082],[-0.839,2.551],[-0.477,7.198],[5.65,39.486],[-4.442,-1.666]],"v":[[-6.823,86.707],[-43.572,61.351],[-29.82,26.814],[-47.266,7.929],[-35.626,-38.619],[-26.731,-52.763],[27.766,-51.604],[35.261,-38.773],[47.576,15.282],[45.669,28.97],[45.277,54.319],[8.554,86.712]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":51.441,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.445,73.742],[-54.689,63.17],[-18.449,15.821],[-70.059,7.574],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[56.509,24.315],[51.127,30.695],[50.286,40.27],[9.572,73.754]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":68.025,"s":[{"i":[[4.458,-1.658],[-2.702,28.332],[0.653,11.426],[5.665,4.649],[-18.371,11.345],[-2.317,6.432],[-14.026,-45.509],[-2.91,-2.568],[15.965,-19.373],[0.411,-7.049],[-0.265,-10.052],[17.692,6.636]],"o":[[-17.599,6.545],[2.224,-16.938],[-0.653,-11.426],[-11.402,-10.107],[3.058,-2.631],[15.412,-42.542],[1.948,6.42],[18.709,14.082],[-0.839,2.551],[-0.477,7.198],[5.65,39.486],[-4.442,-1.666]],"v":[[-6.823,86.707],[-43.572,61.351],[-29.82,26.814],[-47.266,7.929],[-35.626,-38.619],[-26.731,-52.763],[27.766,-51.604],[35.261,-38.773],[47.576,15.282],[45.669,28.97],[45.277,54.319],[8.554,86.712]],"c":true}]},{"t":84.611328125,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.445,73.742],[-54.689,63.17],[-18.449,15.821],[-70.059,7.574],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[56.509,24.315],[51.127,30.695],[50.286,40.27],[9.572,73.754]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.393,0.779,1,0.5,0.197,0.621,1,1,0,0.463,1]}},"s":{"a":0,"k":[7.996,-79.56]},"e":{"a":0,"k":[10.826,49.547]},"t":1,"nm":"Gradient_tH9QTnY4vK","hd":false},{"ty":"tr","p":{"a":0,"k":[510.004,508.06]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":36,"s":[{"i":[[-5.781,-1.021],[5.349,50.111],[-0.335,5.682],[-0.738,3.458],[22.406,11.428],[2.515,5.936],[22.413,-52.919],[3.315,-4.14],[-6.579,-18.541],[-1.201,-10.635],[1.192,-24.401],[-29.073,5.137]],"o":[[29.056,5.131],[-0.226,-4.422],[0.313,-5.243],[15.524,-30.374],[-3.682,-3.649],[-22.348,-52.741],[-2.514,5.936],[-21.263,12.913],[6.915,16.093],[1.201,10.636],[-2.031,36.013],[5.779,-1.021]],"v":[[8.43,97.656],[59.176,48.368],[59.413,32.21],[61.028,20.534],[47.619,-48.424],[38.318,-63.419],[-40.646,-63.419],[-49.122,-48.424],[-66.126,6.233],[-46.131,25.134],[-59.775,62.881],[-10.866,97.656]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":51.441,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.905,89.332],[61.185,42.958],[61.749,34.437],[66.481,27.975],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-94.558,6.232],[-35.111,14.18],[-69.838,64.217],[-10.715,89.332]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":68.025,"s":[{"i":[[-5.781,-1.021],[5.349,50.111],[-0.335,5.682],[-0.738,3.458],[22.406,11.428],[2.515,5.936],[22.413,-52.919],[3.315,-4.14],[-6.579,-18.541],[-1.201,-10.635],[1.192,-24.401],[-29.073,5.137]],"o":[[29.056,5.131],[-0.226,-4.422],[0.313,-5.243],[15.524,-30.374],[-3.682,-3.649],[-22.348,-52.741],[-2.514,5.936],[-21.263,12.913],[6.915,16.093],[1.201,10.635],[-2.031,36.013],[5.779,-1.021]],"v":[[8.43,97.656],[59.176,48.368],[59.413,32.21],[61.028,20.534],[47.619,-48.424],[38.318,-63.419],[-40.646,-63.419],[-49.122,-48.424],[-66.126,6.233],[-46.131,25.134],[-59.775,62.881],[-10.866,97.656]],"c":true}]},{"t":84.611328125,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.905,89.332],[61.185,42.958],[61.749,34.437],[66.481,27.975],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-94.558,6.232],[-35.111,14.18],[-69.838,64.217],[-10.715,89.332]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.037965531443,0.691503188189,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.369,0.591,1,0.5,0.184,0.331,1,1,0,0.071,1]}},"s":{"a":0,"k":[-184,-92]},"e":{"a":0,"k":[-187.809,102.794]},"t":1,"nm":"Gradient_8QqlYsOR0v","hd":false},{"ty":"tr","p":{"a":0,"k":[512,512.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[255.281,215.034]},"a":{"a":0,"k":[511.25,509.5]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"balooon","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.109,0],[0,0]],"o":[[0,0],[7.109,0],[0,0]],"v":[[-4.725,-9.63],[0.089,9.63],[4.623,-9.63]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.062745098039,0.443137284821,0.807843197093,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.027450982262,0.545098039216,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,311.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,223.271]},"a":{"a":0,"k":[254.578,223.521]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":36,"s":[100,100]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":52.27,"s":[90,110]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":68.855,"s":[110,90]},{"t":85.44140625,"s":[90,110]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.1,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43.146,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":43.977,"s":[{"i":[[0,0],[-6.117,-23.74],[-28.956,-52.995]],"o":[[0,0],[13.682,53.098],[22.599,41.361]],"v":[[1.722,-90.458],[12.265,-58.635],[-1.097,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":68.025,"s":[{"i":[[-0.4,-26.92],[6.383,-58.635],[0,0]],"o":[[-21.596,64.546],[-1.601,14.708],[0,0]],"v":[[1.919,-90.458],[12.189,59.848],[5.635,90.458]],"c":false}]},{"t":68.85546875,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.908497051164,0.952168962067,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[0]},{"t":73,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[253.053,407.037]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":33,"op":76,"st":20,"bm":0},{"ddd":0,"ind":23,"ty":0,"nm":"slap","refId":"comp_1","sr":1,"ks":{"r":{"a":0,"k":12},"p":{"a":0,"k":[84.5,242.5,0]},"a":{"a":0,"k":[140,117.5,0]},"s":{"a":0,"k":[70.198,76.243,100]}},"ao":0,"w":280,"h":235,"ip":73,"op":79,"st":73,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"6","sr":1,"ks":{"r":{"a":0,"k":-8.051},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[410.2,232.146,0],"to":[-25.48,-134.839,0],"ti":[82.52,-11.16,0]},{"i":{"x":0.619,"y":1},"o":{"x":0.167,"y":0.167},"t":54,"s":[216.874,150.062,0],"to":[-26.637,3.602,0],"ti":[33.989,-54.302,0]},{"t":75,"s":[93.2,229.646,0]}]},"a":{"a":0,"k":[256,306.275,0]},"s":{"a":1,"k":[{"i":{"x":[0.408,0.408,0.408],"y":[1,1,1]},"o":{"x":[0.425,0.425,0.425],"y":[0.049,0.049,3.593]},"t":33,"s":[0,0,100]},{"i":{"x":[0.408,0.408,0.408],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":35,"s":[51,51,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":57,"s":[70,70,100]},{"t":75,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.75,505],[465.75,506.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37.807,"s":[{"i":[[-12.25,15.875],[18.5,17.75]],"o":[[-23.5,1.5],[-1.625,38.875]],"v":[[498.625,517.5],[434.25,501.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41.953,"s":[{"i":[[-15.75,2.875],[2.625,33.375]],"o":[[-19.625,5.125],[2.5,33.5]],"v":[[469.75,524],[410.125,499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42.783,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":48.586,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":60,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.75,505],[465.75,506.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.146,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"t":75.953125,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.705882352941,0,0.286274509804,1]},"o":{"a":0,"k":50},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27,"s":[{"i":[[-0.906,2.369],[-4.263,18.214],[-0.472,4.82],[-2.736,3.93],[1.599,7.792],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[-0.89,-4.901],[0.473,-4.833],[-6.071,-11.289],[0.098,-2.251],[0.104,-12.555],[-0.332,0]],"v":[[509.392,612.464],[515.131,549.155],[514.235,533.945],[519.295,519.289],[511.551,465.079],[510.83,449.375],[510.207,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37.807,"s":[{"i":[[11.271,5.001],[-21.483,22.219],[-0.395,5.388],[4.329,4.362],[-19.712,10.534],[-1.339,9.438],[-10.127,0]],"o":[[-9.501,-4.216],[3.267,-3.656],[0.396,-5.402],[-31.33,-16.625],[6.082,-3.25],[2.594,-12.519],[10.127,0]],"v":[[473.501,612.966],[479.983,547.781],[486.162,533.704],[481.33,518.375],[480.668,471],[491.058,449.375],[510.061,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41.953,"s":[{"i":[[25.066,0],[-2.709,18.878],[3.826,8.747],[18.227,15.875],[-44.391,3.875],[-3.41,8.375],[-20.586,0]],"o":[[-25.066,0],[3.73,-26],[-3.886,-8.885],[-16.515,-14.384],[11.257,-0.983],[5.083,-12.484],[20.586,0]],"v":[[465.465,615.375],[437.52,576],[475.924,527.503],[419.523,519.125],[448.641,459.75],[471.285,449.375],[509.914,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42.783,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":48.586,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":60,"s":[{"i":[[-0.906,2.369],[-0.676,31.14],[-0.472,4.82],[0.797,4.744],[0.555,4.875],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[0.349,-3.76],[0.473,-4.833],[-3.824,-29.125],[-0.153,-1.238],[0.104,-12.555],[-0.332,0]],"v":[[510.339,612.819],[512.947,560.062],[514.524,546.906],[514.387,532.25],[513.979,467.474],[513.614,457.099],[510.207,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.146,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"t":75.953125,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.070588235294,0.509803921569,1]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":27,"s":[100]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":42.783,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":60,"s":[100]},{"t":75.953125,"s":[0]}]},"w":{"a":0,"k":3},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":42.783,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":60,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]},{"t":75.953125,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":27,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":42.783,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":60,"s":[0]},{"t":75.953125,"s":[24]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[577.467,481.038]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":42.783,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":60,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]},{"t":75.953125,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[467.626,460.618]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27,"s":[{"i":[[3.645,0.118],[0.057,28.368],[-0.01,9.977],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-10.811,-43.431],[-0.844,-4.117],[-0.442,-13.119],[-0.008,-9.243],[0.047,-13.382],[14.463,-0.472]],"o":[[-14.388,-0.465],[-0.027,-13.751],[0.01,-9.977],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[1.598,6.419],[4.679,22.836],[0.1,2.962],[0.008,9.244],[-0.084,24.242],[-3.632,0.118]],"v":[[-5.462,93.821],[-35.623,61.372],[-35.674,32.473],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[25.807,-53.004],[28.942,-38.771],[37.501,12.505],[37.647,29.642],[37.528,62.643],[7.109,93.821]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":42.783,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.445,73.742],[-54.689,63.17],[-18.449,15.821],[-70.059,7.574],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[56.509,24.315],[51.127,30.695],[50.286,40.27],[9.572,73.754]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":60,"s":[{"i":[[3.792,1.874],[8.19,23.284],[1.193,11.478],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-13.908,-41.954],[-0.844,-4.117],[0.574,-17.588],[1.027,-9.186],[2.499,-9.673],[7.991,-2.081]],"o":[[-3.445,-1.703],[-2.315,-6.582],[-1.031,-9.924],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[2.082,6.279],[4.679,22.836],[-0.097,2.962],[-1.164,10.412],[-6.217,24.058],[-3.516,0.916]],"v":[[-6.522,92.832],[-29.064,60.631],[-34.014,33.839],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[27.848,-53.805],[32.326,-36.554],[37.501,12.505],[35.67,33.353],[30.913,59.554],[7.109,93.821]],"c":true}]},{"t":75.953125,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.445,73.742],[-54.689,63.17],[-18.449,15.821],[-70.059,7.574],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[56.509,24.315],[51.127,30.695],[50.286,40.27],[9.572,73.754]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.948,0.642,0.5,1,0.656,0.623,1,1,0.365,0.604]}},"s":{"a":0,"k":[-184.004,-76.56]},"e":{"a":0,"k":[-187.174,85.547]},"t":1,"nm":"Gradient_HdiE9G3rng","hd":false},{"ty":"tr","p":{"a":0,"k":[510.004,508.06]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":27,"s":[{"i":[[-5.781,0.601],[-0.323,40.051],[0.062,7.102],[0.108,4.266],[6.966,16.874],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.241,-18.578],[0.044,-10.635],[-0.026,-23.02],[-29.073,-3.023]],"o":[[29.056,-3.019],[0.041,-5.065],[-0.057,-6.537],[-0.659,-26.835],[-2.26,-5.473],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.188,14.446],[-0.044,10.635],[0.035,30.865],[5.779,0.601]],"v":[[8.327,101.399],[52.34,51.895],[52.381,32.224],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-51.489,6.233],[-51.805,30.773],[-51.723,62.881],[-10.969,101.399]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":42.783,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.905,89.332],[61.185,42.958],[61.749,34.437],[66.481,27.975],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-94.558,6.232],[-35.111,14.18],[-69.838,64.217],[-10.715,89.332]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":60,"s":[{"i":[[-5.793,0.469],[-9.882,27.03],[-1.816,6.746],[-0.184,4.263],[3.476,11.513],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.03,-18.008],[-1.039,-7.183],[-4.464,-12.429],[-13.272,-1.636]],"o":[[12.176,-0.985],[1.707,-4.67],[1.671,-6.21],[1.329,-30.748],[-1.712,-5.669],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.019,11.418],[1.205,8.333],[6.355,17.694],[5.767,0.711]],"v":[[6.319,101.943],[44.646,58.552],[49.535,39.225],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-52.21,5.966],[-49.611,33.886],[-41.768,62.977],[-8.532,101.726]],"c":true}]},{"t":75.953125,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.905,89.332],[61.185,42.958],[61.749,34.437],[66.481,27.975],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-94.558,6.232],[-35.111,14.18],[-69.838,64.217],[-10.715,89.332]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.70457500383,0,0.287356716979,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.369,0.933,0.5,1,0.184,0.67,1,1,0,0.408]}},"s":{"a":0,"k":[-184,-92]},"e":{"a":0,"k":[-187.809,102.794]},"t":1,"nm":"Gradient_88WLE7C1yW","hd":false},{"ty":"tr","p":{"a":0,"k":[512,512.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[255.281,215.034]},"a":{"a":0,"k":[511.25,509.5]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"balooon","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.109,0],[0,0]],"o":[[0,0],[7.109,0],[0,0]],"v":[[-4.725,-9.63],[0.089,9.63],[4.623,-9.63]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.705882352941,0,0.286274509804,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.01568627451,0.431372578939,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,311.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,223.271]},"a":{"a":0,"k":[254.578,223.521]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":17.904,"s":[90,110]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":34.488,"s":[110,90]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":51.074,"s":[90,110]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":67.66,"s":[110,90]},{"t":84.244140625,"s":[90,110]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.416,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":39.465,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40.295,"s":[{"i":[[0,0],[-6.117,-23.74],[-28.956,-52.995]],"o":[[0,0],[13.682,53.098],[22.599,41.361]],"v":[[1.722,-90.458],[12.265,-58.635],[-1.097,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.344,"s":[{"i":[[-0.4,-26.92],[6.383,-58.635],[0,0]],"o":[[-21.596,64.546],[-1.601,14.708],[0,0]],"v":[[1.919,-90.458],[12.189,59.848],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65.172,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"t":89.220703125,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.688701016295,0.824797806085,0.973856129366,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":27,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":59.367,"s":[100]},{"t":102.48828125,"s":[59]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[253.053,407.037]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":33,"op":73,"st":10,"bm":0},{"ddd":0,"ind":25,"ty":0,"nm":"slap","refId":"comp_1","sr":1,"ks":{"r":{"a":0,"k":-86},"p":{"a":0,"k":[112.5,425,0]},"a":{"a":0,"k":[140,117.5,0]},"s":{"a":0,"k":[52.173,52.808,100]}},"ao":0,"w":280,"h":235,"ip":79,"op":85,"st":79,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"8","sr":1,"ks":{"r":{"a":0,"k":-3.893},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[107.577,186.9,0],"to":[109.227,-68.805,0],"ti":[28.1,-89.362,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":60,"s":[132.019,345.954,0],"to":[-6.753,21.477,0],"ti":[-8.487,-37.521,0]},{"t":81,"s":[112.577,443.4,0]}]},"a":{"a":0,"k":[256,306.275,0]},"s":{"a":1,"k":[{"i":{"x":[0.545,0.545,0.545],"y":[1,1,1]},"o":{"x":[0.285,0.285,0.285],"y":[0.117,0.117,6.704]},"t":31,"s":[0,0,100]},{"i":{"x":[0.545,0.545,0.545],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":36,"s":[43,43,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":63,"s":[75.5,75.5,100]},{"t":81,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.75,505],[465.75,506.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42.146,"s":[{"i":[[-12.25,15.875],[18.5,17.75]],"o":[[-23.5,1.5],[-1.625,38.875]],"v":[[498.625,517.5],[434.25,501.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46.295,"s":[{"i":[[-15.75,2.875],[2.625,33.375]],"o":[[-19.625,5.125],[2.5,33.5]],"v":[[469.75,524],[410.125,499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.123,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":52.93,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":64,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.75,505],[465.75,506.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74.488,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"t":80.294921875,"s":[{"i":[[0.871,22.343],[38.508,4.562]],"o":[[2.496,22.468],[39.008,4.437]],"v":[[613.75,489.75],[567.11,525.786]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.768627510819,0.309803921569,0,1]},"o":{"a":0,"k":50},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[-0.906,2.369],[-4.263,18.214],[-0.472,4.82],[-2.736,3.93],[1.599,7.792],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[-0.89,-4.901],[0.473,-4.833],[-6.071,-11.289],[0.098,-2.251],[0.104,-12.555],[-0.332,0]],"v":[[509.392,612.464],[515.131,549.155],[514.235,533.945],[519.295,519.289],[511.551,465.079],[510.83,449.375],[510.207,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42.146,"s":[{"i":[[11.271,5.001],[-21.483,22.219],[-0.395,5.388],[4.329,4.362],[-19.712,10.534],[-1.339,9.438],[-10.127,0]],"o":[[-9.501,-4.216],[3.267,-3.656],[0.396,-5.402],[-31.33,-16.625],[6.082,-3.25],[2.594,-12.519],[10.127,0]],"v":[[473.501,612.966],[479.983,547.781],[486.162,533.704],[481.33,518.375],[480.668,471],[491.058,449.375],[510.061,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46.295,"s":[{"i":[[25.066,0],[-2.709,18.878],[3.826,8.747],[18.227,15.875],[-44.391,3.875],[-3.41,8.375],[-20.586,0]],"o":[[-25.066,0],[3.73,-26],[-3.886,-8.885],[-16.515,-14.384],[11.257,-0.983],[5.083,-12.484],[20.586,0]],"v":[[465.465,615.375],[437.52,576],[475.924,527.503],[419.523,519.125],[448.641,459.75],[471.285,449.375],[509.914,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.123,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":52.93,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":64,"s":[{"i":[[-0.906,2.369],[-0.676,31.14],[-0.472,4.82],[0.797,4.744],[0.555,4.875],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[0.349,-3.76],[0.473,-4.833],[-3.824,-29.125],[-0.153,-1.238],[0.104,-12.555],[-0.332,0]],"v":[[510.339,612.819],[512.947,560.062],[514.524,546.906],[514.387,532.25],[513.979,467.474],[513.614,457.099],[510.207,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":74.488,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"t":80.294921875,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.719,9.609],[-7.482,-1.433],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.255,-3.413],[66.602,12.758],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[573.481,561.374],[544.821,525.865],[564.522,524.841],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.482352971096,0,1]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":31,"s":[100]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":47.123,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":64,"s":[100]},{"t":80.294921875,"s":[0]}]},"w":{"a":0,"k":3},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":47.123,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":64,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]},{"t":80.294921875,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":31,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":47.123,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":64,"s":[0]},{"t":80.294921875,"s":[24]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[577.467,481.038]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":47.123,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":64,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]},{"t":80.294921875,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-39.972,30.672],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[467.626,460.618]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[3.645,0.118],[0.057,28.368],[-0.01,9.977],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-10.811,-43.431],[-0.844,-4.117],[-0.442,-13.119],[-0.008,-9.243],[0.047,-13.382],[14.463,-0.472]],"o":[[-14.388,-0.465],[-0.027,-13.751],[0.01,-9.977],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[1.598,6.419],[4.679,22.836],[0.1,2.962],[0.008,9.244],[-0.084,24.242],[-3.632,0.118]],"v":[[-5.462,93.821],[-35.623,61.372],[-35.674,32.473],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[25.807,-53.004],[28.942,-38.771],[37.501,12.505],[37.647,29.642],[37.528,62.643],[7.109,93.821]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":47.123,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.494,74.003],[-54.737,63.43],[-18.498,16.082],[-70.108,7.834],[-45.845,-38.527],[-29.773,-48.875],[31.523,-48.623],[47.485,-38.516],[56.461,24.576],[51.078,30.955],[50.238,40.53],[9.523,74.015]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":64,"s":[{"i":[[3.792,1.874],[8.19,23.284],[1.193,11.478],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-13.908,-41.954],[-0.844,-4.117],[0.574,-17.588],[1.027,-9.186],[2.499,-9.673],[7.991,-2.081]],"o":[[-3.445,-1.703],[-2.315,-6.582],[-1.031,-9.924],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[2.082,6.279],[4.679,22.836],[-0.097,2.962],[-1.164,10.412],[-6.217,24.058],[-3.516,0.916]],"v":[[-6.571,93.092],[-29.113,60.892],[-34.063,34.099],[-35.581,8.373],[-30.439,-38.272],[-25.238,-54.371],[27.799,-53.545],[32.278,-36.294],[37.452,12.765],[35.622,33.614],[30.864,59.814],[7.06,94.082]],"c":true}]},{"t":80.294921875,"s":[{"i":[[5.601,-4.559],[-1.765,26.779],[1.219,14.319],[13.51,15.089],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[82.365,8.225],[1.119,-2.544],[-2.543,-2.208],[27.777,22.927]],"o":[[-29.1,23.689],[0.89,-13.501],[-0.716,-8.412],[-23.607,-26.366],[7.027,0.425],[19.009,-48.344],[2.628,6.422],[45.96,-2.921],[-8.631,-0.862],[-1.295,2.944],[67.833,58.912],[-5.57,-4.597]],"v":[[-9.494,74.003],[-52.987,61.555],[-49.131,32.711],[-72.734,9.335],[-45.845,-38.527],[-29.773,-48.875],[31.523,-48.623],[47.485,-38.516],[37.831,8.322],[20.32,12.826],[24.981,27.777],[9.523,74.015]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.808,0,0.5,1,0.62,0,1,1,0.431,0]}},"s":{"a":0,"k":[-184.004,-76.56]},"e":{"a":0,"k":[-187.174,85.547]},"t":1,"nm":"Gradient_PRfJrAstoH","hd":false},{"ty":"tr","p":{"a":0,"k":[510.053,507.8]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[-5.781,0.601],[-0.323,40.051],[0.062,7.102],[0.108,4.266],[6.966,16.874],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.241,-18.578],[0.044,-10.635],[-0.026,-23.02],[-29.073,-3.023]],"o":[[29.056,-3.019],[0.041,-5.065],[-0.057,-6.537],[-0.659,-26.835],[-2.26,-5.473],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.188,14.446],[-0.044,10.635],[0.035,30.865],[5.779,0.601]],"v":[[8.327,101.399],[52.34,51.895],[52.381,32.224],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-51.489,6.233],[-51.805,30.773],[-51.723,62.881],[-10.969,101.399]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":47.123,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.856,89.592],[61.137,43.218],[61.7,34.698],[66.432,28.235],[53.077,-53.118],[38.412,-63.162],[-40.552,-63.161],[-55.216,-53.118],[-94.607,6.492],[-35.16,14.441],[-69.886,64.477],[-10.764,89.592]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":64,"s":[{"i":[[-5.793,0.469],[-9.882,27.03],[-1.816,6.746],[-0.184,4.263],[3.476,11.513],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.03,-18.008],[-1.039,-7.183],[-4.464,-12.429],[-13.272,-1.636]],"o":[[12.176,-0.985],[1.707,-4.67],[1.671,-6.21],[1.329,-30.748],[-1.712,-5.669],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.019,11.418],[1.205,8.333],[6.355,17.694],[5.767,0.711]],"v":[[6.27,102.204],[44.597,58.812],[49.486,39.485],[52.11,18.441],[44.735,-45.613],[38.196,-63.157],[-40.768,-63.157],[-46.058,-45.613],[-52.258,6.226],[-49.659,34.146],[-41.817,63.238],[-8.581,101.987]],"c":true}]},{"t":80.294921875,"s":[{"i":[[-5.274,-3.814],[59.064,50.034],[-1.009,2.671],[-2.721,-0.548],[60.997,-2.167],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-16.767,-21.286],[-4.43,-8.711],[2.54,-17.361],[-26.548,19.164]],"o":[[44.827,32.417],[-2.27,-1.923],[0.942,-2.492],[80.15,16.13],[-6.442,0.229],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[12.006,15.242],[5.093,10.014],[-6.135,41.93],[5.277,-3.809]],"v":[[6.856,89.592],[40.881,28.214],[32.818,13.193],[46.177,11.856],[53.077,-53.118],[38.412,-63.162],[-40.552,-63.161],[-55.216,-53.118],[-92.106,4.742],[-65.167,33.321],[-69.886,64.477],[-10.764,89.592]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.767320101869,0.308551982805,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.651,0,0.5,0.95,0.491,0,1,0.901,0.332,0]}},"s":{"a":0,"k":[-184,-92]},"e":{"a":0,"k":[-187.809,102.794]},"t":1,"nm":"Gradient_C2g5hPIzzu","hd":false},{"ty":"tr","p":{"a":0,"k":[512.049,512.239]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[255.281,215.034]},"a":{"a":0,"k":[511.25,509.5]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"balooon","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.109,0],[0,0]],"o":[[0,0],[7.109,0],[0,0]],"v":[[-4.725,-9.63],[0.089,9.63],[4.623,-9.63]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.898039221764,0.454901963472,0.156862750649,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.54509806633,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,311.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,223.521]},"a":{"a":0,"k":[254.578,223.521]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":31.904,"s":[100,100]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":48.488,"s":[90,110]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":65.074,"s":[110,90]},{"t":81.66015625,"s":[90,110]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.953,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46.83,"s":[{"i":[[0,0],[-6.117,-23.74],[-28.956,-52.995]],"o":[[0,0],[13.682,53.098],[22.599,41.361]],"v":[[1.722,-90.458],[12.265,-58.635],[-1.097,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.879,"s":[{"i":[[-0.4,-26.92],[6.383,-58.635],[0,0]],"o":[[-21.596,64.546],[-1.601,14.708],[0,0]],"v":[[1.919,-90.458],[12.189,59.848],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":71.709,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"t":95.7578125,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.793464211857,0.892038083544,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":49,"s":[100]},{"t":75,"s":[55]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[253.053,407.037]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":31,"op":79,"st":22,"bm":0},{"ddd":0,"ind":27,"ty":4,"nm":"7","sr":1,"ks":{"r":{"a":0,"k":-8.9},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[115.123,197.656,0],"to":[76.458,-107.895,0],"ti":[-170.276,-36.122,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":57,"s":[261.516,479.326,0],"to":[0.276,-13.878,0],"ti":[-19.54,-1.432,0]},{"t":78,"s":[295.123,455.156,0]}]},"a":{"a":0,"k":[256,306.275,0]},"s":{"a":1,"k":[{"i":{"x":[0.518,0.518,0.518],"y":[1,1,1]},"o":{"x":[0.314,0.314,0.314],"y":[0.101,0.101,8.219]},"t":31,"s":[0,0,100]},{"i":{"x":[0.518,0.518,0.518],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":36,"s":[37,37,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":60,"s":[46,46,100]},{"t":78,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[3.5,25],[12.75,-8.959]],"o":[[5.25,24.25],[13.5,-9.959]],"v":[[615.75,489.75],[587.25,539.459]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.949,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.75,505],[465.75,506.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55.879,"s":[{"i":[[-12.25,15.875],[18.5,17.75]],"o":[[-23.5,1.5],[-1.625,38.875]],"v":[[498.625,517.5],[434.25,501.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63.34,"s":[{"i":[[-7.125,-4.375],[1.5,21.375]],"o":[[-6.75,-3.375],[3.125,25.5]],"v":[[439.5,530.75],[410.125,499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.17,"s":[{"i":[[7.875,36.75],[30.625,10.25]],"o":[[7.5,36.25],[29.625,9.875]],"v":[[615.75,489.75],[550,517.625]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73.293,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"t":80.94921875,"s":[{"i":[[-0.75,63.125],[18.5,17.75]],"o":[[-22.5,26.625],[1.875,58.5]],"v":[[556.75,505],[465.75,506.75]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.478431402468,0.400000029919,1]},"o":{"a":0,"k":50},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[-25.875,0],[6.375,37.5],[-0.625,3.685],[-6.266,5.508],[45.5,5.875],[4.875,12.625],[21.25,0]],"o":[[25.875,0],[-0.655,-3.855],[0.627,-3.695],[39.25,-34.5],[-11.562,-1.493],[-4.875,-12.625],[-21.25,0]],"v":[[556.125,614.875],[585.875,559.125],[584.75,548.308],[594,535],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.949,"s":[{"i":[[-0.906,2.369],[-0.676,31.14],[-0.472,4.82],[0.797,4.744],[0.555,4.875],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[0.349,-3.76],[0.473,-4.833],[-3.824,-29.125],[-0.153,-1.238],[0.104,-12.555],[-0.332,0]],"v":[[510.339,612.819],[512.947,560.062],[514.524,546.906],[514.387,532.25],[513.979,467.474],[513.614,457.099],[510.207,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55.879,"s":[{"i":[[11.271,5.001],[-6.41,32.008],[-0.395,5.388],[4.329,4.362],[-21.918,4.375],[-1.339,9.438],[-10.127,0]],"o":[[-9.501,-4.216],[0.851,-3.712],[0.396,-5.402],[-25.361,-26.438],[5.552,-1.11],[2.594,-12.519],[10.127,0]],"v":[[475.501,613.716],[476.483,560.531],[479.412,546.204],[474.58,530.875],[479.961,468],[491.101,457.625],[510.061,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63.34,"s":[{"i":[[25.066,0],[-12.145,32.875],[-0.318,5.956],[8.073,3.528],[-44.391,3.875],[-3.41,8.375],[-20.586,0]],"o":[[-25.066,0],[1.354,-3.665],[0.319,-5.972],[-39.898,-17.438],[11.257,-0.983],[5.083,-12.484],[20.586,0]],"v":[[465.465,615.375],[440.02,561],[444.299,545.503],[434.773,529.5],[448.641,459.75],[471.285,449.375],[509.914,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.17,"s":[{"i":[[-25.875,0],[5.875,20.5],[-6.747,11.104],[-15.75,10.125],[45.5,5.875],[4.875,12.625],[21.25,0]],"o":[[25.875,0],[-6.525,-22.767],[4.881,-8.033],[25.498,-16.391],[-11.562,-1.493],[-4.875,-12.625],[-21.25,0]],"v":[[556,613.25],[587.75,570],[548.997,523.396],[602.625,519.5],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73.293,"s":[{"i":[[-11.866,0],[11.235,14.609],[-0.541,4.31],[-9.095,3.541],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-4.631,-6.022],[0.542,-4.321],[16.662,-6.487],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[546.765,550.391],[539.501,534.162],[553.463,520.112],[539.345,459.75],[528.625,449.375],[510.339,409.5]],"c":false}]},{"t":80.94921875,"s":[{"i":[[-0.906,2.369],[-0.676,31.14],[-0.472,4.82],[0.797,4.744],[0.555,4.875],[0.732,10.5],[0.332,0]],"o":[[1.745,-1.997],[0.349,-3.76],[0.473,-4.833],[-3.824,-29.125],[-0.153,-1.238],[0.104,-12.555],[-0.332,0]],"v":[[510.339,612.819],[512.947,560.062],[514.524,546.906],[514.387,532.25],[513.979,467.474],[513.614,457.099],[510.207,409.5]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.03137254902,0.733333333333,0.341176470588,1]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":47.949,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":63.34,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":64.17,"s":[0]},{"t":80.94921875,"s":[100]}]},"w":{"a":0,"k":3},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[16.983,4.139]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.949,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.17,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.55,-4.149],[16.55,4.149]],"c":false}]},{"t":80.94921875,"s":[{"i":[[-2.086,-6.22],[-0.606,-3.425]],"o":[[1.275,3.804],[12.025,6.189]],"v":[[-37.846,-3.736],[-34.813,8.248]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":31,"s":[24]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":47.949,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":64.17,"s":[24]},{"t":80.94921875,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[577.467,481.038]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.949,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.17,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.78,32.932],[-7.172,15.987],[20.763,-4.987],[42.78,-32.932]],"c":false}]},{"t":80.94921875,"s":[{"i":[[0.106,3.074],[-0.388,3.7],[-3.528,9.553],[-7.812,0]],"o":[[-0.132,-3.808],[0.375,-3.578],[3.761,-10.186],[7.812,0]],"v":[[13.506,33.683],[14.184,20.091],[20.98,-4.992],[42.997,-32.937]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[467.626,460.618]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[6.039,-5.108],[-8.061,28.263],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[47.834,-31.523],[1.226,-2.786],[-0.871,-3.584],[23.963,20.442]],"o":[[-23.837,20.162],[6.596,-23.129],[-1.941,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.661,1.754],[-1.419,3.224],[16.788,69.096],[-6.017,-5.133]],"v":[[-9.466,72.889],[-59.013,61.311],[-18.449,15.821],[-70.059,7.574],[-45.796,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[67.145,20.677],[61.251,27.663],[60.33,38.15],[11.361,72.902]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.949,"s":[{"i":[[3.792,1.874],[8.19,23.284],[1.193,11.478],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-13.908,-41.954],[-0.844,-4.117],[0.574,-17.588],[1.027,-9.186],[2.499,-9.673],[7.991,-2.081]],"o":[[-3.445,-1.703],[-2.315,-6.582],[-1.031,-9.924],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[2.082,6.279],[4.679,22.836],[-0.097,2.962],[-1.164,10.412],[-6.217,24.058],[-3.516,0.916]],"v":[[-6.522,92.832],[-29.064,60.631],[-34.014,33.839],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[27.848,-53.805],[32.326,-36.554],[37.501,12.505],[35.67,33.353],[30.913,59.554],[7.109,93.821]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.17,"s":[{"i":[[6.039,-5.108],[-8.061,28.263],[1.198,8.079],[13.295,4.317],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.122,0],[4.324,-7.605],[-26.547,-20.849],[23.963,20.442]],"o":[[-23.837,20.162],[6.596,-23.129],[-1.198,-8.079],[-33.66,-10.929],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-19.204,0],[-5.007,8.806],[26.933,21.152],[-6.017,-5.133]],"v":[[-9.899,72.899],[-59.446,61.321],[-51.676,28.013],[-73.076,8.538],[-46.229,-38.778],[-30.157,-49.126],[31.138,-48.874],[47.101,-38.767],[66.176,4.44],[26.982,9.229],[54.78,49.243],[10.928,72.912]],"c":true}]},{"t":80.94921875,"s":[{"i":[[3.792,1.874],[8.19,23.284],[1.193,11.478],[-0.111,4.565],[-4.489,18.597],[-2.184,6.37],[-13.908,-41.954],[-0.844,-4.117],[0.574,-17.588],[1.027,-9.186],[2.499,-9.673],[7.991,-2.081]],"o":[[-3.445,-1.703],[-2.315,-6.582],[-1.031,-9.924],[0.25,-10.316],[1.015,-4.204],[13.56,-39.554],[2.082,6.279],[4.679,22.836],[-0.097,2.962],[-1.164,10.412],[-6.217,24.058],[-3.516,0.916]],"v":[[-6.522,92.832],[-29.064,60.631],[-34.014,33.839],[-35.532,8.112],[-30.39,-38.532],[-25.189,-54.631],[27.848,-53.805],[32.326,-36.554],[37.501,12.505],[35.67,33.353],[30.913,59.554],[7.109,93.821]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0,0.365,1,0.803,0,0.435,0.976,0.902,0,0.506,0.952,1,0.5,0.253,0.976,0.555,1,0,1,0.11]}},"s":{"a":0,"k":[7.996,-79.56]},"e":{"a":0,"k":[10.826,49.547]},"t":1,"nm":"Gradient_E17icAS8rp","hd":false},{"ty":"tr","p":{"a":0,"k":[510.004,508.06]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[-5.781,-4.17],[16.366,69.651],[-1.105,2.925],[-2.382,1.889],[52.397,0.85],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.558,-27.083],[-29.073,20.987]],"o":[[29.056,20.96],[-0.745,-3.172],[1.031,-2.729],[46.959,-37.248],[-6.446,-0.105],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-6.045,46.013],[5.779,-4.172]],"v":[[8.63,90.384],[72.456,41.515],[73.073,32.185],[78.256,25.107],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.168,-53.378],[-94.558,6.232],[-35.111,14.18],[-75.414,62.88],[-10.666,90.384]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47.949,"s":[{"i":[[-5.793,0.469],[-9.882,27.03],[-1.816,6.746],[-0.184,4.263],[3.476,11.513],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.03,-18.008],[-1.039,-7.183],[-4.464,-12.429],[-13.272,-1.636]],"o":[[12.176,-0.985],[1.707,-4.67],[1.671,-6.21],[1.329,-30.748],[-1.712,-5.669],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.019,11.418],[1.205,8.333],[6.355,17.694],[5.767,0.711]],"v":[[6.319,101.943],[44.646,58.552],[49.535,39.225],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-52.21,5.966],[-49.611,33.886],[-41.768,62.977],[-8.532,101.726]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.17,"s":[{"i":[[-5.78,-4.17],[9.874,42.023],[-5.976,11.278],[-20.46,11.655],[52.397,0.85],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.621,-18.688],[-3.62,-10.635],[2.675,-18.733],[-29.073,20.987]],"o":[[29.056,20.96],[-5.568,-23.698],[5.482,-10.345],[28.831,-16.423],[-6.446,-0.105],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[10.077,9.598],[3.62,10.635],[-6.559,45.942],[5.779,-4.172]],"v":[[8.197,90.394],[75.446,57.883],[36.62,11.12],[90.468,6.861],[52.693,-53.369],[38.028,-63.413],[-40.936,-63.412],[-55.6,-53.369],[-94.991,6.241],[-68.338,26.372],[-75.847,62.889],[-11.099,90.394]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":73.293,"s":[{"i":[[-5.781,-1.546],[4.266,40.939],[-3.897,8.516],[-8.648,8.913],[27.41,9.663],[2.515,5.936],[22.413,-52.919],[3.838,-3.466],[-8.697,-18.628],[-1.605,-10.635],[1.189,-21.091],[-29.073,7.782]],"o":[[29.056,7.772],[-2.483,-13.45],[0.962,-2.102],[15.727,-26.462],[-4.143,-3.057],[-22.348,-52.741],[-2.514,5.936],[-26.456,10.9],[4.431,12.264],[1.605,10.635],[-2.932,37.65],[5.779,-1.547]],"v":[[8.269,96.447],[62.738,54.59],[45.288,22.727],[68.898,12.337],[48.343,-49.246],[38.147,-63.415],[-40.817,-63.415],[-50.325,-49.246],[-71.065,6.237],[-59.245,28.792],[-62.579,62.885],[-11.028,96.447]],"c":true}]},{"t":80.94921875,"s":[{"i":[[-5.793,0.469],[-9.882,27.03],[-1.816,6.746],[-0.184,4.263],[3.476,11.513],[2.515,5.936],[22.413,-52.919],[1.704,-6.217],[0.03,-18.008],[-1.039,-7.183],[-4.464,-12.429],[-13.272,-1.636]],"o":[[12.176,-0.985],[1.707,-4.67],[1.671,-6.21],[1.329,-30.748],[-1.712,-5.669],[-22.348,-52.741],[-2.514,5.936],[-5.241,19.124],[-0.019,11.418],[1.205,8.333],[6.355,17.694],[5.767,0.711]],"v":[[6.319,101.943],[44.646,58.552],[49.535,39.225],[52.159,18.18],[44.784,-45.874],[38.245,-63.418],[-40.719,-63.417],[-46.009,-45.874],[-52.21,5.966],[-49.611,33.886],[-41.768,62.977],[-8.532,101.726]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.479738482307,0.398841169769,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.369,1,0.567,0.5,0.184,0.855,0.445,1,0,0.71,0.323]}},"s":{"a":0,"k":[-184,-92]},"e":{"a":0,"k":[-187.809,102.794]},"t":1,"nm":"Gradient_dKXd2l7zPg","hd":false},{"ty":"tr","p":{"a":0,"k":[512,512.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[255.281,215.034]},"a":{"a":0,"k":[511.25,509.5]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"balooon","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.109,0],[0,0]],"o":[[0,0],[7.109,0],[0,0]],"v":[[-4.725,-9.63],[0.089,9.63],[4.623,-9.63]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.062745098039,0.443137284821,0.807843197093,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.027450982262,0.545098039216,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,311.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,223.271]},"a":{"a":0,"k":[254.578,223.521]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":31,"s":[100,100]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":47.584,"s":[90,110]},{"i":{"x":[0.5,0.5],"y":[1,1]},"o":{"x":[0.5,0.5],"y":[0,0]},"t":64.17,"s":[110,90]},{"t":80.755859375,"s":[90,110]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.414,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38.463,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":39.293,"s":[{"i":[[0,0],[-6.117,-23.74],[-28.956,-52.995]],"o":[[0,0],[13.682,53.098],[22.599,41.361]],"v":[[1.722,-90.458],[12.265,-58.635],[-1.097,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63.34,"s":[{"i":[[-0.4,-26.92],[6.383,-58.635],[0,0]],"o":[[-21.596,64.546],[-1.601,14.708],[0,0]],"v":[[1.919,-90.458],[12.189,59.848],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.17,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"t":88.21875,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.816993623621,0.904337565104,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":49,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":58,"s":[23]},{"t":71,"s":[61]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[253.053,407.037]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":31,"op":76,"st":22,"bm":0},{"ddd":0,"ind":28,"ty":4,"nm":"13","sr":1,"ks":{"r":{"a":0,"k":-4.92},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[106.104,184.938,0],"to":[-37.361,-87.936,0],"ti":[-39.856,-40.007,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":54,"s":[92.042,446.136,0],"to":[39.856,40.007,0],"ti":[-6.538,45.49,0]},{"t":75,"s":[190.854,394.188,0]}]},"a":{"a":0,"k":[256,306.275,0]},"s":{"a":1,"k":[{"i":{"x":[0.476,0.476,0.476],"y":[1,1,1]},"o":{"x":[0.359,0.359,0.359],"y":[0.146,0.146,10.591]},"t":31,"s":[0,0,100]},{"i":{"x":[0.476,0.476,0.476],"y":[1,1,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":36,"s":[33,33,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":57,"s":[46,46,100]},{"t":75,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[-8.563,31.024],[18.5,17.75]],"o":[[-23.179,9.555],[-0.503,45.167]],"v":[[517.26,513.492],[444.349,503.098]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40.123,"s":[{"i":[[-12.25,15.875],[18.5,17.75]],"o":[[-23.5,1.5],[-1.625,38.875]],"v":[[498.625,517.5],[434.25,501.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45.926,"s":[{"i":[[-15.75,2.875],[2.625,33.375]],"o":[[-19.625,5.125],[2.5,33.5]],"v":[[469.75,524],[410.125,499]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46.756,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":55.879,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":63.342,"s":[{"i":[[8.189,59.335],[21.124,3.466]],"o":[[-22.5,26.625],[28.402,20.507]],"v":[[579.779,491.202],[498.01,524.629]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.805,"s":[{"i":[[10.75,58.25],[21.875,-0.625]],"o":[[-22.5,26.625],[36,9.625]],"v":[[586.375,487.25],[507.25,529.75]],"c":true}]},{"t":79.92578125,"s":[{"i":[[3.5,25],[11.642,-8.18]],"o":[[5.25,24.25],[12.327,-9.093]],"v":[[609.999,490.125],[575.737,542.165]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.705882352941,0,0.286274509804,1]},"o":{"a":0,"k":50},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[7.367,4.157],[-15.962,20.935],[-0.419,5.206],[2.064,4.224],[-12.88,9.655],[-0.675,9.778],[-6.774,0]],"o":[[-5.895,-3.504],[1.934,-4.055],[0.42,-5.22],[-23.232,-14.914],[4.164,-2.93],[1.796,-12.531],[6.774,0]],"v":[[485.008,612.805],[491.252,548.222],[495.162,533.782],[493.502,518.668],[490.569,469.102],[497.397,449.375],[510.108,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40.123,"s":[{"i":[[11.271,5.001],[-21.483,22.219],[-0.395,5.388],[4.329,4.362],[-19.712,10.534],[-1.339,9.438],[-10.127,0]],"o":[[-9.501,-4.216],[3.267,-3.656],[0.396,-5.402],[-31.33,-16.625],[6.082,-3.25],[2.594,-12.519],[10.127,0]],"v":[[473.501,612.966],[479.983,547.781],[486.162,533.704],[481.33,518.375],[480.668,471],[491.058,449.375],[510.061,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45.926,"s":[{"i":[[25.066,0],[-2.709,18.878],[3.826,8.747],[18.227,15.875],[-44.391,3.875],[-3.41,8.375],[-20.586,0]],"o":[[-25.066,0],[3.73,-26],[-3.886,-8.885],[-16.515,-14.384],[11.257,-0.983],[5.083,-12.484],[20.586,0]],"v":[[465.465,615.375],[437.52,576],[475.924,527.503],[419.523,519.125],[448.641,459.75],[471.285,449.375],[509.914,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":46.756,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":55.879,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":63.342,"s":[{"i":[[-9.426,0.527],[3.336,30.533],[-0.525,4.423],[-1.674,5.011],[16.277,5.225],[2.182,11.243],[7.649,0]],"o":[[9.613,-0.445],[-0.002,-3.793],[0.527,-4.435],[11.243,-31.005],[-4.144,-1.327],[-1.638,-12.579],[-7.649,0]],"v":[[534.712,612.192],[538.458,559.735],[539.089,547.396],[542.236,533.212],[537.778,467.105],[529.364,456.73],[510.31,409.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":70.805,"s":[{"i":[[-11.866,0],[4.485,30.359],[-0.541,4.31],[-2.381,5.088],[20.78,5.325],[2.597,11.456],[9.745,0]],"o":[[11.866,0],[-0.103,-3.802],[0.542,-4.321],[15.559,-31.544],[-5.287,-1.353],[-2.136,-12.586],[-9.745,0]],"v":[[541.693,612.013],[545.765,559.641],[546.126,547.537],[550.213,533.487],[544.595,467],[533.875,456.625],[510.339,409.5]],"c":false}]},{"t":79.92578125,"s":[{"i":[[-23.593,1.276],[8.256,30.115],[-0.571,3.365],[-5.722,5.029],[51.998,5.957],[4.875,12.625],[21.25,0]],"o":[[28.42,-1.538],[-0.944,-3.443],[0.573,-3.374],[35.84,-31.503],[-11.582,-1.327],[-4.875,-12.625],[-21.25,0]],"v":[[549.066,612.281],[574.481,560.123],[573.453,550.246],[581.9,538.094],[573.75,459.75],[550.375,449.375],[510.5,409.5]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.070588235294,0.509803921569,1]},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":31,"s":[66.014]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":46.756,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":63.342,"s":[66.014]},{"t":79.92578125,"s":[0]}]},"w":{"a":0,"k":3},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[-4.985,-4.102],[-3.554,-4.626]],"o":[[4.45,2.507],[12.17,7.144]],"v":[[-30.461,-3.879],[-17.21,6.852]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":46.756,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":63.342,"s":[{"i":[[-4.985,-4.102],[-3.554,-4.626]],"o":[[4.45,2.507],[12.17,7.144]],"v":[[-30.461,-3.879],[-17.21,6.852]],"c":false}]},{"t":79.92578125,"s":[{"i":[[-10.617,0.013],[-9.279,-6.959]],"o":[[10.617,-0.013],[12.45,8.999]],"v":[[-16.117,-4.158],[15.357,4.889]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":31,"s":[8.157]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":46.756,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":63.342,"s":[8.157]},{"t":79.92578125,"s":[24]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[577.467,481.038]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[-0.472,4.593],[-7.623,2.539],[-3.528,9.553],[-7.812,0]],"o":[[0.706,-6.267],[4.543,-2.418],[3.761,-10.186],[7.812,0]],"v":[[-5.476,33.425],[7.073,18.693],[21.053,-4.994],[43.07,-32.939]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":46.756,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":63.342,"s":[{"i":[[-0.472,4.593],[-7.623,2.539],[-3.528,9.553],[-7.812,0]],"o":[[0.706,-6.267],[4.543,-2.418],[3.761,-10.186],[7.812,0]],"v":[[-5.476,33.425],[7.073,18.693],[21.054,-4.994],[43.07,-32.939]],"c":false}]},{"t":79.92578125,"s":[{"i":[[-1.594,7.543],[-21.675,0.284],[-3.528,9.553],[-7.812,0]],"o":[[2.334,-11.045],[12.639,-0.166],[3.761,-10.186],[7.812,0]],"v":[[-42.347,32.923],[-6.739,15.977],[21.196,-4.997],[43.213,-32.942]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":24},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[467.626,460.618]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[4.458,-1.658],[-2.702,28.332],[0.653,11.426],[5.665,4.649],[-18.371,11.345],[-2.317,6.432],[-14.026,-45.509],[-2.91,-2.568],[15.965,-19.373],[0.411,-7.049],[-0.265,-10.052],[17.692,6.636]],"o":[[-17.599,6.545],[2.224,-16.938],[-0.653,-11.426],[-11.402,-10.107],[3.058,-2.631],[15.412,-42.542],[1.948,6.42],[18.709,14.082],[-0.839,2.551],[-0.477,7.198],[5.65,39.486],[-4.442,-1.666]],"v":[[-6.823,86.707],[-43.572,61.351],[-29.82,26.814],[-47.266,7.929],[-35.626,-38.619],[-26.731,-52.763],[27.766,-51.604],[35.261,-38.773],[47.576,15.282],[45.669,28.97],[45.277,54.319],[8.554,86.712]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":46.756,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.445,73.742],[-54.689,63.17],[-18.449,15.821],[-70.059,7.574],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[56.509,24.315],[51.127,30.695],[50.286,40.27],[9.572,73.754]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":63.342,"s":[{"i":[[4.458,-1.658],[-2.702,28.332],[0.653,11.426],[5.665,4.649],[-18.371,11.345],[-2.317,6.432],[-14.026,-45.509],[-2.91,-2.568],[15.965,-19.373],[0.411,-7.049],[-0.265,-10.052],[17.692,6.636]],"o":[[-17.599,6.545],[2.224,-16.938],[-0.653,-11.426],[-11.402,-10.107],[3.058,-2.631],[15.412,-42.542],[1.948,6.42],[18.709,14.082],[-0.839,2.551],[-0.477,7.198],[5.65,39.486],[-4.442,-1.666]],"v":[[-6.823,86.707],[-43.572,61.351],[-29.82,26.814],[-47.266,7.929],[-35.626,-38.619],[-26.731,-52.763],[27.766,-51.604],[35.261,-38.773],[47.576,15.282],[45.669,28.97],[45.277,54.319],[8.554,86.712]],"c":true}]},{"t":79.92578125,"s":[{"i":[[5.514,-4.664],[-7.36,25.808],[1.941,14.24],[16.884,4.813],[-45.336,-2.743],[-2.576,6.552],[-20.269,-49.543],[-6.925,0.44],[43.678,-28.785],[1.119,-2.544],[-0.917,-3.241],[21.881,18.666]],"o":[[-21.767,18.411],[6.023,-21.12],[-1.94,-14.24],[-34.034,-9.703],[7.027,0.425],[19.009,-48.345],[2.628,6.422],[45.96,-2.921],[-2.43,1.602],[-1.295,2.944],[16.945,59.912],[-5.494,-4.687]],"v":[[-9.445,73.742],[-54.689,63.17],[-18.449,15.821],[-70.059,7.574],[-45.797,-38.787],[-29.724,-49.136],[31.571,-48.884],[47.534,-38.776],[56.509,24.315],[51.127,30.695],[50.286,40.27],[9.572,73.754]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.948,0.642,0.5,1,0.656,0.623,1,1,0.365,0.604]}},"s":{"a":0,"k":[-184.004,-76.56]},"e":{"a":0,"k":[-187.174,85.547]},"t":1,"nm":"Gradient_feNSAHVoZv","hd":false},{"ty":"tr","p":{"a":0,"k":[510.004,508.06]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[-5.781,-1.021],[5.349,50.111],[-0.335,5.682],[-0.738,3.458],[22.406,11.428],[2.515,5.936],[22.413,-52.919],[3.315,-4.14],[-6.579,-18.541],[-1.201,-10.635],[1.192,-24.401],[-29.073,5.137]],"o":[[29.056,5.131],[-0.226,-4.422],[0.313,-5.243],[15.524,-30.374],[-3.682,-3.649],[-22.348,-52.741],[-2.514,5.936],[-21.263,12.913],[6.915,16.093],[1.201,10.636],[-2.031,36.013],[5.779,-1.021]],"v":[[8.43,97.656],[59.176,48.368],[59.413,32.21],[61.028,20.534],[47.619,-48.424],[38.318,-63.419],[-40.646,-63.419],[-49.122,-48.424],[-66.126,6.233],[-46.131,25.134],[-59.775,62.881],[-10.866,97.656]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":46.756,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.905,89.332],[61.185,42.958],[61.749,34.437],[66.481,27.975],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-94.558,6.232],[-35.111,14.18],[-69.838,64.217],[-10.715,89.332]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":63.342,"s":[{"i":[[-5.781,-1.021],[5.349,50.111],[-0.335,5.682],[-0.738,3.458],[22.406,11.428],[2.515,5.936],[22.413,-52.919],[3.315,-4.14],[-6.579,-18.541],[-1.201,-10.635],[1.192,-24.401],[-29.073,5.137]],"o":[[29.056,5.131],[-0.226,-4.422],[0.313,-5.243],[15.524,-30.374],[-3.682,-3.649],[-22.348,-52.741],[-2.514,5.936],[-21.263,12.913],[6.915,16.093],[1.201,10.635],[-2.031,36.013],[5.779,-1.021]],"v":[[8.43,97.656],[59.176,48.368],[59.413,32.21],[61.028,20.534],[47.619,-48.424],[38.318,-63.419],[-40.646,-63.419],[-49.122,-48.424],[-66.126,6.233],[-46.131,25.134],[-59.775,62.881],[-10.866,97.656]],"c":true}]},{"t":79.92578125,"s":[{"i":[[-5.278,-3.808],[21.305,59.786],[-1.009,2.671],[-2.175,1.725],[59.122,1.834],[2.515,5.936],[22.413,-52.919],[6.445,-0.104],[-19.827,-18.469],[-3.62,-10.635],[3.249,-24.73],[-26.548,19.164]],"o":[[26.532,19.139],[-0.999,-2.803],[0.942,-2.492],[42.879,-34.012],[-6.443,-0.2],[-22.348,-52.741],[-2.514,5.936],[-52.385,0.85],[20.711,19.293],[3.62,10.636],[-5.52,42.015],[5.277,-3.809]],"v":[[6.905,89.332],[61.185,42.958],[61.749,34.437],[66.481,27.975],[53.126,-53.378],[38.461,-63.422],[-40.503,-63.422],[-55.167,-53.378],[-94.558,6.232],[-35.111,14.18],[-69.838,64.217],[-10.715,89.332]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.70457500383,0,0.287356716979,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.369,0.933,0.5,1,0.184,0.67,1,1,0,0.408]}},"s":{"a":0,"k":[-184,-92]},"e":{"a":0,"k":[-187.809,102.794]},"t":1,"nm":"Gradient_R4Ov2YnBoh","hd":false},{"ty":"tr","p":{"a":0,"k":[512,512.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[255.281,215.034]},"a":{"a":0,"k":[511.25,509.5]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"balooon","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.109,0],[0,0]],"o":[[0,0],[7.109,0],[0,0]],"v":[[-4.725,-9.63],[0.089,9.63],[4.623,-9.63]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.705882352941,0,0.286274509804,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.01568627451,0.431372578939,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,311.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[254.578,223.271]},"a":{"a":0,"k":[254.578,223.521]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":22.707,"s":[90,110]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":39.293,"s":[110,90]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":55.879,"s":[90,110]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":72.463,"s":[110,90]},{"t":89.048828125,"s":[90,110]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.221,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44.268,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45.098,"s":[{"i":[[0,0],[-6.117,-23.74],[-28.956,-52.995]],"o":[[0,0],[13.682,53.098],[22.599,41.361]],"v":[[1.722,-90.458],[12.265,-58.635],[-1.097,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69.146,"s":[{"i":[[-0.4,-26.92],[6.383,-58.635],[0,0]],"o":[[-21.596,64.546],[-1.601,14.708],[0,0]],"v":[[1.919,-90.458],[12.189,59.848],[5.635,90.458]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":69.977,"s":[{"i":[[0,0],[1.649,-13.704],[21.563,-83.245]],"o":[[0,0],[-7.617,63.302],[-6.975,26.926]],"v":[[1.919,-90.458],[-3.186,-64.839],[5.635,90.458]],"c":false}]},{"t":94.0234375,"s":[{"i":[[0,0],[5.519,-59.198],[0,0]],"o":[[31.228,73.671],[-2.224,23.855],[0,0]],"v":[[1.719,-90.458],[-9.822,53.16],[-1.186,90.458]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.708727369121,0.812806193034,0.926797305836,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":31,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":46,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":59,"s":[45]},{"t":77,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"tr","p":{"a":0,"k":[253.053,407.037]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":31,"op":73,"st":28,"bm":0},{"ddd":0,"ind":29,"ty":4,"nm":"Shape Layer 16","sr":1,"ks":{"r":{"a":0,"k":229},"p":{"a":0,"k":[69.5,311,0]},"s":{"a":0,"k":[50,50,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-111.243,169.288],[203.865,-102.196]],"o":[[294.437,-448.072],[-413.414,207.243]],"v":[[-188.437,363.072],[368.393,469.709]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-149.28,136.926],[253.963,131.026]],"o":[[196.275,-180.031],[-88.624,-45.723]],"v":[[-188.437,363.071],[-283.367,-176.462]],"c":false}},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":0,"k":{"i":[[196.273,50.094],[44.629,78.73]],"o":[[-82.564,-21.072],[-187.975,-331.605]],"v":[[-188.436,363.072],[-356.531,197.288]],"c":false}},"nm":"Path 3","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[0]},{"t":27,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[0]},{"t":27,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":19,"s":[15]},{"t":27,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.90196031332,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":19,"s":[30]},{"t":27,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false}],"ip":4,"op":27,"st":-11,"bm":0},{"ddd":0,"ind":30,"ty":4,"nm":"Shape Layer 15","sr":1,"ks":{"p":{"a":0,"k":[414.5,314,0]},"s":{"a":0,"k":[50,50,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-195.396,53.421],[226.001,-102]],"o":[[429.086,-117.312],[-421.51,190.238]],"v":[[-303.086,-124.688],[-231.001,364]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-21.206,201.454],[-129.209,-309.535]],"o":[[31.086,-295.312],[38.415,92.028]],"v":[[-303.086,-124.688],[161.209,-248.465]],"c":false}},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":0,"k":{"i":[[-14.268,202.062],[99.84,74.352]],"o":[[13.086,-185.313],[-305.716,-227.671]],"v":[[-303.086,-124.687],[-463.84,-441.352]],"c":false}},"nm":"Path 3","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":2,"s":[0]},{"t":25,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[0]},{"t":25,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":17,"s":[10]},{"t":25,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.90196031332,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":17,"s":[20]},{"t":25,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false}],"ip":2,"op":25,"st":2,"bm":0},{"ddd":0,"ind":31,"ty":4,"nm":"Shape Layer 14","sr":1,"ks":{"r":{"a":0,"k":220},"p":{"a":0,"k":[358.5,193,0]},"s":{"a":0,"k":[50,50,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[140.997,145.442],[-124,-129]],"o":[[-222,-229],[264.154,274.804]],"v":[[29,-274],[144,-612]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[67.107,191.128],[129.13,204.842],[-54.086,-120.534],[116,-83]],"o":[[-79,-225],[-53.458,-84.802],[45.449,101.286],[-232.906,166.648]],"v":[[29,-274],[-445.449,-337.568],[-260.592,-429.436],[-356,-45]],"c":false}},"nm":"Path 2","hd":false},{"ind":2,"ty":"sh","ks":{"a":0,"k":{"i":[[176.058,100.184],[-336,-180]],"o":[[-239,-136],[336,180]],"v":[[29,-274],[-60,79]],"c":false}},"nm":"Path 3","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"t":23,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":23,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":15,"s":[15]},{"t":23,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.90196031332,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":15,"s":[30]},{"t":23,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 3","bm":0,"hd":false}],"ip":0,"op":23,"st":0,"bm":0},{"ddd":0,"ind":33,"ty":4,"nm":"g3","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.165],"y":[0]},"t":-5,"s":[26]},{"i":{"x":[0.832],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":6,"s":[37.386]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[-13]},{"t":45,"s":[-13]}]},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":5,"s":[290.754,268.75,0],"to":[116.466,46.1,0],"ti":[144.534,34.4,0]},{"t":45,"s":[165.047,464.347,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.229,0.229,0.229],"y":[0.395,0.125,0]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":11.223,"s":[16.076,50.576,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":15.111,"s":[45,45,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":38.104,"s":[45,45,100]},{"t":45,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[4.284,-6.947],[-33.294,-58.359],[5.882,-21.15]],"o":[[-4.135,-13.22],[7.139,-79.656],[-6,5.346]],"v":[[-89.729,-159.8],[0.513,-80.717],[-58.098,-181.479]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[7.328,0],[-22.124,-35.348],[10.144,0]],"o":[[-7.328,0],[23.862,-42.975],[-10.144,0]],"v":[[-26.251,-184.732],[0.888,-83.025],[26.856,-184.713]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[9.416,4.312],[-5.339,-76.365],[-10.609,-5.011]],"o":[[-14.959,-15.313],[37.459,-67.302],[-9.734,-7.011]],"v":[[58.834,-182.687],[0.031,-81.284],[91.609,-161.489]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0.055],[0.035,-0.238],[-0.003,-0.129]],"o":[[-0.001,-0.278],[0.155,-0.028],[0.002,0.073]],"v":[[1.972,-84.416],[1.304,-84.181],[1.974,-84.23]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.299569043926,0.670588235294,0.230542022107,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.59099893009,1,0.249673072965,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[-58.754,-22.426],[2.84,9.446],[2.87,-3.464]],"o":[[-26.158,-35.961],[-2.568,0],[-2.546,16.968]],"v":[[0.513,-80.717],[-57.951,-181.3],[-89.568,-159.611]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[-16.888,-46.475],[4.313,0],[4.959,0]],"o":[[23.112,-55.975],[-4.313,0],[-4.959,0]],"v":[[0.888,-83.025],[26.854,-184.651],[-26.253,-184.651]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[27.557,-28.608],[3.11,18.372],[7.875,5.207]],"o":[[59.243,-26.628],[-2.676,-1.802],[-7.016,11.974]],"v":[[0.031,-81.284],[91.226,-161.727],[59,-182.832]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0.121,-0.111],[0.002,0.162],[0,0.078]],"o":[[0.196,0.033],[0,-0.016],[-0.113,0.012]],"v":[[1.304,-84.181],[1.972,-84.232],[1.973,-84.418]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.299569043926,0.670588235294,0.230542022107,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.339315975414,0.772549019608,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[39.987,83.048],[0,0],[0,0]],"o":[[0,0],[37.932,59.071],[0,0]],"v":[[-72.968,-196.749],[-126.624,-162.347],[0.665,-80.582]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,49.669],[0,0],[0,0]],"o":[[0,0],[0,52.773],[0,0]],"v":[[45.25,-196.291],[-43.839,-197],[0.918,-82.799]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[-46.488,62.291],[0,0],[0,0]],"o":[[0,0],[-48.138,89.011],[0,0]],"v":[[129.222,-163.269],[74.301,-199.194],[0.067,-81.007]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":26.035,"s":[{"i":[[-84.252,-96.603],[0,0],[65.058,-1.852]],"o":[[0,0],[-80.439,-59.548],[72.089,49.973]],"v":[[218.612,-18.331],[212.503,-76.263],[0.909,-82.451]],"c":true}]},{"t":32.068359375,"s":[{"i":[[-98.765,-68.901],[0,0],[84.61,-15.146]],"o":[[0,0],[-98.597,-68.966],[84.61,-15.146]],"v":[[277.612,-28.106],[277.507,-28.041],[0.925,-83.049]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.299569043926,0.670588235294,0.230542022107,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.59099893009,1,0.249673072965,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,-0.541]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[3.562,0.396],[4.486,-30.705],[2.528,-42.852]],"o":[[-2.735,-31.243],[23.134,-48.353],[-4.616,12.103]],"v":[[47.968,-59.041],[0.181,-81.135],[99.326,-80.542]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[5.983,0.37],[-26.263,6.174],[4.246,-11.798]],"o":[[-4.593,-11.621],[26.987,5.34],[-7.754,0.263]],"v":[[-43.032,-45.949],[0.888,-83.764],[43.254,-45.772]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[3.636,7.589],[-25.685,-47.937],[-17.228,-15.756]],"o":[[-2.769,-33.656],[-29.531,-12.611],[-9.187,-0.664]],"v":[[-102.517,-80.73],[0.031,-82.139],[-53.059,-56.285]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,-0.089],[0.06,0.338],[-0.001,0.127]],"o":[[0,0.26],[0.314,0.056],[0.001,0.101]],"v":[[1.782,-83.563],[0.912,-83.891],[1.782,-83.825]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.299569043926,0.670588235294,0.230542022107,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.59099893009,1,0.249673072965,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[32.617,11.332],[0.469,1.698],[2.565,-16.738]],"o":[[58.068,3.751],[-2.309,-0.343],[0.412,7.213]],"v":[[0.181,-81.135],[99.549,-80.475],[47.806,-59.055]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[-27.013,5.688],[1.246,-7.237],[5.344,0.209]],"o":[[30.487,5.966],[-3.879,-0.32],[-0.343,-9.106]],"v":[[0.888,-83.764],[43.629,-45.71],[-43.282,-45.962]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[-34.368,8.181],[14.503,9.746],[3.343,10.584]],"o":[[-6.795,12.388],[-4.163,-0.115],[-0.295,-2.323]],"v":[[0.031,-82.139],[-52.675,-56.196],[-102.669,-79.311]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0.267,0.181],[0.002,-0.315],[-0.001,-0.129]],"o":[[0.157,-0.036],[0,0.038],[0.001,-0.095]],"v":[[0.912,-83.891],[1.783,-83.828],[1.782,-83.58]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.299569043926,0.670588235294,0.230542022107,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.341176470588,0.772549079446,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[-47.773,37.347],[13.35,4.661],[0,0]],"o":[[-8.75,11.859],[-29.837,10.284],[0,0]],"v":[[130.25,-76.109],[73.163,-40.941],[-0.09,-81.184]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[-7.056,-21.075],[22.423,4.353],[0,0]],"o":[[-24.75,3.841],[5.117,-32.397],[0,0]],"v":[[51.556,-17.175],[-45.367,-16.853],[0.66,-83.81]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[30.446,13.502],[7.5,16.094],[0,0]],"o":[[-15.081,4.208],[53.378,40.554],[0,0]],"v":[[-72.019,-39.761],[-130.75,-75.344],[-0.121,-82.24]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":26.035,"s":[{"i":[[62.584,13.086],[0,0],[-76.293,-50.621]],"o":[[0,0],[59.413,-2.914],[-105.714,-16.287]],"v":[[-216.595,-5.445],[-221.581,-64.208],[0.796,-83.205]],"c":true}]},{"t":32.068359375,"s":[{"i":[[61.327,-74.693],[0,0],[-94.582,-57.384]],"o":[[0,0],[61.287,-75.47],[-94.582,-57.634]],"v":[[-295.542,-26.252],[-295.502,-25.724],[0.867,-83.81]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.299569043926,0.670588235294,0.230542022107,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.59099893009,1,0.249673072965,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":26.035,"s":[100]},{"t":32.068359375,"s":[0]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32.068,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[127.458,-87.534],[202.035,-45.391],[61.037,36.306],[-13.54,-5.837]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":33.795,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[219.958,-130.284],[201.785,-44.641],[60.787,37.056],[78.96,-48.587]],"c":true}]},{"t":39.828125,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[270.458,15.841],[201.785,-44.516],[60.787,37.181],[129.46,97.538]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.564705882353,0.027450982262,0.549019607843,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.757,0.892,1,0.5,0.878,0.736,0.928,1,1,0.579,0.856]}},"s":{"a":0,"k":[19.5,-137.5]},"e":{"a":0,"k":[-32.5,-25]},"t":1,"nm":"Gradient_3bbZEK7LAp","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32.068,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-199.644,-112.575],[-124.894,-156.234],[75.903,-43.262],[61.403,37.898]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":33.795,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-201.144,-113.575],[-198.527,-210.234],[64.521,-59.262],[61.903,37.398]],"c":true}]},{"t":39.828125,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-199.394,-112.075],[-275.894,-120.734],[-15.097,28.988],[61.403,37.648]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.564705882353,0.027450982262,0.549019607843,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.757,0.892,1,0.5,0.878,0.736,0.928,1,1,0.579,0.856]}},"s":{"a":0,"k":[19.5,-137.5]},"e":{"a":0,"k":[-32.5,-25]},"t":1,"nm":"Gradient_jpTGbMUCTi","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32.068,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-59.217,-194.944],[4.36,-158.801],[-136.638,-77.104],[-200.215,-113.248]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":33.795,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-59.967,-193.944],[-42.14,-269.676],[-183.138,-187.979],[-200.965,-112.248]],"c":true}]},{"t":39.828125,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-59.717,-194.194],[-107.39,-261.801],[-248.388,-180.104],[-200.715,-112.498]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.564705882353,0.027450982262,0.549019607843,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.757,0.892,1,0.5,0.878,0.736,0.928,1,1,0.579,0.856]}},"s":{"a":0,"k":[19.5,-137.5]},"e":{"a":0,"k":[-32.5,-25]},"t":1,"nm":"Gradient_JLoNU3DvSR","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32.068,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-134.394,-151.075],[-59.644,-194.734],[201.403,-44.262],[66.403,-38.102]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":33.795,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-78.144,-280.325],[-59.894,-194.234],[201.903,-45.012],[183.653,-131.102]],"c":true}]},{"t":39.828125,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-7.894,-258.075],[-59.144,-194.234],[202.403,-44.512],[253.653,-108.352]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.564705882353,0.027450982262,0.549019607843,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.757,0.892,1,0.5,0.878,0.736,0.928,1,1,0.579,0.856]}},"s":{"a":0,"k":[19.5,-137.5]},"e":{"a":0,"k":[-32.5,-25]},"t":1,"nm":"Gradient_LtgtTmEdpW","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.998,-136.12],[109.555,-136.491],[109.883,-26.554],[-108.67,-26.184]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.375,-163.062],[141.5,-81.891],[0.375,-0.188],[-140.75,-81.359]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-140.394,-81.325],[0.231,-163.047],[141.778,-81.324],[1.153,0.398]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.998,-136.12],[109.555,-136.491],[109.883,-26.554],[-108.67,-26.184]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-58.875,-194.312],[201.75,-44.391],[60.625,37.312],[-200,-112.609]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.082352941176,0.560784313725,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.003,0,0.427,0.5,0.502,0,0.567,1,1,0,0.706]}},"s":{"a":0,"k":[2,13]},"e":{"a":0,"k":[61,-117.25]},"t":1,"nm":"Gradient_sNuIUWvnfz","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31.207,"s":[0]},{"t":32.068359375,"s":[100]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"TOP2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[-44.416,-19.761]],"o":[[0,0],[0,0],[-50.616,22.602]],"v":[[-110.103,-63.56],[-110.027,-100.532],[0.46,-81.453]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[-0.41,-27.045]],"o":[[0,0],[0,0],[-61.41,1.83]],"v":[[-94.995,-109.773],[-47.63,-137.306],[0.535,-81.705]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[-56.849,-2.331]],"o":[[0,0],[0,0],[-3.842,31.77]],"v":[[-107.323,6.751],[-154.59,-20.677],[0.554,-81.417]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[-44.416,-19.761]],"o":[[0,0],[0,0],[-50.616,22.602]],"v":[[-178.603,-63.7],[-178.527,-100.672],[0.46,-81.453]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.193},"t":23.449,"s":[{"i":[[0,0],[0,0],[-9.884,-25.477]],"o":[[0,0],[0,0],[-59.087,6.302]],"v":[[-160.747,-124.574],[-123.563,-154.139],[0.519,-81.651]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.193},"t":26.896,"s":[{"i":[[0,0],[0,0],[-0.034,-0.282]],"o":[[0,0],[0,0],[-0.644,0.033]],"v":[[-1.215,-82.325],[-0.744,-82.624],[-0.191,-82.059]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[-0.034,-0.282]],"o":[[0,0],[0,0],[-0.644,0.033]],"v":[[-1.215,-82.325],[-0.744,-82.624],[-0.191,-82.059]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.298039215686,0.670588235294,0.231372563979,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.592156862745,1,0.250980392157,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[-41.937,-18.342]],"o":[[0,0],[0,0],[39.226,-18.409]],"v":[[37.473,-187.745],[-35.933,-187.648],[0.28,-81.294]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[2.785,-29.597]],"o":[[0,0],[0,0],[54.41,4.403]],"v":[[156.725,-143.497],[109.36,-170.781],[0.215,-81.653]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[-56.849,2.331]],"o":[[0,0],[0,0],[-3.842,-31.77]],"v":[[-47.92,-137.119],[-95.187,-109.691],[0.643,-81.232]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[-41.937,-18.342]],"o":[[0,0],[0,0],[39.226,-18.409]],"v":[[37.473,-137.745],[-35.933,-137.648],[0.28,-81.294]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.193},"t":23.449,"s":[{"i":[[0,0],[0,0],[-6.842,-27.174]],"o":[[0,0],[0,0],[51.141,-0.508]],"v":[[83.969,-115.726],[30.998,-137.115],[0.229,-81.576]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.193},"t":26.896,"s":[{"i":[[0,0],[0,0],[-0.001,-0.306]],"o":[[0,0],[0,0],[0.567,0.031]],"v":[[0.79,-82.375],[0.27,-82.646],[-0.194,-82.058]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[-0.001,-0.306]],"o":[[0,0],[0,0],[0.567,0.031]],"v":[[0.79,-82.375],[0.27,-82.646],[-0.194,-82.058]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.298039215686,0.670588235294,0.231372563979,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.592156862745,1,0.250980392157,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[40.87,20.933]],"o":[[0,0],[0,0],[-45.917,21.505]],"v":[[-36.135,21.16],[37.271,21.063],[0.636,-81.365]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[-4.16,33.449]],"o":[[0,0],[0,0],[-63.035,0.199]],"v":[[-155.245,-20.818],[-107.88,6.465],[0.535,-81.574]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[56.849,-2.331]],"o":[[0,0],[0,0],[3.842,31.77]],"v":[[47.783,-26.749],[95.05,-54.177],[0.781,-81.417]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[40.87,20.933]],"o":[[0,0],[0,0],[-45.917,21.505]],"v":[[-36.135,-26.34],[37.271,-26.437],[0.636,-81.365]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.193},"t":23.449,"s":[{"i":[[0,0],[0,0],[5.534,30.754]],"o":[[0,0],[0,0],[-59.35,4.786]],"v":[[-81.441,-48.393],[-28.47,-27.004],[0.557,-81.529]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.193},"t":26.896,"s":[{"i":[[0,0],[0,0],[-0.014,0.346]],"o":[[0,0],[0,0],[-0.657,0.017]],"v":[[-1.154,-81.751],[-0.633,-81.48],[-0.191,-82.057]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[-0.014,0.346]],"o":[[0,0],[0,0],[-0.657,0.017]],"v":[[-1.154,-81.751],[-0.633,-81.48],[-0.191,-82.057]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.298039215686,0.670588235294,0.231372563979,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.592156862745,1,0.250980392157,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[47.076,21.883]],"o":[[0,0],[0,0],[50.076,-22.163]],"v":[[111.5,-100.405],[111.424,-63.769],[0.636,-81.365]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[3.84,30.199]],"o":[[0,0],[0,0],[60.715,-1.176]],"v":[[94.475,-54.176],[47.11,-27.142],[0.535,-81.574]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[56.849,2.331]],"o":[[0,0],[0,0],[3.842,-31.77]],"v":[[110.513,-172.494],[157.779,-145.066],[0.781,-81.417]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[47.076,21.883]],"o":[[0,0],[0,0],[50.076,-22.163]],"v":[[180.5,-100.073],[180.424,-63.437],[0.636,-81.365]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.193},"t":23.449,"s":[{"i":[[0,0],[0,0],[13.148,28.408]],"o":[[0,0],[0,0],[58.424,-5.694]],"v":[[160.64,-34.878],[123.456,-5.777],[0.557,-81.529]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.193},"t":26.896,"s":[{"i":[[0,0],[0,0],[0.07,0.315]],"o":[[0,0],[0,0],[0.637,-0.027]],"v":[[0.817,-81.798],[0.347,-81.505],[-0.191,-82.057]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[0.07,0.315]],"o":[[0,0],[0,0],[0.637,-0.027]],"v":[[0.817,-81.798],[0.347,-81.505],[-0.191,-82.057]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.298039215686,0.670588235294,0.231372563979,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.592156862745,1,0.250980392157,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.997,-186.12],[109.555,-186.491],[109.883,20.946],[-108.67,21.316]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[60.375,-196.875],[201.5,-115.704],[-61,33.438],[-202.125,-47.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-201.644,-48.012],[60.981,-198.422],[202.528,-116.699],[-59.722,33.898]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-177.498,-136.26],[178.555,-136.159],[178.883,-26.223],[-177.17,-26.324]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.193},"t":20,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-122.064,-161.16],[188.465,-96.027],[127.132,1.043],[-187.835,-63.839]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-60.625,-194.062],[202,-44.391],[60.875,37.312],[-201.75,-112.359]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.549019607843,0,0.560784313725,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.786,0.95,0.5,0.919,0.893,0.973,1,0.838,1,0.996]}},"s":{"a":0,"k":[19.5,-137.5]},"e":{"a":0,"k":[-32.5,-25]},"t":1,"nm":"Gradient_RsdAYi1BUX","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0.5,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"top","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-36.401,21.291],[-35.494,79.598],[36.963,79.284],[36.831,21.136]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-154.715,-20.624],[-154.76,40.468],[-108.618,67.416],[-107.573,6.573]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[46.91,-26.749],[50.382,33.285],[97.648,5.857],[97.147,-106.398]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-36.401,-26.209],[-37.306,32.91],[35.151,32.596],[36.831,-26.364]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.193},"t":23.449,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-81.082,-52.213],[-80.576,-51.499],[-28.769,-30.42],[-28.324,-30.904]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-201.332,-114.463],[-200.826,-113.749],[-28.769,-30.42],[-28.324,-30.904]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.133333333333,0.533333333333,0.062745098039,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.592,1,0.251,0.5,0.445,0.835,0.241,1,0.298,0.671,0.231]}},"s":{"a":0,"k":[-70,107]},"e":{"a":0,"k":[-70.5,-42]},"t":1,"nm":"Gradient_mf9lwQKr1K","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.613,21.321],[109.673,21.064],[109.15,76.764],[-109.136,77.014]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-201.589,-47.727],[-60.808,33.613],[-61.775,92.706],[-202.556,11.365]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-60.183,33.898],[202.067,-116.699],[204.616,-58.665],[-57.634,91.932]],"c":true}]},{"i":{"x":0.833,"y":0.807},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-177.113,-26.32],[178.673,-26.105],[176.338,30.408],[-179.448,30.186]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.193},"t":23.449,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-195.911,-94.225],[86.555,23.55],[86.399,86.205],[-196.067,-31.571]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-201.214,-112.352],[61.066,37.488],[60.774,96.629],[-201.507,-53.212]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.549019607843,0,0.560784313725,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[0,1,0.574,0.815,0.5,1,0.764,0.467,1,1,0.955,0.119]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[0,1,0.161,0.686,0.5,1,0.508,0.343,1,1,0.855,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[0,1,0.574,0.815,0.5,1,0.764,0.467,1,1,0.955,0.119]},{"t":32.068359375,"s":[0,1,0.161,0.686,0.5,1,0.508,0.343,1,1,0.855,0]}]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[119.586,-56.314],"to":[-21.5,11.667],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[-9.414,13.686],"to":[0,0],"ti":[0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[119.586,-56.314],"to":[0,0],"ti":[21.5,-11.667]},{"t":32.068359375,"s":[-9.414,13.686]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[6.461,156.253],"to":[-22,-12.5],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[-125.539,81.253],"to":[0,0],"ti":[0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[6.461,156.253],"to":[0,0],"ti":[22,12.5]},{"t":32.068359375,"s":[-125.539,81.253]}]},"t":1,"nm":"Gradient_8fLXYVnVQl","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.787,-62.524],[-108.598,-3.166],[-108.939,-39],[-109.128,-99.425]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-93.298,-108.233],[-93.347,-47.14],[-46.52,-74.568],[-46.471,-135.661]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-107.323,6.751],[-104.774,66.785],[-152.041,39.357],[-154.59,-20.677]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-177.287,-62.664],[-178.91,-2.494],[-179.251,-38.327],[-177.628,-99.565]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":23.449,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-159.133,-123.142],[-158.415,-58.13],[-121.742,-87.368],[-122.46,-152.61]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-154.298,-139.233],[-153.673,-78.092],[-106.846,-105.52],[-107.471,-166.661]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.133254780489,0.532025984222,0.061895736994,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.592,1,0.251,0.5,0.445,0.835,0.241,1,0.298,0.671,0.231]}},"s":{"a":0,"k":[-70,107]},"e":{"a":0,"k":[-70.5,-42]},"t":1,"nm":"Gradient_2vmOP17wjI","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.446,21.5],[-108.258,77.188],[-109.279,-127.08],[-109.468,-185.949]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-201.375,-47.46],[-201.424,11.632],[60.182,-137.528],[60.231,-196.62]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-60.183,33.898],[-57.634,91.932],[-199.181,10.21],[-201.73,-47.825]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-176.946,-26.14],[-178.57,30.36],[-179.591,-76.408],[-177.968,-136.089]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-187.369,-63.827],[-188.589,-5.51],[-128.031,-101.359],[-121.436,-161.345]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":23.449,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-195.707,-93.977],[-194.989,-31.324],[-85.167,-118.438],[-85.885,-181.776]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-201,-112.085],[-200.375,-52.945],[-60.144,-134.667],[-60.769,-193.808]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.549787872913,0,0.560784313725,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.855,0,0.5,1,0.508,0.344,1,1,0.161,0.687]}},"s":{"a":0,"k":[-123,86]},"e":{"a":0,"k":[-31,12]},"t":1,"nm":"Gradient_FTiGJEG4o8","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[109.669,-62.918],[109.861,-6.162],[109.819,-41.996],[109.627,-99.819]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[47.24,-27.096],[47.195,31.996],[94.408,4.568],[94.453,-54.524]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[155.388,-143.846],[157.937,-85.812],[110.67,-113.24],[108.121,-171.274]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[178.669,-62.586],[177.049,-5.018],[177.007,-40.852],[178.627,-99.488]],"c":true}]},{"t":23.44921875,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[123.179,-8.183],[123.497,-8.123],[160.537,-37.36],[160.219,-37.65]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.133333333333,0.533333333333,0.062745098039,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.592,1,0.251,0.5,0.467,0.886,0.125,1,0.341,0.773,0]}},"s":{"a":0,"k":[-70,107]},"e":{"a":0,"k":[-70.5,-42]},"t":1,"nm":"Gradient_sp250JqFEt","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[109.711,21.106],[109.902,76.805],[109.778,-127.463],[109.586,-186.343]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-61.222,33.676],[-61.267,92.768],[201.494,-56.392],[201.539,-115.484]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[202.528,-116.699],[205.077,-58.665],[63.53,-140.387],[60.981,-198.422]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[178.711,-26.063],[177.09,30.449],[176.965,-76.319],[178.586,-136.011]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":23.449,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[86.239,23.608],[86.96,86.263],[197.633,-7.181],[197.16,-64.191]],"c":true}]},{"t":32.068359375,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[60.653,37.551],[61.282,96.691],[202.669,14.969],[202.039,-44.172]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.549019607843,0,0.560784313725,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.573,0.816,0.5,1,0.765,0.467,1,1,0.957,0.118]}},"s":{"a":0,"k":[119.586,-56.314]},"e":{"a":0,"k":[6.461,156.253]},"t":1,"nm":"Gradient_E9CSPoI72m","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,-1]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":45,"st":-5,"bm":0},{"ddd":0,"ind":35,"ty":4,"nm":"Layer 2","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.333],"y":[0.025]},"t":2.6,"s":[117.393]},{"t":13,"s":[12]}]},"p":{"a":1,"k":[{"i":{"x":0.403,"y":1},"o":{"x":0.137,"y":0.495},"t":3,"s":[262.447,263.133,0],"to":[-140.782,82.357,0],"ti":[-35.452,44.291,0]},{"t":42,"s":[112.482,173.097,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.113,0.113,0.113],"y":[0.377,0.84,1]},"o":{"x":[0.261,0.261,0.261],"y":[0.358,0.092,0]},"t":3,"s":[0,0,100]},{"i":{"x":[0.568,0.568,0.568],"y":[1,1,1]},"o":{"x":[0.245,0.245,0.245],"y":[0.084,-0.118,0]},"t":7.355,"s":[16.427,63.927,100]},{"i":{"x":[0.568,0.568,0.568],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":11.711,"s":[50,40,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":21.666,"s":[45,45,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":34,"s":[45,45,100]},{"t":42,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[0,0],[-33.779,-14.515],[0,-50.763]],"o":[[0,-16.87],[-11.87,-48.515],[0,19.856]],"v":[[-123.816,-41.735],[0.279,-31.735],[-123.886,-99.656]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[0,0],[-33.799,-62.676],[0,-50.763]],"o":[[0,-31.581],[-11.87,-90.82],[0,19.856]],"v":[[-123.908,-63.225],[0.279,-32.336],[-123.886,-99.656]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[0,0],[-20.029,-88.414],[18.502,-47.289]],"o":[[-1.5,-79.775],[-8.529,-107.164],[-6.273,16.031]],"v":[[-124,-101.975],[0.279,-32.336],[-123.977,-138.406]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[0,0],[-33.799,-62.676],[0,-50.763]],"o":[[0,-31.581],[-11.87,-90.82],[0,19.856]],"v":[[-123.908,-63.225],[0.279,-32.336],[-123.886,-99.656]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[0,0],[-33.779,-14.515],[0,-50.763]],"o":[[0,-16.87],[-11.87,-48.515],[0,19.856]],"v":[[-123.816,-41.735],[0.279,-31.735],[-123.886,-99.656]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":22.715,"s":[{"i":[[0,0],[-29.701,-70.336],[5.506,-49.729]],"o":[[-0.446,-45.923],[-10.876,-95.684],[-1.867,18.718]],"v":[[-123.936,-74.756],[0.279,-32.336],[-123.913,-111.188]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":27.715,"s":[{"i":[[0,0],[-33.799,-62.676],[0,-50.763]],"o":[[0,-31.581],[-11.87,-90.82],[0,19.856]],"v":[[-123.908,-63.225],[0.279,-32.336],[-123.886,-99.656]],"c":true}]},{"t":37,"s":[{"i":[[0,0.055],[0.035,-0.238],[-0.003,-0.129]],"o":[[-0.001,-0.278],[0.155,-0.028],[0.002,0.073]],"v":[[1.944,-32.916],[1.276,-32.681],[1.946,-32.73]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.58431372549,0.266666666667,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.949019667682,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[-81.799,4.704],[0.457,15.866],[1.036,-15.219]],"o":[[-54.279,-25.015],[0,0],[-1.036,15.219]],"v":[[0.279,-31.735],[-123.886,-99.656],[-123.794,-41.735]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[-81.799,8.806],[0.457,15.866],[1.036,-28.489]],"o":[[-67.048,-4.427],[0,0],[-1.036,28.489]],"v":[[0.279,-32.336],[-123.886,-99.656],[-123.886,-63.225]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[-81.799,8.806],[0.457,15.866],[-4.644,-28.127]],"o":[[-67.048,-4.427],[0,0],[4.102,24.85]],"v":[[0.279,-32.336],[-123.977,-138.406],[-123.977,-101.975]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[-81.799,8.806],[0.457,15.866],[1.036,-28.489]],"o":[[-67.048,-4.427],[0,0],[-1.036,28.489]],"v":[[0.279,-32.336],[-123.886,-99.656],[-123.886,-63.225]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[-81.799,4.704],[0.457,15.866],[1.036,-15.219]],"o":[[-54.279,-25.015],[0,0],[-1.036,15.219]],"v":[[0.279,-31.735],[-123.886,-99.656],[-123.794,-41.735]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":22.715,"s":[{"i":[[-81.799,8.806],[0.457,15.866],[-0.654,-28.382]],"o":[[-67.048,-4.427],[0,0],[0.493,27.406]],"v":[[0.279,-32.336],[-123.913,-111.188],[-123.913,-74.756]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":27.715,"s":[{"i":[[-81.799,8.806],[0.457,15.866],[1.036,-28.489]],"o":[[-67.048,-4.427],[0,0],[-1.036,28.489]],"v":[[0.279,-32.336],[-123.886,-99.656],[-123.886,-63.225]],"c":true}]},{"t":37,"s":[{"i":[[0.121,-0.111],[0.002,0.162],[0,0.078]],"o":[[0.196,0.033],[0,-0.016],[-0.113,0.012]],"v":[[1.276,-32.681],[1.944,-32.732],[1.944,-32.918]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.58431372549,0.266666666667,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843197093,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[77.005,55.715],[0,0],[0,0]],"o":[[0,0],[88.791,15.222],[0,0]],"v":[[-165.505,-97.465],[-167.291,-12.945],[0.506,-31.735]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[67.165,89.824],[0,0],[0,0]],"o":[[0,0],[63.712,46.446],[0,0]],"v":[[-167.505,-113.965],[-168.541,-55.472],[0.506,-32.336]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[59.24,45.557],[0,0],[0,0]],"o":[[0,0],[59.027,29.363],[0,0]],"v":[[-163.001,-86.872],[-168.29,-66.175],[0.506,-32.336]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[67.165,89.824],[0,0],[0,0]],"o":[[0,0],[63.712,46.446],[0,0]],"v":[[-167.505,-113.965],[-168.541,-55.472],[0.506,-32.336]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[77.005,55.715],[0,0],[0,0]],"o":[[0,0],[88.791,15.222],[0,0]],"v":[[-165.505,-97.465],[-167.291,-12.945],[0.506,-31.735]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":22.715,"s":[{"i":[[64.807,76.651],[0,0],[0,0]],"o":[[0,0],[62.318,41.362],[0,0]],"v":[[-166.165,-105.902],[-168.467,-58.657],[0.506,-32.336]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":27.715,"s":[{"i":[[67.165,89.824],[0,0],[0,0]],"o":[[0,0],[63.712,46.446],[0,0]],"v":[[-167.505,-113.965],[-168.541,-55.472],[0.506,-32.336]],"c":true}]},{"t":37,"s":[{"i":[[92.491,-59.579],[0,0],[0,0]],"o":[[0,0],[93.777,-57.792],[0,0]],"v":[[-236.741,-42.421],[-237.777,-43.208],[0.506,-32.336]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.58431372549,0.266666666667,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.949019667682,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[0,0],[33.799,-33.481],[0,-50.763]],"o":[[0,-16.87],[11.87,-48.515],[0,19.856]],"v":[[123.908,-48.235],[-0.279,-31.735],[123.886,-99.656]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[0,0],[33.799,-62.676],[0,-50.763]],"o":[[0,-31.581],[11.87,-90.82],[0,19.856]],"v":[[123.908,-63.225],[-0.279,-32.336],[123.886,-99.656]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[0,-10.15],[44.029,-99.664],[-13.909,-46.155]],"o":[[-2.691,-65.65],[11.87,-90.82],[4.831,16.031]],"v":[[123.816,-101.975],[-0.279,-32.336],[123.794,-138.406]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[0,0],[33.799,-62.676],[0,-50.763]],"o":[[0,-31.581],[11.87,-90.82],[0,19.856]],"v":[[123.908,-63.225],[-0.279,-32.336],[123.886,-99.656]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[0,0],[33.799,-33.481],[0,-50.763]],"o":[[0,-16.87],[11.87,-48.515],[0,19.856]],"v":[[123.908,-48.235],[-0.279,-31.735],[123.886,-99.656]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":22.715,"s":[{"i":[[0,-3.021],[36.843,-73.683],[-4.139,-49.392]],"o":[[-0.801,-41.719],[11.87,-90.82],[1.438,18.718]],"v":[[123.881,-74.756],[-0.279,-32.336],[123.858,-111.188]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":27.715,"s":[{"i":[[0,0],[33.799,-62.676],[0,-50.763]],"o":[[0,-31.581],[11.87,-90.82],[0,19.856]],"v":[[123.908,-63.225],[-0.279,-32.336],[123.886,-99.656]],"c":true}]},{"t":37,"s":[{"i":[[0,-0.089],[0.06,0.338],[-0.001,0.127]],"o":[[0,0.26],[0.314,0.056],[0.001,0.101]],"v":[[1.754,-32.063],[0.884,-32.391],[1.754,-32.325]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.58431372549,0.266666666667,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.949019667682,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[81.799,4.704],[-0.457,15.866],[-1.036,-15.219]],"o":[[46.529,-39.265],[0,0],[1.036,15.219]],"v":[[-0.279,-31.735],[123.886,-99.656],[123.886,-48.235]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[81.799,8.806],[-0.457,15.866],[-1.036,-28.489]],"o":[[67.048,-4.427],[0,0],[1.036,28.489]],"v":[[-0.279,-32.336],[123.886,-99.656],[123.886,-63.225]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[81.799,8.806],[0.206,64.344],[0.019,-19.713]],"o":[[67.048,-4.427],[0,0],[-0.027,28.508]],"v":[[-0.279,-32.336],[123.794,-138.406],[123.794,-101.975]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[81.799,8.806],[-0.457,15.866],[-1.036,-28.489]],"o":[[67.048,-4.427],[0,0],[1.036,28.489]],"v":[[-0.279,-32.336],[123.886,-99.656],[123.886,-63.225]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[81.799,4.704],[-0.457,15.866],[-1.036,-15.219]],"o":[[46.529,-39.265],[0,0],[1.036,15.219]],"v":[[-0.279,-31.735],[123.886,-99.656],[123.886,-48.235]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":22.715,"s":[{"i":[[81.799,8.806],[-0.26,30.293],[-0.722,-25.877]],"o":[[67.048,-4.427],[0,0],[0.72,28.495]],"v":[[-0.279,-32.336],[123.858,-111.188],[123.858,-74.756]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":27.715,"s":[{"i":[[81.799,8.806],[-0.457,15.866],[-1.036,-28.489]],"o":[[67.048,-4.427],[0,0],[1.036,28.489]],"v":[[-0.279,-32.336],[123.886,-99.656],[123.886,-63.225]],"c":true}]},{"t":37,"s":[{"i":[[0.267,0.181],[0.002,-0.315],[-0.001,-0.129]],"o":[[0.157,-0.036],[0,0.038],[0.001,-0.095]],"v":[[0.884,-32.391],[1.755,-32.328],[1.754,-32.08]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.58431372549,0.266666666667,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843197093,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[-57.761,32.715],[0,0],[0,0]],"o":[[0,0],[-61.083,19.972],[0,0]],"v":[[167.511,-80.465],[168.583,-13.222],[-0.506,-31.735]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[-67.165,89.824],[0,0],[0,0]],"o":[[0,0],[-63.712,46.446],[0,0]],"v":[[167.505,-113.965],[168.541,-55.472],[-0.506,-32.336]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[-49.778,62.832],[0,0],[0,0]],"o":[[0,0],[-53.219,41.7],[0,0]],"v":[[157.669,-96.238],[167.706,-69.551],[-0.506,-32.336]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[-67.165,89.824],[0,0],[0,0]],"o":[[0,0],[-63.712,46.446],[0,0]],"v":[[167.505,-113.965],[168.541,-55.472],[-0.506,-32.336]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[-57.761,32.715],[0,0],[0,0]],"o":[[0,0],[-61.083,19.972],[0,0]],"v":[[167.511,-80.465],[168.583,-13.222],[-0.506,-31.735]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":22.715,"s":[{"i":[[-61.991,81.792],[0,0],[0,0]],"o":[[0,0],[-60.59,45.034],[0,0]],"v":[[164.578,-108.69],[168.293,-59.662],[-0.506,-32.336]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":27.715,"s":[{"i":[[-67.165,89.824],[0,0],[0,0]],"o":[[0,0],[-63.712,46.446],[0,0]],"v":[[167.505,-113.965],[168.541,-55.472],[-0.506,-32.336]],"c":true}]},{"t":37,"s":[{"i":[[-76.255,-39.75],[0,0],[0,0]],"o":[[0,0],[-76.791,-38.197],[0,0]],"v":[[223.755,-51],[224.791,-51.553],[-0.506,-32.336]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.58431372549,0.266666666667,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.949019667682,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":32.715,"s":[100]},{"t":37,"s":[0]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[-10.972,12.078],[0,0],[17.96,-4.932],[0,0]],"o":[[0,0],[-16.104,15.242],[0,0],[15.322,-4.068]],"v":[[130.139,13.484],[130.121,97.174],[78.964,127.088],[78.982,41.672]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[-10.972,8.832],[0,0],[17.96,-3.437],[0,0]],"o":[[0,0],[-16.104,10.622],[0,0],[15.322,-2.975]],"v":[[130.139,1.302],[130.139,99.404],[78.982,120.252],[78.982,21.914]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[-10.972,0.889],[0,0],[17.96,-0.317],[0,0]],"o":[[0,0],[-16.104,0.979],[0,0],[15.322,-0.299]],"v":[[130.139,-28.505],[130.139,76.949],[78.982,78.871],[78.982,-26.431]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[-10.972,8.832],[0,0],[17.96,-3.437],[0,0]],"o":[[0,0],[-16.104,10.622],[0,0],[15.322,-2.975]],"v":[[130.139,1.302],[130.139,99.404],[78.982,120.252],[78.982,21.914]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[-10.972,12.078],[0,0],[17.96,-4.932],[0,0]],"o":[[0,0],[-16.104,15.242],[0,0],[15.322,-4.068]],"v":[[130.139,13.484],[130.121,97.174],[78.964,127.088],[78.982,41.672]],"c":true}]},{"t":26.28515625,"s":[{"i":[[-10.972,6.468],[0,0],[17.96,-2.509],[0,0]],"o":[[0,0],[-16.104,7.752],[0,0],[15.322,-2.179]],"v":[[130.139,-7.568],[130.278,-7.278],[79.121,7.937],[78.982,7.527]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.58431372549,0.266666666667,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.584,0.267,0.5,1,0.767,0.133,1,1,0.949,0]}},"s":{"a":0,"k":[4.5,25]},"e":{"a":0,"k":[5.5,122.5]},"t":1,"nm":"Gradient_fUQF0Ez9Pq","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[10.972,12.078],[0,0],[-17.96,-4.932],[0,0]],"o":[[0,0],[16.104,15.242],[0,0],[-15.322,-4.068]],"v":[[-130.139,13.156],[-130.157,96.83],[-79,126.744],[-78.982,41.345]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[10.972,8.832],[0,0],[-17.96,-3.437],[0,0]],"o":[[0,0],[16.104,10.622],[0,0],[-15.322,-2.975]],"v":[[-130.139,1.062],[-130.139,99.165],[-78.982,120.012],[-78.982,21.674]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[10.972,0.889],[0,0],[-17.96,-0.317],[0,0]],"o":[[0,0],[16.104,0.979],[0,0],[-15.322,-0.299]],"v":[[-130.139,-28.529],[-130.139,76.927],[-78.982,78.849],[-78.982,-26.455]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[10.972,8.832],[0,0],[-17.96,-3.437],[0,0]],"o":[[0,0],[16.104,10.622],[0,0],[-15.322,-2.975]],"v":[[-130.139,1.062],[-130.139,99.165],[-78.982,120.012],[-78.982,21.674]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[10.972,12.078],[0,0],[-17.96,-4.932],[0,0]],"o":[[0,0],[16.104,15.242],[0,0],[-15.322,-4.068]],"v":[[-130.139,13.156],[-130.157,96.83],[-79,126.744],[-78.982,41.345]],"c":true}]},{"t":26.28515625,"s":[{"i":[[10.972,6.468],[0,0],[-17.96,-2.509],[0,0]],"o":[[0,0],[16.104,7.752],[0,0],[-15.322,-2.179]],"v":[[-130.139,-7.744],[-130,-7.453],[-78.843,7.763],[-78.982,7.352]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.58431372549,0.266666666667,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.584,0.267,0.5,1,0.767,0.133,1,1,0.949,0]}},"s":{"a":0,"k":[-0.5,17]},"e":{"a":0,"k":[-1,125.5]},"t":1,"nm":"Gradient_7LrCXwVvRi","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[12.642,-12.38],[-60.129,3.384],[0,0],[-12.642,12.38],[51.639,-5.582],[0,0]],"o":[[0,0],[9.941,28.381],[20.654,-6.634],[0,0],[-12.721,-25.732],[-20.654,6.634]],"v":[[-130.139,-76.837],[0,-32.011],[78.982,41.672],[130.139,13.156],[0,-32.011],[-78.982,-105.353]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[12.642,-9.052],[-60.129,4.632],[0,0],[-12.642,9.052],[51.639,-7.64],[0,0]],"o":[[0,0],[9.941,38.849],[20.654,-4.851],[0,0],[-12.721,-35.223],[-20.654,4.851]],"v":[[-130.139,-64.743],[0,-32.581],[78.982,21.914],[130.139,1.062],[0,-32.581],[-78.982,-85.595]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[12.642,-0.911],[-60.129,0.466],[0,0],[-12.642,0.911],[51.639,-0.769],[0,0]],"o":[[0,0],[9.941,3.91],[20.654,-0.488],[0,0],[-12.721,-3.545],[-20.654,0.488]],"v":[[-130.139,-35.152],[0,-31.915],[78.982,-26.431],[130.139,-28.529],[0,-31.915],[-78.982,-37.25]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[12.642,-9.052],[-60.129,4.632],[0,0],[-12.642,9.052],[51.639,-7.64],[0,0]],"o":[[0,0],[9.941,38.849],[20.654,-4.851],[0,0],[-12.721,-35.223],[-20.654,4.851]],"v":[[-130.139,-64.743],[0,-32.581],[78.982,21.914],[130.139,1.062],[0,-32.581],[-78.982,-85.595]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[12.642,-12.38],[-60.129,3.384],[0,0],[-12.642,12.38],[51.639,-5.582],[0,0]],"o":[[0,0],[9.941,28.381],[20.654,-6.634],[0,0],[-12.721,-25.732],[-20.654,6.634]],"v":[[-130.139,-76.837],[0,-32.011],[78.982,41.672],[130.139,13.156],[0,-32.011],[-78.982,-105.353]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":26.285,"s":[{"i":[[12.642,-6.63],[-60.129,3.392],[0,0],[-12.642,6.63],[51.639,-5.595],[0,0]],"o":[[0,0],[9.941,28.451],[20.654,-3.552],[0,0],[-12.721,-25.796],[-20.654,3.552]],"v":[[-130.139,-55.937],[0,-32.383],[78.982,7.527],[130.139,-7.744],[0,-32.383],[-78.982,-71.208]],"c":true}]},{"t":34.85546875,"s":[{"i":[[0.195,-0.071],[-0.926,0.036],[0,0],[-0.195,0.071],[0.795,-0.06],[0,0]],"o":[[0,0],[0.153,0.306],[0.318,-0.038],[0,0],[-0.196,-0.277],[-0.318,0.038]],"v":[[-1.035,-32.815],[1.138,-32.743],[1.359,-32.08],[3.625,-32.738],[1.138,-32.743],[0.679,-33.335]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.58431372549,0.266666666667,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.949019667682,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25.57,"s":[100]},{"t":26.28515625,"s":[0]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 7","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[0,0],[-20.654,-6.634],[-11.037,22.705],[0,0],[20.654,6.634],[17.84,-28.097]],"o":[[12.642,12.38],[0,0],[47.957,2.363],[-12.642,-12.38],[0,0],[-59.987,-2.649]],"v":[[-130.139,13.156],[-78.982,41.672],[0,-32.011],[130.139,-76.837],[78.982,-105.353],[0,-32.011]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[0,0],[-20.654,-4.851],[-11.037,31.079],[0,0],[20.654,4.851],[17.84,-38.46]],"o":[[12.642,9.052],[0,0],[47.957,3.235],[-12.642,-9.052],[0,0],[-59.987,-3.626]],"v":[[-130.139,1.062],[-78.982,21.914],[0,-32.581],[130.139,-64.743],[78.982,-85.595],[0,-32.581]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[0,0],[-20.654,-0.488],[-11.037,3.128],[0,0],[20.654,0.488],[17.84,-3.871]],"o":[[12.642,0.911],[0,0],[47.957,0.326],[-12.642,-0.911],[0,0],[-59.987,-0.365]],"v":[[-130.139,-28.529],[-78.982,-26.431],[0,-31.915],[130.139,-35.152],[78.982,-37.25],[0,-31.915]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[0,0],[-20.654,-4.851],[-11.037,31.079],[0,0],[20.654,4.851],[17.84,-38.46]],"o":[[12.642,9.052],[0,0],[47.957,3.235],[-12.642,-9.052],[0,0],[-59.987,-3.626]],"v":[[-130.139,1.062],[-78.982,21.914],[0,-32.581],[130.139,-64.743],[78.982,-85.595],[0,-32.581]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[0,0],[-20.654,-6.634],[-11.037,22.705],[0,0],[20.654,6.634],[17.84,-28.097]],"o":[[12.642,12.38],[0,0],[47.957,2.363],[-12.642,-12.38],[0,0],[-59.987,-2.649]],"v":[[-130.139,13.156],[-78.982,41.672],[0,-32.011],[130.139,-76.837],[78.982,-105.353],[0,-32.011]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0},"t":26.285,"s":[{"i":[[0,0],[-20.654,-3.552],[-11.037,22.761],[0,0],[20.654,3.552],[17.84,-28.167]],"o":[[12.642,6.63],[0,0],[47.957,2.369],[-12.642,-6.63],[0,0],[-59.987,-2.655]],"v":[[-130.139,-7.744],[-78.982,7.527],[0,-32.383],[130.139,-55.937],[78.982,-71.208],[0,-32.383]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":32.715,"s":[{"i":[[0,0],[-20.654,-0.488],[-11.037,3.128],[0,0],[20.654,0.488],[17.84,-3.871]],"o":[[12.642,0.911],[0,0],[47.957,0.326],[-12.642,-0.911],[0,0],[-59.987,-0.365]],"v":[[-130.139,-28.529],[-78.982,-26.431],[0,-31.915],[130.139,-35.152],[78.982,-37.25],[0,-31.915]],"c":true}]},{"t":37,"s":[{"i":[[0,0],[-0.25,-0.006],[-0.134,0.038],[0,0],[0.25,0.006],[0.216,-0.047]],"o":[[0.153,0.011],[0,0],[0.582,0.004],[-0.153,-0.011],[0,0],[-0.727,-0.004]],"v":[[-1.578,-31.8],[-0.958,-31.775],[0,-31.841],[1.578,-31.881],[0.958,-31.906],[0,-31.841]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.58431372549,0.266666666667,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.949019667682,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[0,-113.34],[0,113.34]],"o":[[0,113.34],[0,-113.34]],"v":[[150,-31.84],[-150,-31.84]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[0,-82.877],[0,82.877]],"o":[[0,82.877],[0,-82.877]],"v":[[150,-31.84],[-150,-31.84]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[0,-8.34],[0,8.34]],"o":[[0,8.34],[0,-8.34]],"v":[[150,-31.84],[-150,-31.84]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[0,-82.877],[0,82.877]],"o":[[0,82.877],[0,-82.877]],"v":[[150,-31.84],[-150,-31.84]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[0,-113.34],[0,113.34]],"o":[[0,113.34],[0,-113.34]],"v":[[150,-31.84],[-150,-31.84]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0},"t":26.285,"s":[{"i":[[0,-60.696],[0,60.696]],"o":[[0,60.696],[0,-60.696]],"v":[[150,-31.84],[-150,-31.84]],"c":true}]},{"t":32.71484375,"s":[{"i":[[0,-8.34],[0,8.34]],"o":[[0,8.34],[0,-8.34]],"v":[[150,-31.84],[-150,-31.84]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.082352941176,0.560784313725,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0,0.525,1,0.5,0.288,0.763,0.998,1,0.576,1,0.995]}},"s":{"a":0,"k":[30.086,-99.814]},"e":{"a":0,"k":[-29.539,39.753]},"t":1,"nm":"Gradient_Q4Vi2Dk2lO","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":1.285,"s":[{"i":[[0,-53.815],[0,118.92],[0,0],[0,0]],"o":[[0,118.92],[0,-54.203],[0,0],[0,0]],"v":[[149.982,49.08],[-150.018,49.08],[-150,-31.508],[150,-31.406]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":4.855,"s":[{"i":[[0,-37.504],[0,82.877],[0,0],[0,0]],"o":[[0,82.877],[0,-37.775],[0,0],[0,0]],"v":[[150,65.887],[-150,65.887],[-150,-31.598],[150,-31.523]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":9.145,"s":[{"i":[[0,-3.458],[0,7.641],[0,0],[0,0]],"o":[[0,7.641],[0,-3.483],[0,0],[0,0]],"v":[[150,73.859],[-150,73.859],[-150,-31.816],[150,-31.809]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":14.145,"s":[{"i":[[0,-37.504],[0,82.877],[0,0],[0,0]],"o":[[0,82.877],[0,-37.775],[0,0],[0,0]],"v":[[150,65.887],[-150,65.887],[-150,-31.598],[150,-31.523]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.5,"y":0},"t":19.145,"s":[{"i":[[0,-53.815],[0,118.92],[0,0],[0,0]],"o":[[0,118.92],[0,-54.203],[0,0],[0,0]],"v":[[149.982,49.08],[-150.018,49.08],[-150,-31.508],[150,-31.406]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0},"t":26.285,"s":[{"i":[[0,-27.373],[0,60.488],[0,0],[0,0]],"o":[[0,60.488],[0,-27.57],[0,0],[0,0]],"v":[[150,68.259],[-150,68.259],[-150,-31.663],[150,-31.608]],"c":true}]},{"t":32.71484375,"s":[{"i":[[0,-3.458],[0,7.641],[0,0],[0,0]],"o":[[0,7.641],[0,-3.483],[0,0],[0,0]],"v":[[150,73.859],[-150,73.859],[-150,-31.816],[150,-31.809]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.082352941176,0.560784313725,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0,0,0.525,1,0.165,0,0.345,1,0.33,0,0.165,1,0.665,0.288,0.582,0.998,1,0.576,1,0.995]}},"s":{"a":0,"k":[-147.414,63.686]},"e":{"a":0,"k":[141.461,60.253]},"t":1,"nm":"Gradient_prB2Rm9ILF","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 6","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":19.145,"s":[0,0],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29.855,"s":[0,-101],"to":[0,0],"ti":[0,0]},{"t":37,"s":[131,-260]}]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":33.43,"s":[100,100]},{"t":37,"s":[81,81]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[1],"y":[0]},"t":19.145,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29.855,"s":[0]},{"t":37,"s":[34]}]},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.57,"s":[{"i":[[0.571,79.975],[0,0],[0,-36.607],[0,80.315],[0,0],[0,0]],"o":[[0,0],[0,0],[0,80.315],[0,-36.345],[0,0],[-0.745,79.927]],"v":[[-145.356,-27.123],[-145.363,-27.123],[-145.363,79.838],[145.363,79.838],[145.363,-27.051],[145.354,-27.051]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24.145,"s":[{"i":[[0.571,79.975],[0,0],[0,-36.607],[0,80.315],[0,0],[0,0]],"o":[[0,0],[0,0],[0,80.315],[0,-36.345],[0,0],[-0.745,79.927]],"v":[[-145.356,-27.123],[-145.363,-27.123],[-145.363,79.838],[145.363,79.838],[145.363,-27.051],[145.354,-27.051]],"c":true}]},{"t":35.5703125,"s":[{"i":[[0.571,150.378],[0,0],[0,-72.813],[0,159.75],[0,0],[0,0]],"o":[[0,0],[0,0],[0,159.75],[0,-72.292],[0,0],[-0.745,150.287]],"v":[[-145.356,-31.575],[-145.363,-31.575],[-145.5,30.75],[145.226,30.75],[145.363,-31.44],[145.354,-31.44]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.317647058824,0.317647058824,0.317647058824,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.49,0.574,0.637,0.5,0.745,0.787,0.818,1,1,1,1]}},"s":{"a":0,"k":[119.5,43]},"e":{"a":0,"k":[-103.5,59]},"t":1,"nm":"Gradient_PwvcnBhLqh","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.57,"s":[{"i":[[0,-80.315],[0,80.315]],"o":[[0,80.315],[0,-80.315]],"v":[[145.363,79.838],[-145.363,79.838]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24.145,"s":[{"i":[[0,-80.315],[0,80.315]],"o":[[0,80.315],[0,-80.315]],"v":[[145.363,79.838],[-145.363,79.838]],"c":true}]},{"t":35.5703125,"s":[{"i":[[0,-159.75],[0,159.75]],"o":[[0,159.75],[0,-159.75]],"v":[[145.226,30.75],[-145.5,30.75]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.317647058824,0.317647058824,0.317647058824,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.6,0.666666666667,0.717647058824,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.57,"s":[{"i":[[0,-80.315],[0,80.315]],"o":[[0,80.315],[0,-80.315]],"v":[[145.363,-27.358],[-145.363,-27.358]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24.145,"s":[{"i":[[0,-80.315],[0,80.315]],"o":[[0,80.315],[0,-80.315]],"v":[[145.363,-27.358],[-145.363,-27.358]],"c":true}]},{"t":35.5703125,"s":[{"i":[[0,-151.018],[0,151.018]],"o":[[0,151.018],[0,-151.018]],"v":[[145.363,-32.018],[-145.363,-32.018]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.317647058824,0.317647058824,0.317647058824,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.49,0.574,0.637,0.5,0.745,0.787,0.818,1,1,1,1]}},"s":{"a":0,"k":[-102,-28]},"e":{"a":0,"k":[92.862,-28]},"t":1,"nm":"Gradient_ZYm3QBhvmR","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":12.715,"s":[0,0],"to":[0,0],"ti":[0,0]},{"t":22,"s":[0,0]}]},"a":{"a":0,"k":[0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":12.715,"s":[54,54]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[1,1],"y":[0,0]},"t":22,"s":[100,100]},{"t":37,"s":[90,90]}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":3,"op":43,"st":-13,"bm":0},{"ddd":0,"ind":37,"ty":4,"nm":"g1","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[-29]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[10]},{"t":40,"s":[-22]}]},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[251.754,208.75,0],"to":[20.226,-43.4,0],"ti":[-23.226,-117.6,0]},{"t":40,"s":[430.607,261.347,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.179,0.179,0.179],"y":[0.732,0.327,0.715]},"o":{"x":[0.307,0.307,0.307],"y":[0.124,0.312,0.133]},"t":0,"s":[0,0,100]},{"i":{"x":[0.525,0.525,0.525],"y":[1,1,1]},"o":{"x":[0.212,0.212,0.212],"y":[0.382,0.262,0.118]},"t":3.889,"s":[42.638,17,100]},{"i":{"x":[0.525,0.525,0.525],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":10.111,"s":[55,35,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":21,"s":[45,45,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[1,1,1],"y":[0,0,0]},"t":34,"s":[41.5,41.5,100]},{"t":40,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[4.284,-6.947],[-33.294,-58.359],[5.882,-21.15]],"o":[[-4.135,-13.22],[7.139,-79.656],[-6,5.346]],"v":[[-89.729,-159.8],[0.513,-80.717],[-58.098,-181.479]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[7.328,0],[-22.124,-35.348],[10.144,0]],"o":[[-7.328,0],[23.862,-42.975],[-10.144,0]],"v":[[-26.251,-184.732],[0.888,-83.025],[26.856,-184.713]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[9.416,4.312],[-5.339,-76.365],[-10.609,-5.011]],"o":[[-14.959,-15.313],[37.459,-67.302],[-9.734,-7.011]],"v":[[58.834,-182.687],[0.031,-81.284],[91.609,-161.489]],"c":true}]},{"t":28,"s":[{"i":[[0,0.055],[0.035,-0.238],[-0.003,-0.129]],"o":[[-0.001,-0.278],[0.155,-0.028],[0.002,0.073]],"v":[[1.972,-84.416],[1.304,-84.181],[1.974,-84.23]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.67320245481,0.539442054898,0.621271888883,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[-58.754,-22.426],[2.84,9.446],[2.87,-3.464]],"o":[[-26.158,-35.961],[-2.568,0],[-2.546,16.968]],"v":[[0.513,-80.717],[-57.951,-181.3],[-89.568,-159.611]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[-16.888,-46.475],[4.313,0],[4.959,0]],"o":[[23.112,-55.975],[-4.313,0],[-4.959,0]],"v":[[0.888,-83.025],[26.854,-184.651],[-26.253,-184.651]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[27.557,-28.608],[3.11,18.372],[7.875,5.207]],"o":[[59.243,-26.628],[-2.676,-1.802],[-7.016,11.974]],"v":[[0.031,-81.284],[91.226,-161.727],[59,-182.832]],"c":true}]},{"t":28,"s":[{"i":[[0.121,-0.111],[0.002,0.162],[0,0.078]],"o":[[0.196,0.033],[0,-0.016],[-0.113,0.012]],"v":[[1.304,-84.181],[1.972,-84.232],[1.973,-84.418]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.67320245481,0.539442054898,0.621271888883,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.901960790157,0.901960790157,0.901960790157,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[39.987,83.048],[0,0],[0,0]],"o":[[0,0],[37.932,59.071],[0,0]],"v":[[-72.968,-196.749],[-126.624,-162.347],[0.665,-80.582]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,49.669],[0,0],[0,0]],"o":[[0,0],[0,52.773],[0,0]],"v":[[45.25,-196.291],[-43.839,-197],[0.918,-82.799]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[-46.488,62.291],[0,0],[0,0]],"o":[[0,0],[-48.138,89.011],[0,0]],"v":[[129.222,-163.269],[74.301,-199.194],[0.067,-81.007]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":22.4,"s":[{"i":[[-84.252,-96.603],[0,0],[65.058,-1.852]],"o":[[0,0],[-80.439,-59.548],[72.089,49.973]],"v":[[218.612,-18.331],[212.503,-76.263],[0.909,-82.451]],"c":true}]},{"t":28,"s":[{"i":[[-98.765,-68.901],[0,0],[84.61,-15.146]],"o":[[0,0],[-98.597,-68.966],[84.61,-15.146]],"v":[[277.612,-28.106],[277.507,-28.041],[0.925,-83.049]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.67320245481,0.539442054898,0.621271888883,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[3.562,0.396],[4.486,-30.705],[2.528,-42.852]],"o":[[-2.735,-31.243],[23.134,-48.353],[-4.616,12.103]],"v":[[47.968,-59.041],[0.181,-81.135],[99.326,-80.542]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[5.983,0.37],[-26.263,6.174],[4.246,-11.798]],"o":[[-4.593,-11.621],[26.987,5.34],[-7.754,0.263]],"v":[[-43.032,-45.949],[0.888,-83.764],[43.254,-45.772]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[3.636,7.589],[-25.685,-47.937],[-17.228,-15.756]],"o":[[-2.769,-33.656],[-29.531,-12.611],[-9.187,-0.664]],"v":[[-102.517,-80.73],[0.031,-82.139],[-53.059,-56.285]],"c":true}]},{"t":28,"s":[{"i":[[0,-0.089],[0.06,0.338],[-0.001,0.127]],"o":[[0,0.26],[0.314,0.056],[0.001,0.101]],"v":[[1.782,-83.563],[0.912,-83.891],[1.782,-83.825]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.67320245481,0.539442054898,0.621271888883,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[32.617,11.332],[0.469,1.698],[2.565,-16.738]],"o":[[58.068,3.751],[-2.309,-0.343],[0.412,7.213]],"v":[[0.181,-81.135],[99.549,-80.475],[47.806,-59.055]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[-27.013,5.688],[1.246,-7.237],[5.344,0.209]],"o":[[30.487,5.966],[-3.879,-0.32],[-0.343,-9.106]],"v":[[0.888,-83.764],[43.629,-45.71],[-43.282,-45.962]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[-34.368,8.181],[14.503,9.746],[3.343,10.584]],"o":[[-6.795,12.388],[-4.163,-0.115],[-0.295,-2.323]],"v":[[0.031,-82.139],[-52.675,-56.196],[-102.669,-79.311]],"c":true}]},{"t":28,"s":[{"i":[[0.267,0.181],[0.002,-0.315],[-0.001,-0.129]],"o":[[0.157,-0.036],[0,0.038],[0.001,-0.095]],"v":[[0.912,-83.891],[1.783,-83.828],[1.782,-83.58]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.67320245481,0.539442054898,0.621271888883,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.901960790157,0.901960790157,0.901960790157,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[-47.773,37.347],[13.35,4.661],[0,0]],"o":[[-8.75,11.859],[-29.837,10.284],[0,0]],"v":[[130.25,-76.109],[73.163,-40.941],[-0.09,-81.184]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[-7.056,-21.075],[22.423,4.353],[0,0]],"o":[[-24.75,3.841],[5.117,-32.397],[0,0]],"v":[[51.556,-17.175],[-45.367,-16.853],[0.66,-83.81]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[30.446,13.502],[7.5,16.094],[0,0]],"o":[[-15.081,4.208],[53.378,40.554],[0,0]],"v":[[-72.019,-39.761],[-130.75,-75.344],[-0.121,-82.24]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":22.4,"s":[{"i":[[62.584,13.086],[0,0],[-76.293,-50.621]],"o":[[0,0],[59.413,-2.914],[-105.714,-16.287]],"v":[[-216.595,-5.445],[-221.581,-64.208],[0.796,-83.205]],"c":true}]},{"t":28,"s":[{"i":[[61.327,-74.693],[0,0],[-94.582,-57.384]],"o":[[0,0],[61.287,-75.47],[-94.582,-57.634]],"v":[[-295.542,-26.252],[-295.502,-25.724],[0.867,-83.81]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.67320245481,0.539442054898,0.621271888883,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":22.4,"s":[100]},{"t":28,"s":[0]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[66.458,-126.034],[141.785,-82.891],[0.787,-1.194],[-74.54,-44.337]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":29.6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[159.958,-168.534],[141.785,-82.891],[0.787,-1.194],[18.96,-86.837]],"c":true}]},{"t":35.19921875,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[210.458,-22.534],[141.785,-82.891],[0.787,-1.194],[69.46,59.163]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.57647061348,0,0.40000000596,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.684,0.952,0.5,0.985,0.793,0.976,1,0.971,0.903,1]}},"s":{"a":0,"k":[19.5,-137.5]},"e":{"a":0,"k":[-32.5,-25]},"t":1,"nm":"Gradient_1N4lrLIMTn","hd":false},{"ty":"tr","p":{"a":0,"k":[0,-1.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"4","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.033,-163.694],[75.36,-120.551],[-65.638,-38.854],[-140.965,-81.998]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":29.6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.033,-163.694],[17.86,-239.426],[-123.138,-157.729],[-140.965,-81.998]],"c":true}]},{"t":35.19921875,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.033,-163.694],[-47.64,-231.301],[-188.638,-149.604],[-140.965,-81.998]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.57647061348,0,0.40000000596,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.684,0.952,0.5,0.985,0.793,0.976,1,0.971,0.903,1]}},"s":{"a":0,"k":[19.5,-137.5]},"e":{"a":0,"k":[-32.5,-25]},"t":1,"nm":"Gradient_ZAYgVVKBbH","hd":false},{"ty":"tr","p":{"a":0,"k":[0,-1.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-75.144,-119.825],[-0.394,-163.484],[141.153,-81.762],[66.403,-38.102]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":29.6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-18.644,-249.575],[-0.394,-163.484],[141.153,-81.762],[122.903,-167.852]],"c":true}]},{"t":35.19921875,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[50.856,-227.325],[-0.394,-163.484],[141.153,-81.762],[192.403,-145.602]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.57647061348,0,0.40000000596,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.684,0.952,0.5,0.985,0.793,0.976,1,0.971,0.903,1]}},"s":{"a":0,"k":[19.5,-137.5]},"e":{"a":0,"k":[-32.5,-25]},"t":1,"nm":"Gradient_H8xkVVC8eW","hd":false},{"ty":"tr","p":{"a":0,"k":[0,-1.021]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-140.394,-81.325],[-65.644,-124.984],[75.903,-43.262],[1.153,0.398]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":29.6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-140.394,-81.325],[-137.777,-177.984],[3.771,-96.262],[1.153,0.398]],"c":true}]},{"t":35.19921875,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-140.394,-81.325],[-216.894,-89.984],[-75.347,-8.262],[1.153,0.398]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.57647061348,0,0.40000000596,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.684,0.952,0.5,0.985,0.793,0.976,1,0.971,0.903,1]}},"s":{"a":0,"k":[19.5,-137.5]},"e":{"a":0,"k":[-32.5,-25]},"t":1,"nm":"Gradient_0j6JMua1Ti","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.998,-136.12],[109.555,-136.491],[109.883,-26.554],[-108.67,-26.184]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.375,-163.062],[141.5,-81.891],[0.375,-0.188],[-140.75,-81.359]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-140.394,-81.325],[0.231,-163.047],[141.778,-81.324],[1.153,0.398]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.998,-136.12],[109.555,-136.491],[109.883,-26.554],[-108.67,-26.184]],"c":true}]},{"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.375,-163.062],[141.5,-81.891],[0.375,-0.188],[-140.75,-81.359]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.57647061348,0,0.40000000596,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.414,0,0.637,0.5,0.631,0.292,0.818,1,0.848,0.584,1]}},"s":{"a":0,"k":[2,13]},"e":{"a":0,"k":[61,-117.25]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient_2juTQaaxqD","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27.199,"s":[0]},{"t":28,"s":[100]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"TOP2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[-44.416,-19.761]],"o":[[0,0],[0,0],[-50.616,22.602]],"v":[[-110.103,-63.56],[-110.027,-100.532],[0.46,-81.453]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[-0.41,-27.045]],"o":[[0,0],[0,0],[-61.41,1.83]],"v":[[-94.995,-109.773],[-47.63,-137.306],[0.535,-81.705]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[-56.849,-2.331]],"o":[[0,0],[0,0],[-3.842,31.77]],"v":[[-46.448,-26.749],[-93.715,-54.177],[0.554,-81.417]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[-44.416,-19.761]],"o":[[0,0],[0,0],[-50.616,22.602]],"v":[[-110.103,-63.56],[-110.027,-100.532],[0.46,-81.453]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.208},"t":20,"s":[{"i":[[0,0],[0,0],[-9.884,-25.477]],"o":[[0,0],[0,0],[-59.087,6.302]],"v":[[-98.247,-99.824],[-61.063,-129.389],[0.519,-81.651]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.208},"t":23.199,"s":[{"i":[[0,0],[0,0],[-0.034,-0.282]],"o":[[0,0],[0,0],[-0.644,0.033]],"v":[[-1.215,-82.325],[-0.744,-82.624],[-0.191,-82.059]],"c":true}]},{"t":28,"s":[{"i":[[0,0],[0,0],[-0.034,-0.282]],"o":[[0,0],[0,0],[-0.644,0.033]],"v":[[-1.215,-82.325],[-0.744,-82.624],[-0.191,-82.059]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.674509803922,0.541176470588,0.619607843137,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[-41.937,-18.342]],"o":[[0,0],[0,0],[39.226,-18.409]],"v":[[37.473,-137.745],[-35.933,-137.648],[0.28,-81.294]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[2.785,-29.597]],"o":[[0,0],[0,0],[54.41,4.403]],"v":[[96.725,-109.685],[49.36,-136.968],[0.215,-81.653]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[-56.849,2.331]],"o":[[0,0],[0,0],[-3.842,-31.77]],"v":[[-47.92,-137.119],[-95.187,-109.691],[0.643,-81.232]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[-41.937,-18.342]],"o":[[0,0],[0,0],[39.226,-18.409]],"v":[[37.473,-137.745],[-35.933,-137.648],[0.28,-81.294]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.208},"t":20,"s":[{"i":[[0,0],[0,0],[-6.842,-27.174]],"o":[[0,0],[0,0],[51.141,-0.508]],"v":[[83.969,-115.726],[30.998,-137.115],[0.229,-81.576]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.208},"t":23.199,"s":[{"i":[[0,0],[0,0],[-0.001,-0.306]],"o":[[0,0],[0,0],[0.567,0.031]],"v":[[0.79,-82.375],[0.27,-82.646],[-0.194,-82.058]],"c":true}]},{"t":28,"s":[{"i":[[0,0],[0,0],[-0.001,-0.306]],"o":[[0,0],[0,0],[0.567,0.031]],"v":[[0.79,-82.375],[0.27,-82.646],[-0.194,-82.058]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.674509803922,0.541176470588,0.619607843137,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[40.87,20.933]],"o":[[0,0],[0,0],[-45.917,21.505]],"v":[[-36.135,-26.34],[37.271,-26.437],[0.636,-81.365]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[-4.16,33.449]],"o":[[0,0],[0,0],[-63.035,0.199]],"v":[[-93.87,-54.443],[-46.505,-27.16],[0.535,-81.574]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[56.849,-2.331]],"o":[[0,0],[0,0],[3.842,31.77]],"v":[[47.783,-26.749],[95.05,-54.177],[0.781,-81.417]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[40.87,20.933]],"o":[[0,0],[0,0],[-45.917,21.505]],"v":[[-36.135,-26.34],[37.271,-26.437],[0.636,-81.365]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.208},"t":20,"s":[{"i":[[0,0],[0,0],[5.534,30.754]],"o":[[0,0],[0,0],[-59.35,4.786]],"v":[[-81.441,-48.393],[-28.47,-27.004],[0.557,-81.529]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.208},"t":23.199,"s":[{"i":[[0,0],[0,0],[-0.014,0.346]],"o":[[0,0],[0,0],[-0.657,0.017]],"v":[[-1.154,-81.751],[-0.633,-81.48],[-0.191,-82.057]],"c":true}]},{"t":28,"s":[{"i":[[0,0],[0,0],[-0.014,0.346]],"o":[[0,0],[0,0],[-0.657,0.017]],"v":[[-1.154,-81.751],[-0.633,-81.48],[-0.191,-82.057]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.674509803922,0.541176470588,0.619607843137,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[47.076,21.883]],"o":[[0,0],[0,0],[50.076,-22.163]],"v":[[111.5,-100.405],[111.424,-63.769],[0.636,-81.365]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[3.84,30.199]],"o":[[0,0],[0,0],[60.715,-1.176]],"v":[[94.475,-54.176],[47.11,-27.142],[0.535,-81.574]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[56.849,2.331]],"o":[[0,0],[0,0],[3.842,-31.77]],"v":[[49.763,-137.119],[97.029,-109.691],[0.781,-81.417]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[47.076,21.883]],"o":[[0,0],[0,0],[50.076,-22.163]],"v":[[111.5,-100.405],[111.424,-63.769],[0.636,-81.365]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.208},"t":20,"s":[{"i":[[0,0],[0,0],[13.148,28.408]],"o":[[0,0],[0,0],[58.424,-5.694]],"v":[[98.14,-64.128],[60.956,-35.027],[0.557,-81.529]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.208},"t":23.199,"s":[{"i":[[0,0],[0,0],[0.07,0.315]],"o":[[0,0],[0,0],[0.637,-0.027]],"v":[[0.817,-81.798],[0.347,-81.505],[-0.191,-82.057]],"c":true}]},{"t":28,"s":[{"i":[[0,0],[0,0],[0.07,0.315]],"o":[[0,0],[0,0],[0.637,-0.027]],"v":[[0.817,-81.798],[0.347,-81.505],[-0.191,-82.057]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.674509803922,0.541176470588,0.619607843137,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.998,-136.12],[109.555,-136.491],[109.883,-26.554],[-108.67,-26.184]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.375,-163.062],[141.5,-81.891],[0.375,-0.188],[-140.75,-81.359]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-140.394,-81.325],[0.231,-163.047],[141.778,-81.324],[1.153,0.398]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.998,-136.12],[109.555,-136.491],[109.883,-26.554],[-108.67,-26.184]],"c":true}]},{"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.375,-163.062],[141.5,-81.891],[0.375,-0.188],[-140.75,-81.359]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.294117647059,0,0.576470588235,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.895,0.684,1,0.5,0.939,0.753,1,1,0.983,0.822,1]}},"s":{"a":0,"k":[19.5,-137.5]},"e":{"a":0,"k":[-32.5,-25]},"t":1,"nm":"Gradient_NeJutkZm55","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 5","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0.5,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"top","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-36.401,-26.209],[-35.686,137],[36.771,136.686],[36.831,-26.364]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-93.34,-54.249],[-92.879,110.4],[-46.737,137.347],[-46.198,-27.052]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[46.91,-26.749],[47.371,137.9],[94.638,110.472],[94.177,-54.177]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-36.401,-26.209],[-35.686,137],[36.771,136.686],[36.831,-26.364]],"c":true}]},{"t":20,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-81.082,-52.213],[-80.576,-51.499],[-28.769,-30.42],[-28.324,-30.904]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.564705882353,0.423529411765,0.505882352941,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,0.851,0.851,0.851,1,0.702,0.702,0.702]}},"s":{"a":0,"k":[-70,107]},"e":{"a":0,"k":[-70.5,-42]},"t":1,"nm":"Gradient_b4S6m3KfYm","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.613,-26.179],[109.673,-26.436],[108.958,134.166],[-109.328,134.416]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-140.214,-81.352],[0.567,-0.012],[0.105,162.637],[-140.676,81.297]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.692,0.398],[141.317,-81.324],[140.855,81.325],[0.231,163.047]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.613,-26.179],[109.673,-26.436],[108.958,134.166],[-109.328,134.416]],"c":true}]},{"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-140.214,-81.352],[0.567,-0.012],[0.105,162.637],[-140.676,81.297]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.294117647059,0,0.576470588235,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":-5,"s":[0,0.829,0.433,1,0.5,0.914,0.414,0.968,1,1,0.396,0.936]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[0,0.494,0,0.757,0.5,0.671,0.108,0.849,1,0.847,0.216,0.941]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":6,"s":[0,0.829,0.433,1,0.5,0.914,0.414,0.968,1,1,0.396,0.936]},{"t":28,"s":[0,0.494,0,0.757,0.5,0.671,0.108,0.849,1,0.847,0.216,0.941]}]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":-5,"s":[119.586,-56.314],"to":[-21.5,11.667],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[-9.414,13.686],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":6,"s":[119.586,-56.314],"to":[0,0],"ti":[21.5,-11.667]},{"t":28,"s":[-9.414,13.686]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":-5,"s":[6.461,156.253],"to":[-22,-12.5],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[-125.539,81.253],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":6,"s":[6.461,156.253],"to":[0,0],"ti":[22,12.5]},{"t":28,"s":[-125.539,81.253]}]},"t":1,"nm":"Gradient_20imbctHUK","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"2","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.787,-62.524],[-108.79,101.736],[-109.131,65.902],[-109.128,-99.425]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-93.298,-108.233],[-92.841,56.416],[-46.014,28.988],[-46.471,-135.661]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-46.448,-26.749],[-46.909,137.9],[-94.176,110.472],[-93.715,-54.177]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.787,-62.524],[-108.79,101.736],[-109.131,65.902],[-109.128,-99.425]],"c":true}]},{"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-93.298,-108.233],[-92.841,56.416],[-46.014,28.988],[-46.471,-135.661]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.564705882353,0.423529411765,0.505882352941,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,0.851,0.851,0.851,1,0.702,0.702,0.702]}},"s":{"a":0,"k":[-70,107]},"e":{"a":0,"k":[-70.5,-42]},"t":1,"nm":"Gradient_Wz8IloAOir","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.446,-26],[-108.45,134.59],[-109.471,27.822],[-109.468,-135.949]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-140,-81.085],[-139.543,81.563],[0.688,-0.159],[0.231,-162.808]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.692,0.398],[0.231,163.047],[-141.317,81.324],[-140.855,-81.325]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-108.446,-26],[-108.45,134.59],[-109.471,27.822],[-109.468,-135.949]],"c":true}]},{"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-140,-81.085],[-139.543,81.563],[0.688,-0.159],[0.231,-162.808]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.293886311849,0,0.576470588235,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.847,0.216,0.941,0.5,0.67,0.108,0.849,1,0.493,0,0.757]}},"s":{"a":0,"k":[-123,86]},"e":{"a":0,"k":[-31,12]},"t":1,"nm":"Gradient_MSZnh6e9dI","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"1","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[109.669,-62.918],[109.669,98.74],[109.627,62.906],[109.627,-99.819]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[47.24,-27.096],[47.7,135.552],[94.913,108.124],[94.453,-54.524]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[94.638,-108.471],[94.177,54.177],[46.91,26.749],[47.371,-135.899]],"c":true}]},{"i":{"x":0.833,"y":0.792},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[109.669,-62.918],[109.669,98.74],[109.627,62.906],[109.627,-99.819]],"c":true}]},{"t":20,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[60.679,-37.433],[60.997,-37.373],[98.037,-66.61],[97.719,-66.9]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.674509803922,0.541176470588,0.619607843137,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,0.851,0.851,0.851,1,0.702,0.702,0.702]}},"s":{"a":0,"k":[-70,107]},"e":{"a":0,"k":[-70.5,-42]},"t":1,"nm":"Gradient_CWYj9Fyz7a","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[109.711,-26.394],[109.71,134.207],[109.585,27.439],[109.586,-136.343]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.153,0.051],[0.614,162.7],[142,80.977],[141.539,-81.672]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[141.778,-81.324],[141.317,81.325],[-0.231,-0.398],[0.231,-163.047]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[109.711,-26.394],[109.71,134.207],[109.585,27.439],[109.586,-136.343]],"c":true}]},{"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.153,0.051],[0.614,162.7],[142,80.977],[141.539,-81.672]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.57647061348,0,0.40000000596,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":4},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.827,0.431,1,0.5,0.914,0.414,0.969,1,1,0.396,0.937]}},"s":{"a":0,"k":[119.586,-56.314]},"e":{"a":0,"k":[6.461,156.253]},"t":1,"nm":"Gradient_1MLs5ujq8t","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[0,-1.541]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":40,"st":-10,"bm":0}]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/star_reaction_effect5.json b/TMessagesProj/src/main/res/raw/star_reaction_effect5.json new file mode 100644 index 00000000000..a7933bddcbc --- /dev/null +++ b/TMessagesProj/src/main/res/raw/star_reaction_effect5.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":0,"op":90,"w":512,"h":512,"nm":"Реакция MINI","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Null 1141","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":0,"k":-8.595},"p":{"a":0,"k":[249.5,99.5,0]}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Слой 187","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.601]},"o":{"x":[0.333],"y":[0]},"t":66,"s":[-285.243]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[-0.227]},"t":72.133,"s":[-358.383]},{"t":88.080078125,"s":[-23.479]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.72},"o":{"x":0.185,"y":0.498},"t":66,"s":[-8.437,20.891,0],"to":[35.165,-9.262,0],"ti":[-48.957,-57.45,0]},{"t":88.080078125,"s":[131.659,73.628,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":76,"s":[-135.047,151.667,100]},{"t":88.080078125,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.141176470588,0.866666726505,0.431372578939,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.976470648074,0.666666666667,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":66,"op":88,"st":-88,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Слой 186","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[-23.479]},{"t":87.611328125,"s":[-285.243]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.361},"o":{"x":0.163,"y":1},"t":64,"s":[3.961,4.443,0],"to":[3.848,1.05,0],"ti":[-16.722,-44.02,0]},{"t":89,"s":[39.696,62.568,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[-40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75.109,"s":[-116.079,124.154,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470648074,0.431372578939,0.803321748621,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":89,"st":-90,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Слой 185","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[-233.751]},{"t":87,"s":[-23.479]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.67},"o":{"x":0.185,"y":0.586},"t":64,"s":[-35.198,26.98,0],"to":[-22.156,-21.253,0],"ti":[27.56,-50.408,0]},{"t":87,"s":[-180.837,77.98,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[-75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[81.669,217.306,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[-170.253,179.285,100]},{"t":87,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.658823469573,0.715017341165,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":87,"st":-90,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Слой 190","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.5]},"o":{"x":[0.167],"y":[0]},"t":66,"s":[-63.897]},{"t":89,"s":[-273.879]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.408},"o":{"x":0.176,"y":1},"t":66,"s":[268.09,152.609,0],"to":[14.416,5.797,0],"ti":[-6.363,-21.439,0]},{"t":89,"s":[340.317,208.343,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":74,"s":[103.071,256.946,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":81,"s":[-166.309,219.738,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":66,"op":89,"st":-88,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Слой 184","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[-23.479]},{"t":87,"s":[-233.751]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.643},"o":{"x":0.185,"y":0.635},"t":64,"s":[-18.737,-25.983,0],"to":[-41.271,-18.579,0],"ti":[24.897,-19.942,0]},{"t":87,"s":[-166.443,-4.078,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[-75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[103.071,256.946,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[-166.309,219.738,100]},{"t":87,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":87,"st":-90,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Слой 183","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[-23.479]},{"t":86,"s":[-233.751]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.435},"o":{"x":0.184,"y":1},"t":64,"s":[5.494,10.102,0],"to":[-22.156,-21.253,0],"ti":[25.633,-37.765,0]},{"t":86,"s":[-76.329,28.048,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[-75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[90.635,225.946,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79,"s":[-159.497,210.738,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.976470648074,0.666666666667,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":86,"st":-90,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Blesk 34","parent":1,"sr":1,"ks":{"r":{"a":0,"k":44.816},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[27.52,-75.842,0],"to":[-11.873,11.599,0],"ti":[-2.556,-22.491,0]},{"t":84.560546875,"s":[7.56,-12.375,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":68,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":77.199,"s":[-156.328,156.328,100]},{"t":84.560546875,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":68,"op":85,"st":67,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"manetka 40","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.816],"y":[1]},"o":{"x":[0.723],"y":[0.052]},"t":64,"s":[-234.608]},{"t":87,"s":[-23.479]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.478},"o":{"x":0.185,"y":0.381},"t":64,"s":[8.008,19.334,0],"to":[-46.431,-0.545,0],"ti":[28.332,-26.579,0]},{"t":87,"s":[-105.676,111.2,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[-104.075,104.075,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[-104.263,113.738,100]},{"t":87,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 200","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 201","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":87,"st":-93,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"manetka 41","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.816],"y":[1]},"o":{"x":[0.723],"y":[0.052]},"t":67.84,"s":[-243.203]},{"t":89,"s":[-32.074]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.191},"o":{"x":0.185,"y":0.591},"t":67.84,"s":[260.957,90.96,0],"to":[7.779,-21.861,0],"ti":[-41.481,5.814,0]},{"t":89,"s":[320.82,22.227,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82.561,"s":[-104.075,104.075,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 202","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 203","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":67,"op":90,"st":-93,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"manetka 39","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.277],"y":[0.948]},"o":{"x":[0.184],"y":[0]},"t":64,"s":[-23.479]},{"t":85.16015625,"s":[-234.608]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.417},"o":{"x":0.185,"y":0.426},"t":64,"s":[-31.073,7.905,0],"to":[-32.433,-41.17,0],"ti":[38.045,-20.733,0]},{"t":85.16015625,"s":[-151.672,-18.143,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78.721,"s":[-104.075,104.075,100]},{"t":85.16015625,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 204","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 205","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":86,"st":-93,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"zvezda 10","parent":1,"sr":1,"ks":{"r":{"a":0,"k":-9.109},"p":{"a":0,"k":[-4.634,7.873,0]},"a":{"a":0,"k":[9.5,6.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.175,0.175,0.175],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[-46.023,46.023,100]},{"t":81.478515625,"s":[-89.73,89.73,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[9.432,10.291],[0,0],[15.903,-5.645],[0,0],[-0.699,-14.617],[0,0],[-17.316,-4.781],[0,0],[-9.92,16.028],[0,0]],"o":[[-9.432,-10.291],[0,0],[-15.903,5.645],[0,0],[0.699,14.617],[0,0],[17.316,4.781],[0,0],[9.92,-16.028],[0,0]],"v":[[92.766,-69.972],[23.627,-60.306],[-31.787,-101.428],[-45.395,-32.672],[-97.782,9.095],[-42.509,42.123],[-22.912,101.428],[31.421,58.048],[97.782,58.896],[72.37,-5.445]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.743990789675,0.298039185767,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.175],"y":[1]},"o":{"x":[0.31],"y":[0.163]},"t":64,"s":[34]},{"t":81.478515625,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":82,"st":-61,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"manetka 38","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1.273]},"o":{"x":[0.524],"y":[0]},"t":64,"s":[-158.322]},{"t":81.478515625,"s":[-23.479]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.788},"o":{"x":0.185,"y":0.377},"t":64,"s":[18.956,-9.172,0],"to":[13.479,-19.023,0],"ti":[-41.77,-63.218,0]},{"t":81.478515625,"s":[164.744,25.714,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71.668,"s":[-177.421,177.421,100]},{"t":81.478515625,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-9.346,-8.502],[-3.084,3.39],[9.346,8.502],[3.084,-3.39]],"o":[[9.346,8.502],[3.084,-3.39],[-9.346,-8.502],[-3.084,3.39]],"v":[[-6.07,6.672],[16.436,15.929],[5.099,-5.605],[-17.408,-14.861]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.888,0.349,1,1,0.776,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 206","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.085,-3.391],[0,0],[9.347,8.503],[3.085,-3.391],[0,0],[-9.347,-8.504]],"o":[[0,0],[3.085,-3.391],[-9.347,-8.503],[0,0],[3.085,-3.391],[9.347,8.504]],"v":[[14.461,18.174],[18.687,13.528],[7.35,-8.005],[-15.157,-17.262],[-19.383,-12.616],[3.124,-3.36]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 207","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":83,"st":-91,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Слой 182","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":66,"s":[-285.243]},{"t":89,"s":[-23.479]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.602},"o":{"x":0.185,"y":0.707},"t":66,"s":[18.183,11.584,0],"to":[18.139,-35.83,0],"ti":[20.574,14.991,0]},{"t":89,"s":[-23.966,-82.889,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":76.223,"s":[-241.952,287.197,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.828973388672,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":66,"op":89,"st":-88,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Слой 181","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1.202]},"o":{"x":[0.333],"y":[0]},"t":66,"s":[-285.243]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[-5.972]},"t":75.199,"s":[-36.102]},{"t":89,"s":[-23.479]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.175},"o":{"x":0.126,"y":1},"t":66,"s":[8.144,12.051,0],"to":[1.76,-13.571,0],"ti":[-6.919,-12.147,0]},{"t":89,"s":[54.103,2.753,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":66,"s":[-40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":76.119,"s":[-171.277,171.73,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.495501768823,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":66,"op":89,"st":-88,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"Blesk 33","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[-183.858]},{"t":80.560546875,"s":[-36.42]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[-9.17,39.652,0],"to":[6.533,-4.583,0],"ti":[-6.533,4.583,0]},{"t":80.560546875,"s":[30.03,12.151,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":71.359,"s":[-159.443,159.443,100]},{"t":80.560546875,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-10.988,-1.594],[6.981,-49.743],[10.988,1.594],[-6.981,49.743]],"o":[[-11.089,-0.57],[2.811,-50.152],[11.089,0.57],[-2.811,50.152]],"v":[[46.414,4.55],[-5.508,56.191],[-46.414,-4.55],[5.508,-56.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":56},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":81,"st":48,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Zvezda svet 10","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75.961,"s":[100]},{"t":81.478515625,"s":[0]}]},"r":{"a":0,"k":-46.126},"p":{"a":0,"k":[-2.764,15.51,0]},"a":{"a":0,"k":[32.5,-42.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[0.79,0.79,0.112]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[-22.119,22.119,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":75.961,"s":[-52.788,52.788,100]},{"t":81.478515625,"s":[-55.255,55.255,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.819},"o":{"x":0.333,"y":0},"t":64,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[209.496,84.242]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.181},"t":75.961,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[209.496,84.242]],"c":true}]},{"t":81.478515625,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[294.799,-18.428]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.612,0,0.5,1,0.659,0,1,1,0.706,0,0,1,0.5,0.5,1,0]}},"s":{"a":0,"k":[37.61,-34.052]},"e":{"a":0,"k":[207.569,-21.988]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 208","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":82,"st":-61,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"Слой 159","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1.399]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[276.867]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0.227]},"t":70.943,"s":[350.007]},{"t":89,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.72},"o":{"x":0.185,"y":0.498},"t":64,"s":[10.547,20.574,0],"to":[-36.139,-4.041,0],"ti":[40.066,-63.969,0]},{"t":89,"s":[-120.373,93.157,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75.109,"s":[169.773,190.667,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470648074,0.893102728152,0.431372578939,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":90,"st":-90,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"Слой 157","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[15.103]},{"t":86,"s":[276.867]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.361},"o":{"x":0.163,"y":1},"t":64,"s":[-4.115,6.107,0],"to":[-3.654,1.599,0],"ti":[10.131,-45.986,0]},{"t":86,"s":[-31.002,68.819,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73.775,"s":[211.915,226.656,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.559630928788,0.976470648074,0.431372578939,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":86,"st":-90,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"Слой 156","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[225.375]},{"t":89,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.554},"o":{"x":0.185,"y":0.793},"t":64,"s":[37.909,22.7,0],"to":[18.824,-24.254,0],"ti":[-10.846,-84.473,0]},{"t":89,"s":[108.15,81.972,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72.334,"s":[-81.669,217.306,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80.666,"s":[170.253,179.285,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.658823469573,0.715017341165,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":89,"st":-90,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"Слой 155","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[15.103]},{"t":83,"s":[225.375]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.459},"o":{"x":0.185,"y":0.963},"t":64,"s":[13.909,-27.3,0],"to":[18.824,-24.254,0],"ti":[-27.536,-16.102,0]},{"t":83,"s":[107.169,-42.971,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70,"s":[-103.071,256.946,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":77,"s":[176.148,232.738,100]},{"t":83,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":83,"st":-90,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"Слой 154","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[15.103]},{"t":88,"s":[225.375]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.435},"o":{"x":0.184,"y":1},"t":64,"s":[-4.807,11.929,0],"to":[18.824,-24.254,0],"ti":[-30.86,-33.628,0]},{"t":88,"s":[78.757,17.765,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72.002,"s":[-103.071,256.946,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":79.998,"s":[198.096,261.738,100]},{"t":88,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.976470648074,0.666666666667,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":88,"st":-90,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"Blesk 25","parent":159,"sr":1,"ks":{"r":{"a":0,"k":-53.192},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[-39.118,-69.889,0],"to":[13.436,9.746,0],"ti":[-0.748,-22.623,0]},{"t":77.6796875,"s":[-10.126,-10.007,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":71.6,"s":[156.328,156.328,100]},{"t":77.6796875,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":78,"st":63,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"manetka 28","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.816],"y":[1]},"o":{"x":[0.723],"y":[-0.052]},"t":64,"s":[226.232]},{"t":89,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.477},"o":{"x":0.185,"y":0.382},"t":64,"s":[-5.95,21.429,0],"to":[45.856,-7.303,0],"ti":[-31.902,-22.168,0]},{"t":89,"s":[136.679,58.224,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[104.075,104.075,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[126.075,126.075,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 209","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 210","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":90,"st":-93,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"manetka 27","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.277],"y":[1.072]},"o":{"x":[0.184],"y":[0]},"t":64,"s":[15.103]},{"t":88,"s":[226.232]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.372},"o":{"x":0.185,"y":0.458},"t":64,"s":[31.05,4.429,0],"to":[-18.509,-57.983,0],"ti":[-31.449,8.357,0]},{"t":88,"s":[118.313,-128.088,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82.68,"s":[104.075,104.075,100]},{"t":88,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 211","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 212","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":88,"st":-93,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"zvezda 6","parent":159,"sr":1,"ks":{"r":{"a":0,"k":0.733},"p":{"a":0,"k":[4.887,8.249,0]},"a":{"a":0,"k":[9.5,6.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.175,0.175,0.175],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[46.023,46.023,100]},{"t":78.439453125,"s":[89.73,89.73,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[9.432,10.291],[0,0],[15.903,-5.645],[0,0],[-0.699,-14.617],[0,0],[-17.316,-4.781],[0,0],[-9.92,16.028],[0,0]],"o":[[-9.432,-10.291],[0,0],[-15.903,5.645],[0,0],[0.699,14.617],[0,0],[17.316,4.781],[0,0],[9.92,-16.028],[0,0]],"v":[[92.766,-69.972],[23.627,-60.306],[-31.787,-101.428],[-45.395,-32.672],[-97.782,9.095],[-42.509,42.123],[-22.912,101.428],[31.421,58.048],[97.782,58.896],[72.37,-5.445]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0,0.823529531441,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.175],"y":[1]},"o":{"x":[0.31],"y":[0.163]},"t":64,"s":[34]},{"t":78.439453125,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":78,"st":-61,"bm":0},{"ddd":0,"ind":27,"ty":4,"nm":"manetka 24","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.727]},"o":{"x":[0.524],"y":[0]},"t":64,"s":[149.946]},{"t":78.439453125,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.741},"o":{"x":0.185,"y":0.461},"t":64,"s":[-20.934,-5.178,0],"to":[-36.968,-0.645,0],"ti":[14.998,-42.494,0]},{"t":78.439453125,"s":[-118.811,77.898,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70.334,"s":[177.421,177.421,100]},{"t":78.439453125,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-9.346,-8.502],[-3.084,3.39],[9.346,8.502],[3.084,-3.39]],"o":[[9.346,8.502],[3.084,-3.39],[-9.346,-8.502],[-3.084,3.39]],"v":[[-6.07,6.672],[16.436,15.929],[5.099,-5.605],[-17.408,-14.861]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.888,0.349,1,1,0.776,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 213","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.085,-3.391],[0,0],[9.347,8.503],[3.085,-3.391],[0,0],[-9.347,-8.504]],"o":[[0,0],[3.085,-3.391],[-9.347,-8.503],[0,0],[3.085,-3.391],[9.347,8.504]],"v":[[14.461,18.174],[18.687,13.528],[7.35,-8.005],[-15.157,-17.262],[-19.383,-12.616],[3.124,-3.36]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 214","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":79,"st":-91,"bm":0},{"ddd":0,"ind":28,"ty":4,"nm":"Слой 153","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[276.867]},{"t":88,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.602},"o":{"x":0.185,"y":0.707},"t":64,"s":[-17.145,15.244,0],"to":[-23.165,-32.805,0],"ti":[-18.171,17.829,0]},{"t":88,"s":[10.792,-84.361,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[202.356,240.197,100]},{"t":88,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.828973388672,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":88,"st":-90,"bm":0},{"ddd":0,"ind":29,"ty":4,"nm":"Слой 152","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.798]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[276.867]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[5.973]},"t":72.799,"s":[27.726]},{"t":86,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.175},"o":{"x":0.126,"y":1},"t":64,"s":[-7.145,14.244,0],"to":[-3.718,-13.17,0],"ti":[5.076,-13.025,0]},{"t":86,"s":[-53.969,11.74,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":74.422,"s":[171.277,171.73,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.495501768823,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":86,"st":-90,"bm":0},{"ddd":0,"ind":30,"ty":4,"nm":"Blesk 24","parent":159,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[175.482]},{"t":77.6796875,"s":[28.044]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[14.005,39.028,0],"to":[-7.131,-3.583,0],"ti":[7.131,3.583,0]},{"t":77.6796875,"s":[-28.783,17.531,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":70.08,"s":[159.443,159.443,100]},{"t":77.6796875,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-10.988,-1.594],[6.981,-49.743],[10.988,1.594],[-6.981,49.743]],"o":[[-11.089,-0.57],[2.811,-50.152],[11.089,0.57],[-2.811,50.152]],"v":[[46.414,4.55],[-5.508,56.191],[-46.414,-4.55],[5.508,-56.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":56},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":78,"st":48,"bm":0},{"ddd":0,"ind":31,"ty":4,"nm":"Zvezda svet 6","parent":159,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73.881,"s":[100]},{"t":78.439453125,"s":[0]}]},"r":{"a":0,"k":37.75},"p":{"a":0,"k":[4.15,16.077,0]},"a":{"a":0,"k":[32.5,-42.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[0.79,0.79,0.112]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[22.119,22.119,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":73.881,"s":[52.788,52.788,100]},{"t":78.439453125,"s":[55.255,55.255,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.781},"o":{"x":0.333,"y":0},"t":64,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[209.496,84.242]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.219},"t":73.881,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[209.496,84.242]],"c":true}]},{"t":78.439453125,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[294.799,-18.428]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0,0.965,0.5,1,0,0.918,1,1,0,0.871,0,1,0.5,0.5,1,0]}},"s":{"a":0,"k":[37.61,-34.052]},"e":{"a":0,"k":[207.569,-21.988]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 215","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":79,"st":-61,"bm":0},{"ddd":0,"ind":32,"ty":3,"nm":"Null 1138","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":0,"k":104.787},"p":{"a":0,"k":[406,230,0]},"s":{"a":0,"k":[136.571,136.571,100]}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":33,"ty":4,"nm":"konfeti","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1.399]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[276.867]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0.227]},"t":69.387,"s":[350.007]},{"t":86,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.622},"o":{"x":0.185,"y":0.672},"t":63,"s":[5.547,13.574,0],"to":[-36.139,-4.041,0],"ti":[44.227,8.41,0]},{"t":86,"s":[-107.771,-15.741,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[150.184,168.667,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.141176470588,0.866666726505,0.431372578939,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.976470648074,0.666666666667,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":86,"st":-94,"bm":0},{"ddd":0,"ind":34,"ty":4,"nm":"konfeti","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[15.103]},{"t":84.720703125,"s":[276.867]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.554},"o":{"x":0.185,"y":0.794},"t":63,"s":[-9.115,-0.893,0],"to":[-3.654,1.599,0],"ti":[10.131,-45.986,0]},{"t":86,"s":[-50.219,88.5,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[153.012,163.656,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.966551298254,0.4313725191,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":86,"st":-94,"bm":0},{"ddd":0,"ind":35,"ty":4,"nm":"konfeti","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[225.375]},{"t":86,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.804,"y":0},"o":{"x":0.081,"y":1},"t":63,"s":[32.909,15.7,0],"to":[18.824,-24.254,0],"ti":[-6.293,3.338,0]},{"t":86,"s":[63.964,-13.264,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[-59.119,157.306,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[149.362,157.285,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.658823469573,0.715017341165,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":86,"st":-94,"bm":0},{"ddd":0,"ind":36,"ty":4,"nm":"konfeti","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[15.103]},{"t":87,"s":[225.375]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.339},"o":{"x":0.158,"y":1},"t":63,"s":[8.909,-34.3,0],"to":[18.824,-24.254,0],"ti":[-26.03,3.947,0]},{"t":87,"s":[78.745,-75.594,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71.002,"s":[-78.602,195.932,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78.998,"s":[149.646,197.722,100]},{"t":87,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.51764681947,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":87,"st":-94,"bm":0},{"ddd":0,"ind":37,"ty":4,"nm":"konfeti","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[15.103]},{"t":89,"s":[225.375]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.354},"o":{"x":0.161,"y":1},"t":63,"s":[-9.807,4.929,0],"to":[18.824,-24.254,0],"ti":[-22.598,0.541,0]},{"t":89,"s":[53.624,-48.291,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[-72.985,181.946,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[126.196,166.738,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470648074,0.431372578939,0.905928488339,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":89,"st":-94,"bm":0},{"ddd":0,"ind":38,"ty":4,"nm":"manetka 31","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.771],"y":[1]},"o":{"x":[0.635],"y":[0.2]},"t":63,"s":[360.721]},{"t":85.115234375,"s":[-0.897]}]},"p":{"a":1,"k":[{"i":{"x":0.785,"y":0},"o":{"x":0.185,"y":0.852},"t":63,"s":[-1.91,-0.576,0],"to":[-10.521,14.761,0],"ti":[-20.808,-8.477,0]},{"t":86,"s":[47.295,35.709,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[104.075,104.075,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70.076,"s":[86.383,86.383,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 216","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 217","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":86,"st":-97,"bm":0},{"ddd":0,"ind":39,"ty":4,"nm":"manetka 30","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.277],"y":[1.057]},"o":{"x":[0.184],"y":[0]},"t":63,"s":[15.103]},{"t":85.115234375,"s":[226.232]}]},"p":{"a":1,"k":[{"i":{"x":0.846,"y":0},"o":{"x":0.156,"y":1},"t":63,"s":[18.33,-30.146,0],"to":[-9.12,-2.195,0],"ti":[-41.387,18.989,0]},{"t":85.115234375,"s":[19.543,-58.939,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[53.078,53.078,100]},{"t":85.115234375,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 218","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 219","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":86,"st":-97,"bm":0},{"ddd":0,"ind":40,"ty":4,"nm":"manetka 29","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.727]},"o":{"x":[0.524],"y":[0]},"t":63,"s":[149.946]},{"t":79.80859375,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.65},"o":{"x":0.185,"y":0.622},"t":63,"s":[-17.908,-12.633,0],"to":[-29.398,10.994,0],"ti":[13.489,-37.801,0]},{"t":79.80859375,"s":[-101.012,34.738,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":70.076,"s":[96.975,96.975,100]},{"t":79.80859375,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-9.346,-8.502],[-3.084,3.39],[9.346,8.502],[3.084,-3.39]],"o":[[9.346,8.502],[3.084,-3.39],[-9.346,-8.502],[-3.084,3.39]],"v":[[-6.07,6.672],[16.436,15.929],[5.099,-5.605],[-17.408,-14.861]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.888,0.349,1,1,0.776,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 220","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.085,-3.391],[0,0],[9.347,8.503],[3.085,-3.391],[0,0],[-9.347,-8.504]],"o":[[0,0],[3.085,-3.391],[-9.347,-8.503],[0,0],[3.085,-3.391],[9.347,8.504]],"v":[[14.461,18.174],[18.687,13.528],[7.35,-8.005],[-15.157,-17.262],[-19.383,-12.616],[3.124,-3.36]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 221","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":79,"st":-95,"bm":0},{"ddd":0,"ind":41,"ty":4,"nm":"Слой 161","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[276.867]},{"t":86,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.416},"o":{"x":0.179,"y":1},"t":63,"s":[-22.145,8.244,0],"to":[-23.165,-32.805,0],"ti":[-18.171,17.829,0]},{"t":86,"s":[-18.893,-58.757,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[99.867,99.867,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.828973388672,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":86,"st":-94,"bm":0},{"ddd":0,"ind":42,"ty":4,"nm":"Слой 160","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.798]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[276.867]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[5.972]},"t":72.201,"s":[27.726]},{"t":86,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.513},"o":{"x":0.185,"y":0.867},"t":63,"s":[2.017,-0.202,0],"to":[-7.378,21.259,0],"ti":[-40.229,1.727,0]},{"t":86,"s":[62.685,50.983,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":63,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[114.428,114.73,100]},{"t":86,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.495501768823,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":86,"st":-94,"bm":0},{"ddd":0,"ind":43,"ty":4,"nm":"Blesk 27","parent":32,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[175.482]},{"t":78.923828125,"s":[28.044]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":63,"s":[-12.951,13.043,0],"to":[0.169,-1.015,0],"ti":[-0.169,1.015,0]},{"t":78.923828125,"s":[-11.938,6.954,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":63,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":70,"s":[91.443,91.443,100]},{"t":78.923828125,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-10.988,-1.594],[6.981,-49.743],[10.988,1.594],[-6.981,49.743]],"o":[[-11.089,-0.57],[2.811,-50.152],[11.089,0.57],[-2.811,50.152]],"v":[[46.414,4.55],[-5.508,56.191],[-46.414,-4.55],[5.508,-56.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":56},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":63,"op":78,"st":44,"bm":0},{"ddd":0,"ind":44,"ty":4,"nm":"zvezda 7","parent":32,"sr":1,"ks":{"r":{"a":0,"k":0.733},"p":{"a":0,"k":[-0.113,1.249,0]},"a":{"a":0,"k":[9.5,6.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.175,0.175,0.175],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":63,"s":[46.023,46.023,100]},{"t":77,"s":[89.73,89.73,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[9.432,10.291],[0,0],[15.903,-5.645],[0,0],[-0.699,-14.617],[0,0],[-17.316,-4.781],[0,0],[-9.92,16.028],[0,0]],"o":[[-9.432,-10.291],[0,0],[-15.903,5.645],[0,0],[0.699,14.617],[0,0],[17.316,4.781],[0,0],[9.92,-16.028],[0,0]],"v":[[92.766,-69.972],[23.627,-60.306],[-31.787,-101.428],[-45.395,-32.672],[-97.782,9.095],[-42.509,42.123],[-22.912,101.428],[31.421,58.048],[97.782,58.896],[72.37,-5.445]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.560784313725,1,0.98449826708,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.175],"y":[1]},"o":{"x":[0.31],"y":[0.136]},"t":63,"s":[34]},{"t":77,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[67.599,67.599]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":63,"op":77,"st":-65,"bm":0},{"ddd":0,"ind":45,"ty":4,"nm":"Zvezda svet 7","parent":32,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":74.5,"s":[100]},{"t":79.80859375,"s":[0]}]},"r":{"a":0,"k":37.75},"p":{"a":0,"k":[-9.759,6.885,0]},"a":{"a":0,"k":[32.5,-42.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[0.629,0.629,0.151]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":63,"s":[22.119,22.119,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":74,"s":[38.677,38.677,100]},{"t":79.80859375,"s":[55.255,55.255,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.812},"o":{"x":0.333,"y":0},"t":63,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[209.496,84.242]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.188},"t":74,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[209.496,84.242]],"c":true}]},{"t":79.80859375,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[294.799,-18.428]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0,1,0.965,0.5,0,0.994,0.982,1,0,0.988,1,0,1,0.5,0.5,1,0]}},"s":{"a":0,"k":[37.61,-34.052]},"e":{"a":0,"k":[207.569,-21.988]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 222","hd":false},{"ty":"tr","p":{"a":0,"k":[-20.391,-40.798]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":63,"op":80,"st":-65,"bm":0},{"ddd":0,"ind":46,"ty":3,"nm":"Null 1139","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":0,"k":-23.123},"p":{"a":0,"k":[103,244,0]}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":47,"ty":4,"nm":"Слой 173","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1.399]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[304.601]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0.227]},"t":71.221,"s":[377.741]},{"t":90,"s":[42.837]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.622},"o":{"x":0.185,"y":0.672},"t":64,"s":[-2.408,18.596,0],"to":[-30.107,-20.395,0],"ti":[35.232,28.026,0]},{"t":90,"s":[-89.065,-60.086,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75.555,"s":[169.773,190.667,100]},{"t":90,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.141176470588,0.866666726505,0.431372578939,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.976470648074,0.666666666667,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":90,"st":-90,"bm":0},{"ddd":0,"ind":48,"ty":4,"nm":"manetka 34","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.771],"y":[1]},"o":{"x":[0.635],"y":[0.2]},"t":64,"s":[388.455]},{"t":89,"s":[26.837]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.327},"o":{"x":0.185,"y":0.491},"t":64,"s":[20.593,26.676,0],"to":[-15.317,-16.795,0],"ti":[39.053,-38.488,0]},{"t":90,"s":[-85.145,33.324,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[104.075,104.075,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[125.075,125.075,100]},{"t":90,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 223","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 224","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":90,"st":-93,"bm":0},{"ddd":0,"ind":49,"ty":4,"nm":"manetka 33","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.277],"y":[1.057]},"o":{"x":[0.184],"y":[0]},"t":64,"s":[42.837]},{"t":89,"s":[253.966]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.355},"o":{"x":0.185,"y":0.471},"t":64,"s":[22.886,36.409,0],"to":[34.223,5.898,0],"ti":[15.333,-39.291,0]},{"t":89,"s":[50.772,154.046,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":82,"s":[104.075,104.075,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 225","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 226","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":89,"st":-93,"bm":0},{"ddd":0,"ind":50,"ty":4,"nm":"konfeti","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[42.837]},{"t":88.5546875,"s":[304.601]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.554},"o":{"x":0.185,"y":0.794},"t":64,"s":[-8.653,-1.032,0],"to":[-3.978,-0.285,0],"ti":[30.367,-35.988,0]},{"t":90,"s":[-86.634,58.963,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75.555,"s":[211.915,226.656,100]},{"t":90,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470648074,0.431372578939,0.803321748621,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":90,"st":-90,"bm":0},{"ddd":0,"ind":51,"ty":4,"nm":"konfeti","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[253.109]},{"t":85,"s":[42.837]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.557},"o":{"x":0.185,"y":0.788},"t":64,"s":[20.822,33.211,0],"to":[27.949,-12.707,0],"ti":[1.711,-67.816,0]},{"t":85,"s":[85.41,115.361,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[-81.669,217.306,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[170.253,179.285,100]},{"t":85,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.658823469573,0.715017341165,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":85,"st":-90,"bm":0},{"ddd":0,"ind":52,"ty":4,"nm":"konfeti","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[42.837]},{"t":80,"s":[253.109]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.459},"o":{"x":0.185,"y":0.963},"t":64,"s":[22.848,-22.214,0],"to":[27.949,-12.707,0],"ti":[-16.879,-27.067,0]},{"t":80,"s":[112.686,7.316,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69.334,"s":[-103.071,256.946,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":74.666,"s":[198.096,261.738,100]},{"t":80,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":86,"st":-90,"bm":0},{"ddd":0,"ind":53,"ty":4,"nm":"konfeti","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[42.837]},{"t":79,"s":[253.109]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.435},"o":{"x":0.184,"y":1},"t":64,"s":[-11.974,3.799,0],"to":[27.949,-12.707,0],"ti":[-11.666,-44.126,0]},{"t":79,"s":[59.274,47.852,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[-103.071,256.946,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":74,"s":[198.096,261.738,100]},{"t":79,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.931580068551,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":85,"st":-90,"bm":0},{"ddd":0,"ind":54,"ty":4,"nm":"konfeti","parent":46,"sr":1,"ks":{"r":{"a":0,"k":-25.458},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[-4.268,-84.587,0],"to":[7.357,14.879,0],"ti":[9.866,-20.372,0]},{"t":89,"s":[-6.474,-18.092,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":77.889,"s":[156.328,156.328,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":89,"st":63,"bm":0},{"ddd":0,"ind":55,"ty":4,"nm":"manetka 32","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.727]},"o":{"x":[0.524],"y":[0]},"t":64,"s":[177.68]},{"t":83,"s":[42.837]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.585},"o":{"x":0.185,"y":0.739},"t":64,"s":[-23.152,-11.554,0],"to":[5.651,-23.369,0],"ti":[22.838,41.153,0]},{"t":83,"s":[-35.427,-92.196,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":73,"s":[120.421,120.421,100]},{"t":83,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-9.346,-8.502],[-3.084,3.39],[9.346,8.502],[3.084,-3.39]],"o":[[9.346,8.502],[3.084,-3.39],[-9.346,-8.502],[-3.084,3.39]],"v":[[-6.07,6.672],[16.436,15.929],[5.099,-5.605],[-17.408,-14.861]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.888,0.349,1,1,0.776,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 227","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.085,-3.391],[0,0],[9.347,8.503],[3.085,-3.391],[0,0],[-9.347,-8.504]],"o":[[0,0],[3.085,-3.391],[-9.347,-8.503],[0,0],[3.085,-3.391],[9.347,8.504]],"v":[[14.461,18.174],[18.687,13.528],[7.35,-8.005],[-15.157,-17.262],[-19.383,-12.616],[3.124,-3.36]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 228","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":83,"st":-91,"bm":0},{"ddd":0,"ind":56,"ty":4,"nm":"konfeti","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[304.601]},{"t":90,"s":[42.837]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.683},"o":{"x":0.185,"y":0.564},"t":64,"s":[-24.437,0.991,0],"to":[-5.237,-39.817,0],"ti":[-24.38,7.324,0]},{"t":90,"s":[54.143,-106.669,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75.557,"s":[241.952,287.197,100]},{"t":90,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.828973388672,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":90,"st":-90,"bm":0},{"ddd":0,"ind":57,"ty":4,"nm":"konfeti","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.798]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[304.601]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[5.972]},"t":74.4,"s":[55.46]},{"t":90,"s":[42.837]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.627},"o":{"x":0.185,"y":0.664},"t":64,"s":[0.879,4.76,0],"to":[29.338,2.613,0],"ti":[-3.445,-39.667,0]},{"t":90,"s":[63.1,97.753,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75.439,"s":[171.277,171.73,100]},{"t":90,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.495501768823,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":90,"st":-90,"bm":0},{"ddd":0,"ind":58,"ty":4,"nm":"Blesk 29","parent":46,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[203.216]},{"t":82,"s":[55.778]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[-30.935,76.539,0],"to":[2.689,-11.99,0],"ti":[-2.689,11.99,0]},{"t":82,"s":[-14.803,4.6,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":72,"s":[159.443,159.443,100]},{"t":82,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-10.988,-1.594],[6.981,-49.743],[10.988,1.594],[-6.981,49.743]],"o":[[-11.089,-0.57],[2.811,-50.152],[11.089,0.57],[-2.811,50.152]],"v":[[46.414,4.55],[-5.508,56.191],[-46.414,-4.55],[5.508,-56.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":56},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":82,"st":48,"bm":0},{"ddd":0,"ind":59,"ty":4,"nm":"zvezda 8","parent":46,"sr":1,"ks":{"r":{"a":0,"k":28.467},"p":{"a":0,"k":[-1.681,5.053,0]},"a":{"a":0,"k":[9.5,6.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.175,0.175,0.175],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[46.023,46.023,100]},{"t":83,"s":[89.73,89.73,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[9.432,10.291],[0,0],[15.903,-5.645],[0,0],[-0.699,-14.617],[0,0],[-17.316,-4.781],[0,0],[-9.92,16.028],[0,0]],"o":[[-9.432,-10.291],[0,0],[-15.903,5.645],[0,0],[0.699,14.617],[0,0],[17.316,4.781],[0,0],[9.92,-16.028],[0,0]],"v":[[92.766,-69.972],[23.627,-60.306],[-31.787,-101.428],[-45.395,-32.672],[-97.782,9.095],[-42.509,42.123],[-22.912,101.428],[31.421,58.048],[97.782,58.896],[72.37,-5.445]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,1,0.564705882353,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.175],"y":[1]},"o":{"x":[0.31],"y":[0.163]},"t":64,"s":[34]},{"t":83,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":83,"st":-61,"bm":0},{"ddd":0,"ind":60,"ty":4,"nm":"Zvezda svet 8","parent":46,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[100]},{"t":83,"s":[0]}]},"r":{"a":0,"k":65.484},"p":{"a":0,"k":[-5.977,11.639,0]},"a":{"a":0,"k":[32.5,-42.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[0.79,0.79,0.112]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[22.119,22.119,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":77,"s":[52.788,52.788,100]},{"t":83,"s":[55.255,55.255,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":64,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[209.496,84.242]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[209.496,84.242]],"c":true}]},{"t":83,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[294.799,-18.428]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0,1,0.706,0.5,0,1,0.659,1,0,1,0.612,0,1,0.5,0.5,1,0]}},"s":{"a":0,"k":[37.61,-34.052]},"e":{"a":0,"k":[207.569,-21.988]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 229","hd":false},{"ty":"tr","p":{"a":0,"k":[-20.391,-40.798]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":89,"st":-61,"bm":0},{"ddd":0,"ind":61,"ty":4,"nm":"ZVEZDA 14","parent":62,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[79.997]},{"t":46,"s":[123.151]}]},"p":{"a":0,"k":[-5.578,204.735,0]},"a":{"a":0,"k":[159.035,247.474,0]},"s":{"a":0,"k":[-100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.496,1.001],[0.851,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[2.536,1.328],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[-6.828,4.374],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-23.297,-38.098],[-13.264,-34.39],[-5.37,-33.359],[6.895,-32.03],[27.167,-31.071],[37.235,-30.065],[74.802,-26.048],[84.923,-18.579],[78.814,-10.274],[49.004,22.98],[44.69,25.004],[31.794,31.897],[22.3,39.386],[16.244,42.472],[7.153,53.903],[5.004,52.703],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-71.861,-19.71],[-73.324,-36.902],[-64.299,-40.186],[-29.803,-37.024]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-31.265,-39.964],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[33.761,-42.739],[41.528,-37.112],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[59.679,28.115],[58.039,32.778],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.629,71.671],[4.48,70.472],[-3.001,70.325],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-53.78,50.738],[-38.571,29.576],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-47.904,13.215],[-67.218,7.67],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-37.052,-35.884]],"c":true}]},{"t":63,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-26.042,-33.03],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[27.96,-33.999],[35.727,-28.372],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[49.004,22.98],[47.364,27.642],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.728,62.319],[4.579,61.12],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-31.829,-28.951]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411824544,0.509803921569,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"path-3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152.417,251.468]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.626,-0.89],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.589,-1.651]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-3.6,7.583],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[67.906,16.382],[72.98,14.81],[74.552,19.884],[20.684,12.393],[7.153,13.723],[-31.004,10.16],[-35.227,6.937],[-32.004,2.715],[6.153,6.277],[14.038,8.892]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.938,-2.863],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.843,3.379]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-5.192,6.423],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[32.94,-29.073],[38.014,-30.645],[39.586,-25.571],[15.462,5.46],[-0.092,16.634],[-34.251,28.693],[-38.474,25.47],[-35.251,21.248],[-1.092,9.189],[8.815,1.958]],"c":true}]},{"t":63,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.626,-0.89],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.304,5.327]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-3.6,7.583],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[32.94,-29.073],[38.014,-30.645],[39.586,-25.571],[20.684,12.393],[5.131,23.568],[-34.251,28.693],[-38.474,25.47],[-35.251,21.248],[4.131,16.122],[14.038,8.892]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,1,1,1,1,1,1]}},"s":{"a":0,"k":[-38464.41,8209.829]},"e":{"a":0,"k":[139.409,46.805]},"t":1,"nm":"Gradient Fill 230","hd":false},{"ty":"tr","p":{"a":0,"k":[116.591,209.195]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[6.126,0.871],[4.723,0.291],[8.562,2.243],[7.789,0.886],[6.577,2.19],[3.256,-0.255],[11.429,-1.234],[-4.137,-8.666],[-2.265,-3.132]],"o":[[10.354,-1.081],[19.114,-5.218],[-6.065,-0.767],[-2.385,-0.339],[-11.668,-0.718],[-7.106,-1.861],[-13.133,-1.493],[-1.881,-0.626],[-7.646,0.599],[-7.776,0.839],[4.05,8.484],[3.108,4.297]],"v":[[-47.931,39.762],[-10.146,32.923],[53.343,2.68],[29.16,-0.287],[20.317,-2.776],[0.428,-3.862],[-12.304,-5.288],[-30.061,-10.225],[-36.282,-8.678],[-71.238,-12.047],[-78.565,8.327],[-67.28,34.212]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[5.476,1.955],[2.542,3.137],[9.482,11.983],[4.713,-6.264],[5.609,-7.304],[3.053,-1.16],[10.985,-3.924],[-4.775,-8.331],[-4.196,-3.323]],"o":[[10.354,-1.081],[19.114,-5.218],[-7.349,-1.852],[-2.269,-0.81],[-6.613,-8.163],[-4.558,-5.76],[-12.706,16.888],[-1.208,1.573],[-7.992,3.036],[-7.365,2.631],[4.548,7.934],[4.158,3.292]],"v":[[-54.481,41.273],[-10.146,32.923],[55.718,-0.802],[34.961,-9.026],[27.134,-14.667],[3.359,-43.56],[-13.016,-43.897],[-37.806,-12.314],[-43.62,-7.803],[-77.159,3.848],[-82.18,21.814],[-73.83,35.723]],"c":true}]},{"t":63,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[6.126,0.871],[1.659,3.681],[5.632,12.473],[3.521,-7.004],[4.842,-9.197],[3.256,-0.255],[11.429,-1.234],[-7.512,-5.982],[-4.196,-3.323]],"o":[[10.354,-1.081],[19.114,-5.218],[-6.065,-0.767],[-2.385,-0.339],[-4.803,-10.658],[-3.023,-6.695],[-12.952,25.77],[-0.924,1.754],[-7.646,0.599],[-7.776,0.839],[8.638,6.879],[4.158,3.292]],"v":[[-47.931,39.762],[-10.146,32.923],[53.343,2.68],[29.16,-0.287],[21.333,-5.927],[3.359,-43.56],[-13.016,-43.897],[-32.584,-5.38],[-38.398,-0.869],[-77.159,3.848],[-82.18,21.814],[-67.28,34.212]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.937254905701,0.611764729023,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[159.035,223.399]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":47.507},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Oval","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[3.959,1.14],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[-7.452,3.404],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-23.076,-38.321],[-13.399,-34.788],[-5.637,-33.268],[7.786,-31.151],[27.167,-31.071],[37.145,-30.33],[74.445,-26.223],[84.923,-18.579],[78.637,-9.919],[49.004,22.98],[44.69,25.004],[31.794,31.897],[22.301,39.386],[16.244,42.472],[7.153,53.903],[5.004,52.703],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-71.861,-19.71],[-72.881,-37.348],[-63.988,-40.144],[-29.936,-36.979]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-31.265,-39.964],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[33.761,-42.739],[41.528,-37.112],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[59.679,28.115],[58.039,32.778],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.629,71.671],[4.48,70.472],[-3.001,70.325],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-53.78,50.738],[-38.571,29.576],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-47.904,13.215],[-67.218,7.67],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-37.052,-35.884]],"c":true}]},{"t":63,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-26.042,-33.03],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[27.96,-33.999],[35.727,-28.372],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[49.004,22.98],[47.364,27.642],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.728,62.319],[4.579,61.12],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-31.829,-28.951]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.851,0.318,0.5,1,0.743,0.159,1,1,0.635,0]}},"s":{"a":0,"k":[-0.56,-74.935]},"e":{"a":0,"k":[-17.356,124.783]},"t":1,"nm":"Gradient Fill 231","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"path-3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152.417,251.468]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path","bm":0,"hd":false}],"ip":38,"op":64,"st":12,"bm":0},{"ddd":0,"ind":62,"ty":4,"nm":"samolet 14","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.651],"y":[1.01]},"o":{"x":[0.279],"y":[0.003]},"t":5,"s":[-45.318]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.956],"y":[0]},"t":22,"s":[-81.998]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":38,"s":[-113.189]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":45,"s":[-163.883]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":53,"s":[-116.657]},{"t":64,"s":[-145.838]}]},"p":{"a":1,"k":[{"i":{"x":0.653,"y":0.754},"o":{"x":0.319,"y":0.537},"t":5,"s":[184.901,235.454,0],"to":[-6.495,-12.384,0],"ti":[32.424,1.763,0]},{"i":{"x":0.651,"y":0.529},"o":{"x":0.315,"y":0.422},"t":19,"s":[127.355,198.061,0],"to":[-27.713,-0.216,0],"ti":[16.389,-12.57,0]},{"i":{"x":0.757,"y":1},"o":{"x":0.194,"y":1},"t":43,"s":[72.101,228.574,0],"to":[0.259,12.247,0],"ti":[-1.059,-0.131,0]},{"t":69,"s":[85.432,230.169,0]}]},"a":{"a":0,"k":[-10.418,212.192,0]},"s":{"a":1,"k":[{"i":{"x":[0.691,0.648,0.636],"y":[1,1,0.04]},"o":{"x":[0.529,0.529,0.286],"y":[0.002,0.003,0]},"t":5,"s":[25,25,100]},{"i":{"x":[0.663,0.663,0.684],"y":[1.045,1.015,3.022]},"o":{"x":[0.222,0.222,0.33],"y":[0.014,0.005,2.065]},"t":13,"s":[77.337,77.3,100]},{"i":{"x":[0.807,0.807,0.8],"y":[1,1,1]},"o":{"x":[0.43,0.397,0.431],"y":[-0.132,0,-0.872]},"t":32,"s":[61.228,46.2,100]},{"i":{"x":[0.307,0.307,0.833],"y":[1,1,1]},"o":{"x":[0.562,0.562,0.167],"y":[0,0,0]},"t":38,"s":[59.016,59,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":43,"s":[85.023,85,100]},{"i":{"x":[0.307,0.307,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":51,"s":[64.017,64,100]},{"t":61,"s":[84.022,84,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.393,-4.407],[0,0],[-3.917,-0.355],[0,0],[-2.267,6.301],[0,0],[0,0],[-9.248,-1.26],[0,0],[2.344,11.762],[0,0]],"o":[[0,0],[-8.346,15.09],[0,0],[8.479,-0.974],[0,0],[0,0],[1.07,7.35],[0,0],[11.529,0.474],[0,0],[-2.748,-6.036]],"v":[[-37.231,-79.654],[-95.811,46.266],[-84.692,64.367],[-56.862,64.108],[-44.416,56.126],[-34.41,3.935],[-26.503,53.95],[-15.899,67.743],[5.973,69.607],[20.804,54.534],[-27,-78.057]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411824544,0.509803921569,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[19.918,205.246]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.165,-4.647],[17.006,-36.829],[0,0],[0,0],[0,0]],"o":[[-0.652,2.867],[-17.905,38.777],[-10.703,-6.521],[0,0],[1.222,-1.709]],"v":[[18.746,-79.466],[-12.064,-7.711],[-44.578,62.783],[-48.806,47.271],[9.685,-78.566]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,1,1,1,1,1,1]}},"s":{"a":0,"k":[-16.816,-0.358]},"e":{"a":0,"k":[16.607,-0.358]},"t":1,"nm":"Gradient Fill 232","hd":false},{"ty":"tr","p":{"a":0,"k":[-27.088,204.242]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[3.736,-9.47],[0,0],[-3.176,-6.11]],"o":[[-26.552,-33.921],[0,0],[3.204,-3.727],[0,0]],"v":[[19.947,13.146],[-46.178,26.645],[-12.883,-52.195],[-2.774,-51.026]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176474094,0.701960802078,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-4.447,177.777]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":47.507},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.802,-3.918],[0,0],[-4.644,-0.664],[0,0],[-3.345,6.577],[0,0],[0,0],[-8.8,-1.096],[0,0],[2.564,10.416],[0,0]],"o":[[0,0],[-8.603,15.142],[0,0],[9.302,-1.593],[0,0],[0,0],[0.712,7.089],[0,0],[11.198,0.879],[0,0],[-2.796,-6.209]],"v":[[-37.18,-79.654],[-95.863,46.318],[-84.795,64.368],[-56.451,64.108],[-44.314,56.023],[-34.855,4.054],[-26.4,53.847],[-15.899,67.743],[6.93,69.539],[20.376,55.416],[-27.261,-78.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.875,0.369,0.5,1,0.755,0.184,1,1,0.635,0]}},"s":{"a":0,"k":[-50.821,-10.362]},"e":{"a":0,"k":[39.444,112.755]},"t":1,"nm":"Gradient Fill 233","hd":false},{"ty":"tr","p":{"a":0,"k":[19.918,205.246]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false}],"ip":5,"op":38,"st":-27,"bm":0},{"ddd":0,"ind":63,"ty":4,"nm":"konfetti 30","sr":1,"ks":{"r":{"a":0,"k":-533.156},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":3,"s":[199.027,219.921,0],"to":[-29.823,-26.758,0],"ti":[60.259,50.827,0]},{"t":37,"s":[93.828,93.713,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":3,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":10,"s":[115.802,101.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23,"s":[-84.986,107.099,100]},{"t":37,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0.170519017238,0.25623626709,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.435986268287,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":3,"op":38,"st":-148,"bm":0},{"ddd":0,"ind":64,"ty":4,"nm":"konfetti 29","sr":1,"ks":{"r":{"a":0,"k":-595.854},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":7,"s":[199.027,219.921,0],"to":[-29.823,-26.758,0],"ti":[60.259,50.827,0]},{"t":41,"s":[51.259,237.31,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":14,"s":[81.626,71.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[-81.018,102.099,100]},{"t":41,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0.170519017238,0.25623626709,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.435986268287,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":7,"op":42,"st":-144,"bm":0},{"ddd":0,"ind":65,"ty":4,"nm":"konfetti 28","sr":1,"ks":{"r":{"a":0,"k":-533.156},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":3,"s":[186.705,268.595,0],"to":[-26.42,1.674,0],"ti":[36.882,-31.066,0]},{"t":37,"s":[18.112,274.43,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":3,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":10,"s":[88.462,77.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23,"s":[-77.051,97.099,100]},{"t":37,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.9623989928,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":3,"op":38,"st":-148,"bm":0},{"ddd":0,"ind":66,"ty":4,"nm":"konfetti 26","sr":1,"ks":{"r":{"a":0,"k":-801.88},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":3,"s":[224.579,204.201,0],"to":[-29.823,-26.758,0],"ti":[10.798,44.859,0]},{"t":37,"s":[174.412,60.574,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":3,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":10,"s":[93.018,81.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23,"s":[-104.019,130.302,100]},{"t":37,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":3,"op":38,"st":-148,"bm":0},{"ddd":0,"ind":67,"ty":4,"nm":"konfetti 25","sr":1,"ks":{"r":{"a":0,"k":-899.975},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":9,"s":[184.412,262.96,0],"to":[-29.823,-26.758,0],"ti":[28.033,6.078,0]},{"t":43,"s":[63.507,259.127,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":16,"s":[108.967,95.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[-63.306,79.302,100]},{"t":43,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.9623989928,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":9,"op":44,"st":-142,"bm":0},{"ddd":0,"ind":68,"ty":4,"nm":"konfetti 24","sr":1,"ks":{"r":{"a":0,"k":-899.975},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":3,"s":[184.412,262.96,0],"to":[-29.823,-26.758,0],"ti":[17.907,36.376,0]},{"t":37,"s":[44.491,137.567,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":3,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":10,"s":[132.89,116.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23,"s":[-100.826,126.302,100]},{"t":37,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.932318354588,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":3,"op":38,"st":-148,"bm":0},{"ddd":0,"ind":69,"ty":4,"nm":"konfetti 23","sr":1,"ks":{"r":{"a":0,"k":-801.88},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":10,"s":[196.792,281.174,0],"to":[-23.737,27.028,0],"ti":[36.289,-7.22,0]},{"t":44,"s":[71.719,326.868,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":10,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":17,"s":[145.422,127.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":30,"s":[-122.379,153.302,100]},{"t":44,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.9623989928,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":10,"op":45,"st":-141,"bm":0},{"ddd":0,"ind":70,"ty":4,"nm":"konfetti 22","sr":1,"ks":{"r":{"a":0,"k":-911.551},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":3,"s":[191.815,265.451,0],"to":[-18.89,31.09,0],"ti":[20.381,-96.056,0]},{"t":37,"s":[77.609,378.427,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":3,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":10,"s":[145.422,127.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23,"s":[-134.354,168.302,100]},{"t":37,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.827035582299,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":3,"op":38,"st":-148,"bm":0},{"ddd":0,"ind":71,"ty":4,"nm":"konfetti 21","sr":1,"ks":{"r":{"a":0,"k":-455.465},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":20,"s":[201.123,223.328,0],"to":[-26.42,1.674,0],"ti":[14.729,43.615,0]},{"t":54,"s":[139.55,133.681,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[146.561,128.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[-146.881,185.099,100]},{"t":54,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333333333,0.404253611845,0.087843135759,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.601430257161,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":20,"op":55,"st":-131,"bm":0},{"ddd":0,"ind":72,"ty":4,"nm":"konfetti 20","sr":1,"ks":{"r":{"a":0,"k":-801.88},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":18,"s":[224.579,204.201,0],"to":[-29.823,-26.758,0],"ti":[10.798,44.859,0]},{"t":52,"s":[174.412,60.574,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":18,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[149.978,131.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":38,"s":[-109.607,137.302,100]},{"t":52,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.796954884249,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":18,"op":53,"st":-133,"bm":0},{"ddd":0,"ind":73,"ty":4,"nm":"konfetti 19","sr":1,"ks":{"r":{"a":0,"k":-899.975},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":24,"s":[184.412,262.96,0],"to":[-29.823,-26.758,0],"ti":[28.033,6.078,0]},{"t":58,"s":[63.507,259.127,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":24,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":31,"s":[146.561,128.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[-123.178,154.302,100]},{"t":58,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.977439491422,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":24,"op":59,"st":-127,"bm":0},{"ddd":0,"ind":74,"ty":4,"nm":"konfetti 18","sr":1,"ks":{"r":{"a":0,"k":-899.975},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":18,"s":[184.412,262.96,0],"to":[-29.823,-26.758,0],"ti":[17.907,36.376,0]},{"t":52,"s":[44.491,137.567,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":18,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[156.814,137.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":38,"s":[-131.161,164.302,100]},{"t":52,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.932318354588,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":18,"op":53,"st":-133,"bm":0},{"ddd":0,"ind":75,"ty":4,"nm":"konfetti 17","sr":1,"ks":{"r":{"a":0,"k":-801.88},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":34,"s":[196.792,281.174,0],"to":[-23.737,27.028,0],"ti":[36.289,-7.22,0]},{"t":68,"s":[71.719,326.868,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":34,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[175.041,153.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":54,"s":[-155.109,194.302,100]},{"t":68,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.631511015051,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":34,"op":69,"st":-117,"bm":0},{"ddd":0,"ind":76,"ty":4,"nm":"konfetti 16","sr":1,"ks":{"r":{"a":0,"k":-911.551},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":18,"s":[191.815,265.451,0],"to":[-18.89,31.09,0],"ti":[20.381,-96.056,0]},{"t":52,"s":[77.609,378.427,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":18,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[152.257,133.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":38,"s":[-119.985,150.302,100]},{"t":52,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.827035582299,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":18,"op":53,"st":-133,"bm":0},{"ddd":0,"ind":77,"ty":4,"nm":"Spiral 25","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[1.061]},"o":{"x":[0.181],"y":[0.002]},"t":17,"s":[-152.477]},{"t":47,"s":[-140.949]}]},"p":{"a":1,"k":[{"i":{"x":0.615,"y":0.375},"o":{"x":0.19,"y":1},"t":12,"s":[211.761,238.65,0],"to":[-35.945,-32.268,0],"ti":[11.188,35.285,0]},{"t":47,"s":[113.188,112.985,0]}]},"a":{"a":0,"k":[-357,289.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.126,0.126,0.833],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":12,"s":[0,0,100]},{"t":20,"s":[37.2,37.2,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":12,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-65.187,-14.819],[22.107,24.605],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[17.402,3.956],[-13.269,-14.768],[29.088,18]],"v":[[-471.765,282],[-417.722,215.819],[-414.22,299.441],[-367.107,227.443],[-354.184,320.867],[-324.048,242.435],[-313.519,335.152]],"c":false}]},{"t":34,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-94.693,0.752],[20.997,10],[-103.054,-44.05],[23.959,30.206],[-67.501,-54.873]],"o":[[65.243,12.331],[-31.306,-42.065],[94.693,-0.752],[-29.565,-14.081],[57.175,24.439],[-20.142,-25.394],[33.103,26.911]],"v":[[-517.761,298.913],[-414.278,223.297],[-379.593,319.403],[-270.799,239.948],[-255.812,364.683],[-156.032,321.239],[-166.167,435.229]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.435294087728,0.807335528205,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":12,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-67.325,-6.902],[23.271,23],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[29.478,3.022],[-23.271,-23],[29.088,18]],"v":[[-470.076,282],[-416.033,215.819],[-409.167,299.441],[-365.418,227.443],[-349.479,321.339],[-319.882,236.548],[-306.177,336.775]],"c":false}]},{"t":34,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-93.856,-12.583],[20.997,10],[-104.617,-40.197],[30.943,23],[-74.843,-34.831]],"o":[[65.243,12.331],[-31.306,-42.065],[98.686,13.231],[-29.565,-14.081],[59.299,22.784],[-30.943,-23],[38.678,18]],"v":[[-518.307,300.373],[-407.037,226.188],[-382.305,320.136],[-268.689,242.281],[-255.659,368.013],[-158.042,324.193],[-159.288,431.927]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.014825066398,0.62771061916,0.945098039216,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,3]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.343],"y":[0]},"t":24.691,"s":[0]},{"t":48.76953125,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":19.846,"s":[100]},{"t":41,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":12,"op":48,"st":-58,"bm":0},{"ddd":0,"ind":78,"ty":4,"nm":"Spiral 24","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[0.939]},"o":{"x":[0.181],"y":[-0.002]},"t":8,"s":[400.285]},{"t":38,"s":[388.758]}]},"p":{"a":1,"k":[{"i":{"x":0.615,"y":0.162},"o":{"x":0.142,"y":1},"t":3,"s":[167.913,277.667,0],"to":[-32.442,-15.749,0],"ti":[27.547,-2.215,0]},{"t":38,"s":[53.246,244.961,0]}]},"a":{"a":0,"k":[-357,289.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.126,0.126,0.833],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":3,"s":[0,0,100]},{"t":10.615234375,"s":[-27.773,27.773,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":3,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-65.187,-14.819],[22.107,24.605],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[17.402,3.956],[-13.269,-14.768],[29.088,18]],"v":[[-471.765,282],[-417.722,215.819],[-414.22,299.441],[-367.107,227.443],[-354.184,320.867],[-324.048,242.435],[-313.519,335.152]],"c":false}]},{"t":25,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-94.693,0.752],[20.997,10],[-103.054,-44.05],[23.959,30.206],[-67.501,-54.873]],"o":[[65.243,12.331],[-31.306,-42.065],[94.693,-0.752],[-29.565,-14.081],[57.175,24.439],[-20.142,-25.394],[33.103,26.911]],"v":[[-517.761,298.913],[-414.278,223.297],[-379.593,319.403],[-270.799,239.948],[-255.812,364.683],[-156.032,321.239],[-166.167,435.229]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.712110691445,0.623529411765,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":3,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-67.325,-6.902],[23.271,23],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[29.478,3.022],[-23.271,-23],[29.088,18]],"v":[[-470.076,282],[-416.033,215.819],[-409.167,299.441],[-365.418,227.443],[-349.479,321.339],[-319.882,236.548],[-306.177,336.775]],"c":false}]},{"t":25,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-93.856,-12.583],[20.997,10],[-104.617,-40.197],[30.943,23],[-74.843,-34.831]],"o":[[65.243,12.331],[-31.306,-42.065],[98.686,13.231],[-29.565,-14.081],[59.299,22.784],[-30.943,-23],[38.678,18]],"v":[[-518.307,300.373],[-407.037,226.188],[-382.305,320.136],[-268.689,242.281],[-255.659,368.013],[-158.042,324.193],[-159.288,431.927]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.253979222915,0.176470573276,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,3]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.343],"y":[0]},"t":15.691,"s":[0]},{"t":39.76953125,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":10.846,"s":[100]},{"t":32,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":3,"op":39,"st":-67,"bm":0},{"ddd":0,"ind":79,"ty":4,"nm":"ZVEZDA 15","parent":80,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[258.173]},{"t":46,"s":[336.416]}]},"p":{"a":0,"k":[-22.987,200.669,0]},"a":{"a":0,"k":[159.035,247.474,0]},"s":{"a":0,"k":[100,-100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.496,1.001],[0.851,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[2.536,1.328],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[-6.828,4.374],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-23.297,-38.098],[-13.264,-34.39],[-5.37,-33.359],[6.895,-32.03],[27.167,-31.071],[37.235,-30.065],[74.802,-26.048],[84.923,-18.579],[78.814,-10.274],[49.004,22.98],[44.69,25.004],[31.794,31.897],[22.3,39.386],[16.244,42.472],[7.153,53.903],[5.004,52.703],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-71.861,-19.71],[-73.324,-36.902],[-64.299,-40.186],[-29.803,-37.024]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-31.265,-39.964],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[33.761,-42.739],[41.528,-37.112],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[59.679,28.115],[58.039,32.778],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.629,71.671],[4.48,70.472],[-3.001,70.325],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-53.78,50.738],[-38.571,29.576],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-47.904,13.215],[-67.218,7.67],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-37.052,-35.884]],"c":true}]},{"t":63,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-26.042,-33.03],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[27.96,-33.999],[35.727,-28.372],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[49.004,22.98],[47.364,27.642],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.728,62.319],[4.579,61.12],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-31.829,-28.951]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411824544,0.509803921569,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"path-3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152.417,251.468]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.626,-0.89],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.589,-1.651]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-3.6,7.583],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[67.906,16.382],[72.98,14.81],[74.552,19.884],[20.684,12.393],[7.153,13.723],[-31.004,10.16],[-35.227,6.937],[-32.004,2.715],[6.153,6.277],[14.038,8.892]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.938,-2.863],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.843,3.379]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-5.192,6.423],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[32.94,-29.073],[38.014,-30.645],[39.586,-25.571],[15.462,5.46],[-0.092,16.634],[-34.251,28.693],[-38.474,25.47],[-35.251,21.248],[-1.092,9.189],[8.815,1.958]],"c":true}]},{"t":63,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.626,-0.89],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.304,5.327]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-3.6,7.583],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[32.94,-29.073],[38.014,-30.645],[39.586,-25.571],[20.684,12.393],[5.131,23.568],[-34.251,28.693],[-38.474,25.47],[-35.251,21.248],[4.131,16.122],[14.038,8.892]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,1,1,1,1,1,1]}},"s":{"a":0,"k":[-38464.41,8209.829]},"e":{"a":0,"k":[139.409,46.805]},"t":1,"nm":"Gradient Fill 234","hd":false},{"ty":"tr","p":{"a":0,"k":[116.591,209.195]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[6.126,0.871],[4.723,0.291],[8.562,2.243],[7.789,0.886],[6.577,2.19],[3.256,-0.255],[11.429,-1.234],[-4.137,-8.666],[-2.265,-3.132]],"o":[[10.354,-1.081],[19.114,-5.218],[-6.065,-0.767],[-2.385,-0.339],[-11.668,-0.718],[-7.106,-1.861],[-13.133,-1.493],[-1.881,-0.626],[-7.646,0.599],[-7.776,0.839],[4.05,8.484],[3.108,4.297]],"v":[[-47.931,39.762],[-10.146,32.923],[53.343,2.68],[29.16,-0.287],[20.317,-2.776],[0.428,-3.862],[-12.304,-5.288],[-30.061,-10.225],[-36.282,-8.678],[-71.238,-12.047],[-78.565,8.327],[-67.28,34.212]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[5.476,1.955],[2.542,3.137],[9.482,11.983],[4.713,-6.264],[5.609,-7.304],[3.053,-1.16],[10.985,-3.924],[-4.775,-8.331],[-4.196,-3.323]],"o":[[10.354,-1.081],[19.114,-5.218],[-7.349,-1.852],[-2.269,-0.81],[-6.613,-8.163],[-4.558,-5.76],[-12.706,16.888],[-1.208,1.573],[-7.992,3.036],[-7.365,2.631],[4.548,7.934],[4.158,3.292]],"v":[[-54.481,41.273],[-10.146,32.923],[55.718,-0.802],[34.961,-9.026],[27.134,-14.667],[3.359,-43.56],[-13.016,-43.897],[-37.806,-12.314],[-43.62,-7.803],[-77.159,3.848],[-82.18,21.814],[-73.83,35.723]],"c":true}]},{"t":63,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[6.126,0.871],[1.659,3.681],[5.632,12.473],[3.521,-7.004],[4.842,-9.197],[3.256,-0.255],[11.429,-1.234],[-7.512,-5.982],[-4.196,-3.323]],"o":[[10.354,-1.081],[19.114,-5.218],[-6.065,-0.767],[-2.385,-0.339],[-4.803,-10.658],[-3.023,-6.695],[-12.952,25.77],[-0.924,1.754],[-7.646,0.599],[-7.776,0.839],[8.638,6.879],[4.158,3.292]],"v":[[-47.931,39.762],[-10.146,32.923],[53.343,2.68],[29.16,-0.287],[21.333,-5.927],[3.359,-43.56],[-13.016,-43.897],[-32.584,-5.38],[-38.398,-0.869],[-77.159,3.848],[-82.18,21.814],[-67.28,34.212]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.937254905701,0.611764729023,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[159.035,223.399]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":47.507},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Oval","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[3.959,1.14],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[-7.452,3.404],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-23.076,-38.321],[-13.399,-34.788],[-5.637,-33.268],[7.786,-31.151],[27.167,-31.071],[37.145,-30.33],[74.445,-26.223],[84.923,-18.579],[78.637,-9.919],[49.004,22.98],[44.69,25.004],[31.794,31.897],[22.301,39.386],[16.244,42.472],[7.153,53.903],[5.004,52.703],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-71.861,-19.71],[-72.881,-37.348],[-63.988,-40.144],[-29.936,-36.979]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-31.265,-39.964],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[33.761,-42.739],[41.528,-37.112],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[59.679,28.115],[58.039,32.778],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.629,71.671],[4.48,70.472],[-3.001,70.325],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-53.78,50.738],[-38.571,29.576],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-47.904,13.215],[-67.218,7.67],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-37.052,-35.884]],"c":true}]},{"t":63,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-26.042,-33.03],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[27.96,-33.999],[35.727,-28.372],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[49.004,22.98],[47.364,27.642],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.728,62.319],[4.579,61.12],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-31.829,-28.951]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.851,0.318,0.5,1,0.743,0.159,1,1,0.635,0]}},"s":{"a":0,"k":[-0.56,-74.935]},"e":{"a":0,"k":[-17.356,124.783]},"t":1,"nm":"Gradient Fill 235","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"path-3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152.417,251.468]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path","bm":0,"hd":false}],"ip":38,"op":64,"st":12,"bm":0},{"ddd":0,"ind":80,"ty":4,"nm":"samolet 15","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.651],"y":[0.986]},"o":{"x":[0.279],"y":[-0.004]},"t":5,"s":[49.419]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.956],"y":[0]},"t":22,"s":[74.889]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":38,"s":[108.283]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":45,"s":[197.784]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":53,"s":[139.448]},{"t":63,"s":[179.643]}]},"p":{"a":1,"k":[{"i":{"x":0.652,"y":0.78},"o":{"x":0.317,"y":0.537},"t":5,"s":[330.088,238.455,0],"to":[7.988,-12.112,0],"ti":[-32.197,4.032,0]},{"i":{"x":0.652,"y":0.525},"o":{"x":0.316,"y":0.373},"t":19,"s":[392.22,207.491,0],"to":[21.524,-1.197,0],"ti":[-0.974,-3.686,0]},{"i":{"x":0.379,"y":1},"o":{"x":0.346,"y":1},"t":43,"s":[454.563,224.487,0],"to":[-3.127,-1.24,0],"ti":[1.044,-0.221,0]},{"t":69,"s":[421.423,229.079,0]}]},"a":{"a":0,"k":[-10.418,212.192,0]},"s":{"a":1,"k":[{"i":{"x":[0.906,0.774,0.636],"y":[1.002,0.996,0.04]},"o":{"x":[0.529,0.529,0.286],"y":[-0.051,0.051,0]},"t":5,"s":[-25,25,100]},{"i":{"x":[0.663,0.663,0.684],"y":[0.874,1.03,3.022]},"o":{"x":[0.222,0.222,0.33],"y":[0.507,-0.03,2.065]},"t":13,"s":[-72,72,100]},{"i":{"x":[0.807,0.807,0.8],"y":[1,1,1]},"o":{"x":[0.43,0.43,0.431],"y":[0.009,0.024,-0.872]},"t":32,"s":[-70,45.752,100]},{"i":{"x":[0.307,0.307,0.833],"y":[1,1,1]},"o":{"x":[0.562,0.562,0.167],"y":[0,0,0]},"t":38,"s":[-59,59,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":43,"s":[-85,85,100]},{"i":{"x":[0.798,0.798,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":51,"s":[-64,64,100]},{"t":61,"s":[-70,70,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.393,-4.407],[0,0],[-3.917,-0.355],[0,0],[-2.267,6.301],[0,0],[0,0],[-9.248,-1.26],[0,0],[2.344,11.762],[0,0]],"o":[[0,0],[-8.346,15.09],[0,0],[8.479,-0.974],[0,0],[0,0],[1.07,7.35],[0,0],[11.529,0.474],[0,0],[-2.748,-6.036]],"v":[[-37.231,-79.654],[-95.811,46.266],[-84.692,64.367],[-56.862,64.108],[-44.416,56.126],[-34.41,3.935],[-26.503,53.95],[-15.899,67.743],[5.973,69.607],[20.804,54.534],[-27,-78.057]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411824544,0.509803921569,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[19.918,205.246]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.165,-4.647],[17.006,-36.829],[0,0],[0,0],[0,0]],"o":[[-0.652,2.867],[-17.905,38.777],[-10.703,-6.521],[0,0],[1.222,-1.709]],"v":[[18.746,-79.466],[-12.064,-7.711],[-44.578,62.783],[-48.806,47.271],[9.685,-78.566]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,1,1,1,1,1,1]}},"s":{"a":0,"k":[-16.816,-0.358]},"e":{"a":0,"k":[16.607,-0.358]},"t":1,"nm":"Gradient Fill 236","hd":false},{"ty":"tr","p":{"a":0,"k":[-27.088,204.242]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[3.736,-9.47],[0,0],[-3.176,-6.11]],"o":[[-26.552,-33.921],[0,0],[3.204,-3.727],[0,0]],"v":[[19.947,13.146],[-46.178,26.645],[-12.883,-52.195],[-2.774,-51.026]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176474094,0.701960802078,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-4.447,177.777]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":47.507},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.802,-3.918],[0,0],[-4.644,-0.664],[0,0],[-3.345,6.577],[0,0],[0,0],[-8.8,-1.096],[0,0],[2.564,10.416],[0,0]],"o":[[0,0],[-8.603,15.142],[0,0],[9.302,-1.593],[0,0],[0,0],[0.712,7.089],[0,0],[11.198,0.879],[0,0],[-2.796,-6.209]],"v":[[-37.18,-79.654],[-95.863,46.318],[-84.795,64.368],[-56.451,64.108],[-44.314,56.023],[-34.855,4.054],[-26.4,53.847],[-15.899,67.743],[6.93,69.539],[20.376,55.416],[-27.261,-78.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.875,0.369,0.5,1,0.755,0.184,1,1,0.635,0]}},"s":{"a":0,"k":[-50.821,-10.362]},"e":{"a":0,"k":[39.444,112.755]},"t":1,"nm":"Gradient Fill 237","hd":false},{"ty":"tr","p":{"a":0,"k":[19.918,205.246]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false}],"ip":5,"op":38,"st":-27,"bm":0},{"ddd":0,"ind":81,"ty":4,"nm":"konfetti 45","sr":1,"ks":{"r":{"a":0,"k":528.25},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":6,"s":[309.678,215.18,0],"to":[27.425,-29.211,0],"ti":[-55.69,55.795,0]},{"t":40,"s":[403.697,80.436,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":6,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[-161.37,141.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":26,"s":[151.642,191.099,100]},{"t":40,"s":[2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0.170519017238,0.25623626709,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.435986268287,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":6,"op":41,"st":-145,"bm":0},{"ddd":0,"ind":82,"ty":4,"nm":"konfetti 44","sr":1,"ks":{"r":{"a":0,"k":590.947},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":10,"s":[309.678,215.18,0],"to":[27.425,-29.211,0],"ti":[-55.69,55.795,0]},{"t":44,"s":[458.392,219.866,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":10,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":17,"s":[-144.282,126.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":30,"s":[159.577,201.099,100]},{"t":44,"s":[2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0.170519017238,0.25623626709,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.435986268287,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":10,"op":45,"st":-141,"bm":0},{"ddd":0,"ind":83,"ty":4,"nm":"konfetti 42","sr":1,"ks":{"r":{"a":0,"k":450.558},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":8,"s":[307.881,218.754,0],"to":[26.466,-0.592,0],"ti":[-10.944,44.715,0]},{"t":42,"s":[361.561,124.169,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":8,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":15,"s":[-139.726,122.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":28,"s":[107.998,136.099,100]},{"t":42,"s":[2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,1,0.917277915805,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":8,"op":43,"st":-143,"bm":0},{"ddd":0,"ind":84,"ty":4,"nm":"konfetti 41","sr":1,"ks":{"r":{"a":0,"k":796.973},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":6,"s":[282.875,201.703,0],"to":[27.425,-29.211,0],"ti":[-6.921,45.618,0]},{"t":40,"s":[320.573,54.312,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":6,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[-145.422,127.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":26,"s":[150.32,188.302,100]},{"t":40,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":6,"op":41,"st":-145,"bm":0},{"ddd":0,"ind":85,"ty":4,"nm":"konfetti 40","sr":1,"ks":{"r":{"a":0,"k":895.068},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":12,"s":[327.921,256.812,0],"to":[27.425,-29.211,0],"ti":[-27.41,8.454,0]},{"t":46,"s":[448.055,242.651,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[-171.623,150.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":32,"s":[113.598,142.302,100]},{"t":46,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.947358733532,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":12,"op":47,"st":-139,"bm":0},{"ddd":0,"ind":86,"ty":4,"nm":"konfetti 39","sr":1,"ks":{"r":{"a":0,"k":895.068},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":6,"s":[327.921,256.812,0],"to":[27.425,-29.211,0],"ti":[-14.73,37.775,0]},{"t":40,"s":[456.603,119.909,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":6,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[-179.598,157.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":26,"s":[107.212,134.302,100]},{"t":40,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.932318354588,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":6,"op":41,"st":-145,"bm":0},{"ddd":0,"ind":87,"ty":4,"nm":"konfetti 38","sr":1,"ks":{"r":{"a":0,"k":796.973},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":13,"s":[317.144,276.018,0],"to":[25.962,24.898,0],"ti":[-36.773,-4.089,0]},{"t":47,"s":[445.667,310.845,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[-121.718,106.845,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":33,"s":[121.581,152.302,100]},{"t":47,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.751834106445,0.360784283806,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":13,"op":48,"st":-138,"bm":0},{"ddd":0,"ind":88,"ty":4,"nm":"konfetti 37","sr":1,"ks":{"r":{"a":0,"k":906.645},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":6,"s":[320.758,259.926,0],"to":[21.48,29.361,0],"ti":[-28.523,-93.961,0]},{"t":40,"s":[444.209,362.719,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":6,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[-155.674,136.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":26,"s":[119.186,149.302,100]},{"t":40,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.50980386173,0.867358637791,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":6,"op":41,"st":-145,"bm":0},{"ddd":0,"ind":89,"ty":4,"nm":"konfetti 36","sr":1,"ks":{"r":{"a":0,"k":450.558},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":23,"s":[326.881,201.754,0],"to":[26.466,-0.592,0],"ti":[-10.944,44.715,0]},{"t":57,"s":[361.561,124.169,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":30,"s":[-187.572,164.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":43,"s":[154.023,194.099,100]},{"t":57,"s":[2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.042983466504,0.758414952895,0.843137254902,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.932318234911,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":23,"op":58,"st":-128,"bm":0},{"ddd":0,"ind":90,"ty":4,"nm":"konfetti 35","sr":1,"ks":{"r":{"a":0,"k":796.973},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":21,"s":[282.875,201.703,0],"to":[27.425,-29.211,0],"ti":[-6.921,45.618,0]},{"t":55,"s":[320.573,54.312,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":28,"s":[-152.257,133.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[131.959,165.302,100]},{"t":55,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":21,"op":56,"st":-130,"bm":0},{"ddd":0,"ind":91,"ty":4,"nm":"konfetti 34","sr":1,"ks":{"r":{"a":0,"k":895.068},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":27,"s":[327.921,256.812,0],"to":[27.425,-29.211,0],"ti":[-27.41,8.454,0]},{"t":61,"s":[448.055,242.651,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":34,"s":[-181.876,159.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":47,"s":[131.959,165.302,100]},{"t":61,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.977439431583,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":27,"op":62,"st":-124,"bm":0},{"ddd":0,"ind":92,"ty":4,"nm":"konfetti 33","sr":1,"ks":{"r":{"a":0,"k":895.068},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":21,"s":[327.921,256.812,0],"to":[27.425,-29.211,0],"ti":[-14.73,37.775,0]},{"t":55,"s":[456.603,119.909,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":28,"s":[-229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[164.689,206.302,100]},{"t":55,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.932318414426,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":21,"op":56,"st":-130,"bm":0},{"ddd":0,"ind":93,"ty":4,"nm":"konfetti 32","sr":1,"ks":{"r":{"a":0,"k":796.973},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":37,"s":[317.144,276.018,0],"to":[25.962,24.898,0],"ti":[-36.773,-4.089,0]},{"t":71,"s":[445.667,310.845,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":37,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[-165.927,145.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":57,"s":[124.774,156.302,100]},{"t":71,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.390864981857,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":37,"op":72,"st":-114,"bm":0},{"ddd":0,"ind":94,"ty":4,"nm":"konfetti 31","sr":1,"ks":{"r":{"a":0,"k":906.645},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":21,"s":[354.758,277.926,0],"to":[21.48,29.361,0],"ti":[-28.523,-93.961,0]},{"t":55,"s":[444.209,362.719,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":28,"s":[-167.066,146.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[146.328,183.302,100]},{"t":55,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.827035582299,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":21,"op":56,"st":-130,"bm":0},{"ddd":0,"ind":95,"ty":4,"nm":"Spiral 27","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[0.939]},"o":{"x":[0.181],"y":[-0.002]},"t":18,"s":[147.57]},{"t":48,"s":[136.042]}]},"p":{"a":1,"k":[{"i":{"x":0.615,"y":0.375},"o":{"x":0.19,"y":1},"t":13,"s":[298.593,234.93,0],"to":[33.053,-35.224,0],"ti":[-8.129,36.113,0]},{"t":48,"s":[386.056,101.293,0]}]},"a":{"a":0,"k":[-357,289.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.126,0.126,0.833],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":13,"s":[0,0,100]},{"t":20.615234375,"s":[-37.2,37.2,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":13,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-65.187,-14.819],[22.107,24.605],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[17.402,3.956],[-13.269,-14.768],[29.088,18]],"v":[[-471.765,282],[-417.722,215.819],[-414.22,299.441],[-367.107,227.443],[-354.184,320.867],[-324.048,242.435],[-313.519,335.152]],"c":false}]},{"t":35,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-94.693,0.752],[20.997,10],[-103.054,-44.05],[23.959,30.206],[-67.501,-54.873]],"o":[[65.243,12.331],[-31.306,-42.065],[94.693,-0.752],[-29.565,-14.081],[57.175,24.439],[-20.142,-25.394],[33.103,26.911]],"v":[[-517.761,298.913],[-414.278,223.297],[-379.593,319.403],[-270.799,239.948],[-255.812,364.683],[-156.032,321.239],[-166.167,435.229]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.435294087728,0.807335528205,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":13,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-67.325,-6.902],[23.271,23],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[29.478,3.022],[-23.271,-23],[29.088,18]],"v":[[-470.076,282],[-416.033,215.819],[-409.167,299.441],[-365.418,227.443],[-349.479,321.339],[-319.882,236.548],[-306.177,336.775]],"c":false}]},{"t":35,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-93.856,-12.583],[20.997,10],[-104.617,-40.197],[30.943,23],[-74.843,-34.831]],"o":[[65.243,12.331],[-31.306,-42.065],[98.686,13.231],[-29.565,-14.081],[59.299,22.784],[-30.943,-23],[38.678,18]],"v":[[-518.307,300.373],[-407.037,226.188],[-382.305,320.136],[-268.689,242.281],[-255.659,368.013],[-158.042,324.193],[-159.288,431.927]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.014825066398,0.62771061916,0.945098039216,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,3]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.343],"y":[0]},"t":25.691,"s":[0]},{"t":49.76953125,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":20.846,"s":[100]},{"t":42,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":13,"op":49,"st":-57,"bm":0},{"ddd":0,"ind":96,"ty":4,"nm":"Spiral 26","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[1.061]},"o":{"x":[0.181],"y":[0.002]},"t":11,"s":[-405.192]},{"t":41,"s":[-393.665]}]},"p":{"a":1,"k":[{"i":{"x":0.615,"y":0.162},"o":{"x":0.142,"y":1},"t":6,"s":[345.617,270.053,0],"to":[30.976,-18.466,0],"ti":[-27.635,0.149,0]},{"t":41,"s":[457.066,227.658,0]}]},"a":{"a":0,"k":[-357,289.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.126,0.126,0.833],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":6,"s":[0,0,100]},{"t":13.615234375,"s":[27.773,27.773,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":6,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-65.187,-14.819],[22.107,24.605],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[17.402,3.956],[-13.269,-14.768],[29.088,18]],"v":[[-471.765,282],[-417.722,215.819],[-414.22,299.441],[-367.107,227.443],[-354.184,320.867],[-324.048,242.435],[-313.519,335.152]],"c":false}]},{"t":28,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-94.693,0.752],[20.997,10],[-103.054,-44.05],[23.959,30.206],[-67.501,-54.873]],"o":[[65.243,12.331],[-31.306,-42.065],[94.693,-0.752],[-29.565,-14.081],[57.175,24.439],[-20.142,-25.394],[33.103,26.911]],"v":[[-517.761,298.913],[-414.278,223.297],[-379.593,319.403],[-270.799,239.948],[-255.812,364.683],[-156.032,321.239],[-166.167,435.229]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.712110691445,0.623529411765,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":6,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-67.325,-6.902],[23.271,23],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[29.478,3.022],[-23.271,-23],[29.088,18]],"v":[[-470.076,282],[-416.033,215.819],[-409.167,299.441],[-365.418,227.443],[-349.479,321.339],[-319.882,236.548],[-306.177,336.775]],"c":false}]},{"t":28,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-93.856,-12.583],[20.997,10],[-104.617,-40.197],[30.943,23],[-74.843,-34.831]],"o":[[65.243,12.331],[-31.306,-42.065],[98.686,13.231],[-29.565,-14.081],[59.299,22.784],[-30.943,-23],[38.678,18]],"v":[[-518.307,300.373],[-407.037,226.188],[-382.305,320.136],[-268.689,242.281],[-255.659,368.013],[-158.042,324.193],[-159.288,431.927]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.253979222915,0.176470573276,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,3]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.343],"y":[0]},"t":18.691,"s":[0]},{"t":42.76953125,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":13.846,"s":[100]},{"t":35,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":6,"op":42,"st":-64,"bm":0},{"ddd":0,"ind":97,"ty":4,"nm":"ZVEZDA 17","parent":98,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[79.997]},{"t":46,"s":[123.151]}]},"p":{"a":0,"k":[-5.578,204.735,0]},"a":{"a":0,"k":[159.035,247.474,0]},"s":{"a":0,"k":[-100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.496,1.001],[0.851,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[2.536,1.328],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[-6.828,4.374],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-23.297,-38.098],[-13.264,-34.39],[-5.37,-33.359],[6.895,-32.03],[27.167,-31.071],[37.235,-30.065],[74.802,-26.048],[84.923,-18.579],[78.814,-10.274],[49.004,22.98],[44.69,25.004],[31.794,31.897],[22.3,39.386],[16.244,42.472],[7.153,53.903],[5.004,52.703],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-71.861,-19.71],[-73.324,-36.902],[-64.299,-40.186],[-29.803,-37.024]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-31.265,-39.964],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[33.761,-42.739],[41.528,-37.112],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[59.679,28.115],[58.039,32.778],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.629,71.671],[4.48,70.472],[-3.001,70.325],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-53.78,50.738],[-38.571,29.576],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-47.904,13.215],[-67.218,7.67],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-37.052,-35.884]],"c":true}]},{"t":63,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-26.042,-33.03],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[27.96,-33.999],[35.727,-28.372],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[49.004,22.98],[47.364,27.642],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.728,62.319],[4.579,61.12],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-31.829,-28.951]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411824544,0.509803921569,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"path-3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152.417,251.468]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.626,-0.89],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.589,-1.651]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-3.6,7.583],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[67.906,16.382],[72.98,14.81],[74.552,19.884],[20.684,12.393],[7.153,13.723],[-31.004,10.16],[-35.227,6.937],[-32.004,2.715],[6.153,6.277],[14.038,8.892]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.938,-2.863],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.843,3.379]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-5.192,6.423],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[32.94,-29.073],[38.014,-30.645],[39.586,-25.571],[15.462,5.46],[-0.092,16.634],[-34.251,28.693],[-38.474,25.47],[-35.251,21.248],[-1.092,9.189],[8.815,1.958]],"c":true}]},{"t":63,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.626,-0.89],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.304,5.327]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-3.6,7.583],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[32.94,-29.073],[38.014,-30.645],[39.586,-25.571],[20.684,12.393],[5.131,23.568],[-34.251,28.693],[-38.474,25.47],[-35.251,21.248],[4.131,16.122],[14.038,8.892]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,1,1,1,1,1,1]}},"s":{"a":0,"k":[-38464.41,8209.829]},"e":{"a":0,"k":[139.409,46.805]},"t":1,"nm":"Gradient Fill 238","hd":false},{"ty":"tr","p":{"a":0,"k":[116.591,209.195]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[6.126,0.871],[4.723,0.291],[8.562,2.243],[7.789,0.886],[6.577,2.19],[3.256,-0.255],[11.429,-1.234],[-4.137,-8.666],[-2.265,-3.132]],"o":[[10.354,-1.081],[19.114,-5.218],[-6.065,-0.767],[-2.385,-0.339],[-11.668,-0.718],[-7.106,-1.861],[-13.133,-1.493],[-1.881,-0.626],[-7.646,0.599],[-7.776,0.839],[4.05,8.484],[3.108,4.297]],"v":[[-47.931,39.762],[-10.146,32.923],[53.343,2.68],[29.16,-0.287],[20.317,-2.776],[0.428,-3.862],[-12.304,-5.288],[-30.061,-10.225],[-36.282,-8.678],[-71.238,-12.047],[-78.565,8.327],[-67.28,34.212]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[5.476,1.955],[2.542,3.137],[9.482,11.983],[4.713,-6.264],[5.609,-7.304],[3.053,-1.16],[10.985,-3.924],[-4.775,-8.331],[-4.196,-3.323]],"o":[[10.354,-1.081],[19.114,-5.218],[-7.349,-1.852],[-2.269,-0.81],[-6.613,-8.163],[-4.558,-5.76],[-12.706,16.888],[-1.208,1.573],[-7.992,3.036],[-7.365,2.631],[4.548,7.934],[4.158,3.292]],"v":[[-54.481,41.273],[-10.146,32.923],[55.718,-0.802],[34.961,-9.026],[27.134,-14.667],[3.359,-43.56],[-13.016,-43.897],[-37.806,-12.314],[-43.62,-7.803],[-77.159,3.848],[-82.18,21.814],[-73.83,35.723]],"c":true}]},{"t":63,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[6.126,0.871],[1.659,3.681],[5.632,12.473],[3.521,-7.004],[4.842,-9.197],[3.256,-0.255],[11.429,-1.234],[-7.512,-5.982],[-4.196,-3.323]],"o":[[10.354,-1.081],[19.114,-5.218],[-6.065,-0.767],[-2.385,-0.339],[-4.803,-10.658],[-3.023,-6.695],[-12.952,25.77],[-0.924,1.754],[-7.646,0.599],[-7.776,0.839],[8.638,6.879],[4.158,3.292]],"v":[[-47.931,39.762],[-10.146,32.923],[53.343,2.68],[29.16,-0.287],[21.333,-5.927],[3.359,-43.56],[-13.016,-43.897],[-32.584,-5.38],[-38.398,-0.869],[-77.159,3.848],[-82.18,21.814],[-67.28,34.212]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.937254905701,0.611764729023,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[159.035,223.399]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":47.507},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Oval","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[3.959,1.14],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[-7.452,3.404],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-23.076,-38.321],[-13.399,-34.788],[-5.637,-33.268],[7.786,-31.151],[27.167,-31.071],[37.145,-30.33],[74.445,-26.223],[84.923,-18.579],[78.637,-9.919],[49.004,22.98],[44.69,25.004],[31.794,31.897],[22.301,39.386],[16.244,42.472],[7.153,53.903],[5.004,52.703],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-71.861,-19.71],[-72.881,-37.348],[-63.988,-40.144],[-29.936,-36.979]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-31.265,-39.964],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[33.761,-42.739],[41.528,-37.112],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[59.679,28.115],[58.039,32.778],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.629,71.671],[4.48,70.472],[-3.001,70.325],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-53.78,50.738],[-38.571,29.576],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-47.904,13.215],[-67.218,7.67],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-37.052,-35.884]],"c":true}]},{"t":63,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-26.042,-33.03],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[27.96,-33.999],[35.727,-28.372],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[49.004,22.98],[47.364,27.642],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.728,62.319],[4.579,61.12],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-31.829,-28.951]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.851,0.318,0.5,1,0.743,0.159,1,1,0.635,0]}},"s":{"a":0,"k":[-0.56,-74.935]},"e":{"a":0,"k":[-17.356,124.783]},"t":1,"nm":"Gradient Fill 239","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"path-3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152.417,251.468]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path","bm":0,"hd":false}],"ip":38,"op":64,"st":12,"bm":0},{"ddd":0,"ind":98,"ty":4,"nm":"samolet 17","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.651],"y":[1.009]},"o":{"x":[0.279],"y":[0.002]},"t":5,"s":[-106.106]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.956],"y":[0]},"t":22,"s":[-147.838]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":38,"s":[-181.054]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":45,"s":[-105.641]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":53,"s":[-142.165]},{"t":64,"s":[-112.742]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":0.8},"o":{"x":0.335,"y":0.621},"t":5,"s":[212.816,323.001,0],"to":[-11.434,0.042,0],"ti":[21.887,-30.058,0]},{"i":{"x":0.652,"y":0.568},"o":{"x":0.442,"y":0.402},"t":19,"s":[160.478,356.131,0],"to":[-20.176,35.74,0],"ti":[-3.509,-9.643,0]},{"i":{"x":0.716,"y":0.991},"o":{"x":0.36,"y":1},"t":43,"s":[140.226,424.672,0],"to":[2.829,-11.782,0],"ti":[-0.521,0.932,0]},{"t":69,"s":[166.685,402.695,0]}]},"a":{"a":0,"k":[-10.418,212.192,0]},"s":{"a":1,"k":[{"i":{"x":[0.691,0.823,0.636],"y":[1,1,0.04]},"o":{"x":[0.529,0.529,0.286],"y":[0.002,0.01,0]},"t":5,"s":[25,25,100]},{"i":{"x":[0.663,0.663,0.684],"y":[0.869,1.033,2.916]},"o":{"x":[0.222,0.222,0.33],"y":[-0.017,0.008,1.956]},"t":13,"s":[72,72,100]},{"i":{"x":[0.807,0.807,0.8],"y":[1,1,1]},"o":{"x":[0.525,0.525,0.431],"y":[-0.035,0.039,-1.018]},"t":31,"s":[77.235,46.752,100]},{"i":{"x":[0.307,0.307,0.833],"y":[1,1,1]},"o":{"x":[0.562,0.562,0.167],"y":[0,0,0]},"t":38,"s":[59.016,59,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":43,"s":[85.023,85,100]},{"i":{"x":[0.307,0.307,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":51,"s":[64.017,64,100]},{"t":61,"s":[75.02,75,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.393,-4.407],[0,0],[-3.917,-0.355],[0,0],[-2.267,6.301],[0,0],[0,0],[-9.248,-1.26],[0,0],[2.344,11.762],[0,0]],"o":[[0,0],[-8.346,15.09],[0,0],[8.479,-0.974],[0,0],[0,0],[1.07,7.35],[0,0],[11.529,0.474],[0,0],[-2.748,-6.036]],"v":[[-37.231,-79.654],[-95.811,46.266],[-84.692,64.367],[-56.862,64.108],[-44.416,56.126],[-34.41,3.935],[-26.503,53.95],[-15.899,67.743],[5.973,69.607],[20.804,54.534],[-27,-78.057]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411824544,0.509803921569,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[19.918,205.246]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.165,-4.647],[17.006,-36.829],[0,0],[0,0],[0,0]],"o":[[-0.652,2.867],[-17.905,38.777],[-10.703,-6.521],[0,0],[1.222,-1.709]],"v":[[18.746,-79.466],[-12.064,-7.711],[-44.578,62.783],[-48.806,47.271],[9.685,-78.566]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,1,1,1,1,1,1]}},"s":{"a":0,"k":[-16.816,-0.358]},"e":{"a":0,"k":[16.607,-0.358]},"t":1,"nm":"Gradient Fill 240","hd":false},{"ty":"tr","p":{"a":0,"k":[-27.088,204.242]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[3.736,-9.47],[0,0],[-3.176,-6.11]],"o":[[-26.552,-33.921],[0,0],[3.204,-3.727],[0,0]],"v":[[19.947,13.146],[-46.178,26.645],[-12.883,-52.195],[-2.774,-51.026]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176474094,0.701960802078,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-4.447,177.777]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":47.507},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.802,-3.918],[0,0],[-4.644,-0.664],[0,0],[-3.345,6.577],[0,0],[0,0],[-8.8,-1.096],[0,0],[2.564,10.416],[0,0]],"o":[[0,0],[-8.603,15.142],[0,0],[9.302,-1.593],[0,0],[0,0],[0.712,7.089],[0,0],[11.198,0.879],[0,0],[-2.796,-6.209]],"v":[[-37.18,-79.654],[-95.863,46.318],[-84.795,64.368],[-56.451,64.108],[-44.314,56.023],[-34.855,4.054],[-26.4,53.847],[-15.899,67.743],[6.93,69.539],[20.376,55.416],[-27.261,-78.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.875,0.369,0.5,1,0.755,0.184,1,1,0.635,0]}},"s":{"a":0,"k":[-50.821,-10.362]},"e":{"a":0,"k":[39.444,112.755]},"t":1,"nm":"Gradient Fill 241","hd":false},{"ty":"tr","p":{"a":0,"k":[19.918,205.246]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false}],"ip":5,"op":38,"st":-27,"bm":0},{"ddd":0,"ind":99,"ty":4,"nm":"Spiral 31","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[0.939]},"o":{"x":[0.181],"y":[-0.002]},"t":20,"s":[332.421]},{"t":50,"s":[320.893]}]},"p":{"a":1,"k":[{"i":{"x":0.615,"y":0.162},"o":{"x":0.142,"y":1},"t":15,"s":[242.879,345.759,0],"to":[-26.812,24.117,0],"ti":[8.327,-26.351,0]},{"t":50,"s":[169.377,439.65,0]}]},"a":{"a":0,"k":[-357,289.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.126,0.126,0.833],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":15,"s":[0,0,100]},{"t":22.615234375,"s":[-27.773,27.773,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":15,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-65.187,-14.819],[22.107,24.605],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[17.402,3.956],[-13.269,-14.768],[29.088,18]],"v":[[-471.765,282],[-417.722,215.819],[-414.22,299.441],[-367.107,227.443],[-354.184,320.867],[-324.048,242.435],[-313.519,335.152]],"c":false}]},{"t":37,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-94.693,0.752],[20.997,10],[-103.054,-44.05],[23.959,30.206],[-67.501,-54.873]],"o":[[65.243,12.331],[-31.306,-42.065],[94.693,-0.752],[-29.565,-14.081],[57.175,24.439],[-20.142,-25.394],[33.103,26.911]],"v":[[-517.761,298.913],[-414.278,223.297],[-379.593,319.403],[-270.799,239.948],[-255.812,364.683],[-156.032,321.239],[-166.167,435.229]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.712110691445,0.623529411765,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":15,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-67.325,-6.902],[23.271,23],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[29.478,3.022],[-23.271,-23],[29.088,18]],"v":[[-470.076,282],[-416.033,215.819],[-409.167,299.441],[-365.418,227.443],[-349.479,321.339],[-319.882,236.548],[-306.177,336.775]],"c":false}]},{"t":37,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-93.856,-12.583],[20.997,10],[-104.617,-40.197],[30.943,23],[-74.843,-34.831]],"o":[[65.243,12.331],[-31.306,-42.065],[98.686,13.231],[-29.565,-14.081],[59.299,22.784],[-30.943,-23],[38.678,18]],"v":[[-518.307,300.373],[-407.037,226.188],[-382.305,320.136],[-268.689,242.281],[-255.659,368.013],[-158.042,324.193],[-159.288,431.927]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.253979222915,0.176470573276,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,3]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.343],"y":[0]},"t":27.691,"s":[0]},{"t":51.76953125,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":22.846,"s":[100]},{"t":44,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":15,"op":51,"st":-55,"bm":0},{"ddd":0,"ind":100,"ty":4,"nm":"Spiral 30","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[1.061]},"o":{"x":[0.181],"y":[0.002]},"t":10,"s":[-220.341]},{"t":40,"s":[-208.813]}]},"p":{"a":1,"k":[{"i":{"x":0.615,"y":0.375},"o":{"x":0.19,"y":1},"t":5,"s":[223.26,290.441,0],"to":[-43.434,21.137,0],"ti":[36.9,2.932,0]},{"t":40,"s":[69.714,334.399,0]}]},"a":{"a":0,"k":[-357,289.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.126,0.126,0.833],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":5,"s":[0,0,100]},{"t":12.615234375,"s":[37.2,37.2,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":5,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-65.187,-14.819],[22.107,24.605],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[17.402,3.956],[-13.269,-14.768],[29.088,18]],"v":[[-471.765,282],[-417.722,215.819],[-414.22,299.441],[-367.107,227.443],[-354.184,320.867],[-324.048,242.435],[-313.519,335.152]],"c":false}]},{"t":27,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-94.693,0.752],[20.997,10],[-103.054,-44.05],[23.959,30.206],[-67.501,-54.873]],"o":[[65.243,12.331],[-31.306,-42.065],[94.693,-0.752],[-29.565,-14.081],[57.175,24.439],[-20.142,-25.394],[33.103,26.911]],"v":[[-517.761,298.913],[-414.278,223.297],[-379.593,319.403],[-270.799,239.948],[-255.812,364.683],[-156.032,321.239],[-166.167,435.229]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.98006920908,0.435294087728,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":5,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-67.325,-6.902],[23.271,23],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[29.478,3.022],[-23.271,-23],[29.088,18]],"v":[[-470.076,282],[-416.033,215.819],[-409.167,299.441],[-365.418,227.443],[-349.479,321.339],[-319.882,236.548],[-306.177,336.775]],"c":false}]},{"t":27,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-93.856,-12.583],[20.997,10],[-104.617,-40.197],[30.943,23],[-74.843,-34.831]],"o":[[65.243,12.331],[-31.306,-42.065],[98.686,13.231],[-29.565,-14.081],[59.299,22.784],[-30.943,-23],[38.678,18]],"v":[[-518.307,300.373],[-407.037,226.188],[-382.305,320.136],[-268.689,242.281],[-255.659,368.013],[-158.042,324.193],[-159.288,431.927]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.687750902363,0.435294087728,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,3]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.343],"y":[0]},"t":17.691,"s":[0]},{"t":41.76953125,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":12.846,"s":[100]},{"t":34,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":5,"op":41,"st":-65,"bm":0},{"ddd":0,"ind":101,"ty":4,"nm":"konfetti 75","sr":1,"ks":{"r":{"a":0,"k":-979.416},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":20,"s":[240.569,319.015,0],"to":[21.681,29.212,0],"ti":[-81.297,-55.073,0]},{"t":54,"s":[302.186,467.373,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[181.876,159.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[-124.774,156.302,100]},{"t":54,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.887197337431,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":20,"op":55,"st":-131,"bm":0},{"ddd":0,"ind":102,"ty":4,"nm":"konfetti 74","sr":1,"ks":{"r":{"a":0,"k":-869.745},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":36,"s":[257.009,320.33,0],"to":[16.092,32.172,0],"ti":[6.986,-36.335,0]},{"t":70,"s":[209.208,454.401,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":36,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":43,"s":[197.825,173.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":56,"s":[-120.783,151.302,100]},{"t":70,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.972456748813,0.219607828178,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":36,"op":71,"st":-115,"bm":0},{"ddd":0,"ind":103,"ty":4,"nm":"konfetti 73","sr":1,"ks":{"r":{"a":0,"k":-967.84},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":20,"s":[235.473,324.934,0],"to":[-36.023,17.542,0],"ti":[40.442,-2.881,0]},{"t":54,"s":[66.6,407.294,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[164.788,144.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[-131.161,164.302,100]},{"t":54,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.932318354588,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":20,"op":55,"st":-131,"bm":0},{"ddd":0,"ind":104,"ty":4,"nm":"konfetti 72","sr":1,"ks":{"r":{"a":0,"k":-967.84},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":26,"s":[235.473,324.934,0],"to":[-36.023,17.542,0],"ti":[16.193,-23.676,0]},{"t":60,"s":[186.365,435.484,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":26,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":33,"s":[170.484,149.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":46,"s":[-138.345,173.302,100]},{"t":60,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.556309060489,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":26,"op":61,"st":-125,"bm":0},{"ddd":0,"ind":105,"ty":4,"nm":"konfetti 71","sr":1,"ks":{"r":{"a":0,"k":-869.745},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":20,"s":[196.18,265.587,0],"to":[-36.023,17.542,0],"ti":[45.621,6.901,0]},{"t":54,"s":[44.236,257.938,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[176.18,154.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[-141.538,177.302,100]},{"t":54,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":20,"op":55,"st":-131,"bm":0},{"ddd":0,"ind":106,"ty":4,"nm":"konfetti 70","sr":1,"ks":{"r":{"a":0,"k":-523.33},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":22,"s":[205.058,294.521,0],"to":[-8.404,25.103,0],"ti":[45.95,2.791,0]},{"t":56,"s":[98.819,317.778,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":22,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[177.319,155.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42,"s":[-156.403,197.099,100]},{"t":56,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070726641487,0.423678050322,0.858823529412,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.64655121448,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":22,"op":57,"st":-129,"bm":0},{"ddd":0,"ind":107,"ty":4,"nm":"konfetti 69","sr":1,"ks":{"r":{"a":0,"k":-979.416},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":5,"s":[240.569,319.015,0],"to":[21.681,29.212,0],"ti":[-81.297,-55.073,0]},{"t":39,"s":[302.186,467.373,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[167.066,146.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-164.689,206.302,100]},{"t":39,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.827035582299,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":40,"st":-146,"bm":0},{"ddd":0,"ind":108,"ty":4,"nm":"konfetti 68","sr":1,"ks":{"r":{"a":0,"k":-768.836},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":12,"s":[257.009,320.33,0],"to":[16.092,32.172,0],"ti":[6.986,-36.335,0]},{"t":46,"s":[252.208,453.401,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[164.788,144.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":32,"s":[-127.967,160.302,100]},{"t":46,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.751834106445,0.360784283806,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":12,"op":47,"st":-139,"bm":0},{"ddd":0,"ind":109,"ty":4,"nm":"konfetti 67","sr":1,"ks":{"r":{"a":0,"k":-967.84},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":5,"s":[235.473,324.934,0],"to":[-36.023,17.542,0],"ti":[40.442,-2.881,0]},{"t":39,"s":[66.6,407.294,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[157.953,138.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-127.967,160.302,100]},{"t":39,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.902237477022,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":40,"st":-146,"bm":0},{"ddd":0,"ind":110,"ty":4,"nm":"konfetti 66","sr":1,"ks":{"r":{"a":0,"k":-967.84},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":11,"s":[235.473,324.934,0],"to":[-36.023,17.542,0],"ti":[16.193,-23.676,0]},{"t":45,"s":[76.365,477.484,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":11,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":18,"s":[180.737,158.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":31,"s":[-140.74,176.302,100]},{"t":45,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":11,"op":46,"st":-140,"bm":0},{"ddd":0,"ind":111,"ty":4,"nm":"konfetti 65","sr":1,"ks":{"r":{"a":0,"k":-869.745},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":5,"s":[196.18,265.587,0],"to":[-36.023,17.542,0],"ti":[45.621,6.901,0]},{"t":39,"s":[44.236,257.938,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-120.783,151.302,100]},{"t":39,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":40,"st":-146,"bm":0},{"ddd":0,"ind":112,"ty":4,"nm":"konfetti 64","sr":1,"ks":{"r":{"a":0,"k":-523.33},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":7,"s":[205.058,294.521,0],"to":[-8.404,25.103,0],"ti":[45.95,2.791,0]},{"t":41,"s":[98.819,317.778,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":14,"s":[149.978,131.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[-151.642,191.099,100]},{"t":41,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070726641487,0.423678050322,0.858823529412,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.64655121448,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":7,"op":42,"st":-144,"bm":0},{"ddd":0,"ind":113,"ty":4,"nm":"konfetti 63","sr":1,"ks":{"r":{"a":0,"k":-601.021},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":5,"s":[241.556,324.934,0],"to":[-8.404,25.103,0],"ti":[-14.879,-45.869,0]},{"t":39,"s":[175.942,494.834,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[171.623,150.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-108.792,137.099,100]},{"t":39,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.977439491422,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":40,"st":-146,"bm":0},{"ddd":0,"ind":114,"ty":4,"nm":"konfetti 62","sr":1,"ks":{"r":{"a":0,"k":-663.719},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":9,"s":[201.113,295.179,0],"to":[-36.023,17.542,0],"ti":[69.786,-36.666,0]},{"t":43,"s":[161.541,438.609,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":16,"s":[154.535,135.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[-165.926,209.099,100]},{"t":43,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0.170519017238,0.25623626709,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.435986268287,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":9,"op":44,"st":-142,"bm":0},{"ddd":0,"ind":115,"ty":4,"nm":"konfetti 61","sr":1,"ks":{"r":{"a":0,"k":-601.021},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":5,"s":[188.113,329.179,0],"to":[-36.023,17.542,0],"ti":[69.786,-36.666,0]},{"t":39,"s":[33.568,416.07,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[172.762,151.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-178.622,225.099,100]},{"t":39,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0.170519017238,0.25623626709,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.435986268287,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":40,"st":-146,"bm":0},{"ddd":0,"ind":116,"ty":4,"nm":"ZVEZDA 16","parent":117,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[-71.42]},{"t":46,"s":[2.67]}]},"p":{"a":0,"k":[-20.331,198.348,0]},"a":{"a":0,"k":[159.035,247.474,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.496,1.001],[0.851,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[2.536,1.328],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[-6.828,4.374],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-23.297,-38.098],[-13.264,-34.39],[-5.37,-33.359],[6.895,-32.03],[27.167,-31.071],[37.235,-30.065],[74.802,-26.048],[84.923,-18.579],[78.814,-10.274],[49.004,22.98],[44.69,25.004],[31.794,31.897],[22.3,39.386],[16.244,42.472],[7.153,53.903],[5.004,52.703],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-71.861,-19.71],[-73.324,-36.902],[-64.299,-40.186],[-29.803,-37.024]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-31.265,-39.964],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[33.761,-42.739],[41.528,-37.112],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[59.679,28.115],[58.039,32.778],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.629,71.671],[4.48,70.472],[-3.001,70.325],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-53.78,50.738],[-38.571,29.576],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-47.904,13.215],[-67.218,7.67],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-37.052,-35.884]],"c":true}]},{"t":63,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-26.042,-33.03],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[27.96,-33.999],[35.727,-28.372],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[49.004,22.98],[47.364,27.642],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.728,62.319],[4.579,61.12],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-31.829,-28.951]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411824544,0.509803921569,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"path-3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152.417,251.468]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.626,-0.89],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.589,-1.651]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-3.6,7.583],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[67.906,16.382],[72.98,14.81],[74.552,19.884],[20.684,12.393],[7.153,13.723],[-31.004,10.16],[-35.227,6.937],[-32.004,2.715],[6.153,6.277],[14.038,8.892]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.938,-2.863],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.843,3.379]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-5.192,6.423],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[32.94,-29.073],[38.014,-30.645],[39.586,-25.571],[15.462,5.46],[-0.092,16.634],[-34.251,28.693],[-38.474,25.47],[-35.251,21.248],[-1.092,9.189],[8.815,1.958]],"c":true}]},{"t":63,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.626,-0.89],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.304,5.327]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-3.6,7.583],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[32.94,-29.073],[38.014,-30.645],[39.586,-25.571],[20.684,12.393],[5.131,23.568],[-34.251,28.693],[-38.474,25.47],[-35.251,21.248],[4.131,16.122],[14.038,8.892]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,1,1,1,1,1,1]}},"s":{"a":0,"k":[-38464.41,8209.829]},"e":{"a":0,"k":[139.409,46.805]},"t":1,"nm":"Gradient Fill 242","hd":false},{"ty":"tr","p":{"a":0,"k":[116.591,209.195]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[6.126,0.871],[4.723,0.291],[8.562,2.243],[7.789,0.886],[6.577,2.19],[3.256,-0.255],[11.429,-1.234],[-4.137,-8.666],[-2.265,-3.132]],"o":[[10.354,-1.081],[19.114,-5.218],[-6.065,-0.767],[-2.385,-0.339],[-11.668,-0.718],[-7.106,-1.861],[-13.133,-1.493],[-1.881,-0.626],[-7.646,0.599],[-7.776,0.839],[4.05,8.484],[3.108,4.297]],"v":[[-47.931,39.762],[-10.146,32.923],[53.343,2.68],[29.16,-0.287],[20.317,-2.776],[0.428,-3.862],[-12.304,-5.288],[-30.061,-10.225],[-36.282,-8.678],[-71.238,-12.047],[-78.565,8.327],[-67.28,34.212]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[5.476,1.955],[2.542,3.137],[9.482,11.983],[4.713,-6.264],[5.609,-7.304],[3.053,-1.16],[10.985,-3.924],[-4.775,-8.331],[-4.196,-3.323]],"o":[[10.354,-1.081],[19.114,-5.218],[-7.349,-1.852],[-2.269,-0.81],[-6.613,-8.163],[-4.558,-5.76],[-12.706,16.888],[-1.208,1.573],[-7.992,3.036],[-7.365,2.631],[4.548,7.934],[4.158,3.292]],"v":[[-54.481,41.273],[-10.146,32.923],[55.718,-0.802],[34.961,-9.026],[27.134,-14.667],[3.359,-43.56],[-13.016,-43.897],[-37.806,-12.314],[-43.62,-7.803],[-77.159,3.848],[-82.18,21.814],[-73.83,35.723]],"c":true}]},{"t":63,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[6.126,0.871],[1.659,3.681],[5.632,12.473],[3.521,-7.004],[4.842,-9.197],[3.256,-0.255],[11.429,-1.234],[-7.512,-5.982],[-4.196,-3.323]],"o":[[10.354,-1.081],[19.114,-5.218],[-6.065,-0.767],[-2.385,-0.339],[-4.803,-10.658],[-3.023,-6.695],[-12.952,25.77],[-0.924,1.754],[-7.646,0.599],[-7.776,0.839],[8.638,6.879],[4.158,3.292]],"v":[[-47.931,39.762],[-10.146,32.923],[53.343,2.68],[29.16,-0.287],[21.333,-5.927],[3.359,-43.56],[-13.016,-43.897],[-32.584,-5.38],[-38.398,-0.869],[-77.159,3.848],[-82.18,21.814],[-67.28,34.212]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.937254905701,0.611764729023,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[159.035,223.399]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":47.507},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Oval","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[3.959,1.14],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[-7.452,3.404],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-23.076,-38.321],[-13.399,-34.788],[-5.637,-33.268],[7.786,-31.151],[27.167,-31.071],[37.145,-30.33],[74.445,-26.223],[84.923,-18.579],[78.637,-9.919],[49.004,22.98],[44.69,25.004],[31.794,31.897],[22.301,39.386],[16.244,42.472],[7.153,53.903],[5.004,52.703],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-71.861,-19.71],[-72.881,-37.348],[-63.988,-40.144],[-29.936,-36.979]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-31.265,-39.964],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[33.761,-42.739],[41.528,-37.112],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[59.679,28.115],[58.039,32.778],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.629,71.671],[4.48,70.472],[-3.001,70.325],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-53.78,50.738],[-38.571,29.576],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-47.904,13.215],[-67.218,7.67],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-37.052,-35.884]],"c":true}]},{"t":63,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-26.042,-33.03],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[27.96,-33.999],[35.727,-28.372],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[49.004,22.98],[47.364,27.642],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.728,62.319],[4.579,61.12],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-31.829,-28.951]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.851,0.318,0.5,1,0.743,0.159,1,1,0.635,0]}},"s":{"a":0,"k":[-0.56,-74.935]},"e":{"a":0,"k":[-17.356,124.783]},"t":1,"nm":"Gradient Fill 243","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"path-3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152.417,251.468]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path","bm":0,"hd":false}],"ip":38,"op":64,"st":12,"bm":0},{"ddd":0,"ind":117,"ty":4,"nm":"samolet 16","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.638],"y":[0.727]},"o":{"x":[0.295],"y":[0.002]},"t":5,"s":[26.746]},{"i":{"x":[0.668],"y":[1.064]},"o":{"x":[0.326],"y":[2.93]},"t":13,"s":[-3.167]},{"i":{"x":[0.813],"y":[1]},"o":{"x":[0.357],"y":[-0.004]},"t":22,"s":[-5.988]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":38,"s":[-6.579]},{"i":{"x":[0.805],"y":[1]},"o":{"x":[0.157],"y":[0]},"t":45,"s":[33.574]},{"i":{"x":[0.794],"y":[1]},"o":{"x":[0.157],"y":[0]},"t":53,"s":[-19.589]},{"t":64,"s":[3.194]}]},"p":{"a":1,"k":[{"i":{"x":0.651,"y":0.917},"o":{"x":0.317,"y":0.471},"t":5,"s":[262.183,178.677,0],"to":[-0.59,-13.663,0],"ti":[2.172,34.625,0]},{"i":{"x":0.801,"y":0},"o":{"x":0.317,"y":0.575},"t":19,"s":[259.773,97.912,0],"to":[-1.196,-23.906,0],"ti":[4.456,6.509,0]},{"i":{"x":0.757,"y":1},"o":{"x":0.169,"y":1},"t":43,"s":[257.835,81.336,0],"to":[0.054,14.269,0],"ti":[-0.214,-1.045,0]},{"t":69,"s":[267.316,91.362,0]}]},"a":{"a":0,"k":[-10.418,212.192,0]},"s":{"a":1,"k":[{"i":{"x":[0.862,0.862,0.636],"y":[0.999,1.001,0.04]},"o":{"x":[0.529,0.529,0.286],"y":[0,0.006,0]},"t":5,"s":[25,25,100]},{"i":{"x":[0.663,0.663,0.684],"y":[1.144,0.958,2.916]},"o":{"x":[0.222,0.222,0.33],"y":[-0.02,0.002,1.956]},"t":13,"s":[72,72,100]},{"i":{"x":[0.807,0.807,0.8],"y":[1,1,1]},"o":{"x":[0.43,0.43,0.431],"y":[0.012,-0.029,-1.018]},"t":31,"s":[77.235,46.752,100]},{"i":{"x":[0.307,0.307,0.833],"y":[1,1,1]},"o":{"x":[0.562,0.562,0.167],"y":[0,0,0]},"t":38,"s":[59.016,59,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":43,"s":[85.023,85,100]},{"i":{"x":[0.798,0.798,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":51,"s":[64.017,64,100]},{"t":61,"s":[84.022,84,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.393,-4.407],[0,0],[-3.917,-0.355],[0,0],[-2.267,6.301],[0,0],[0,0],[-9.248,-1.26],[0,0],[2.344,11.762],[0,0]],"o":[[0,0],[-8.346,15.09],[0,0],[8.479,-0.974],[0,0],[0,0],[1.07,7.35],[0,0],[11.529,0.474],[0,0],[-2.748,-6.036]],"v":[[-37.231,-79.654],[-95.811,46.266],[-84.692,64.367],[-56.862,64.108],[-44.416,56.126],[-34.41,3.935],[-26.503,53.95],[-15.899,67.743],[5.973,69.607],[20.804,54.534],[-27,-78.057]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411824544,0.509803921569,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[19.918,205.246]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.165,-4.647],[17.006,-36.829],[0,0],[0,0],[0,0]],"o":[[-0.652,2.867],[-17.905,38.777],[-10.703,-6.521],[0,0],[1.222,-1.709]],"v":[[18.746,-79.466],[-12.064,-7.711],[-44.578,62.783],[-48.806,47.271],[9.685,-78.566]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,1,1,1,1,1,1]}},"s":{"a":0,"k":[-16.816,-0.358]},"e":{"a":0,"k":[16.607,-0.358]},"t":1,"nm":"Gradient Fill 244","hd":false},{"ty":"tr","p":{"a":0,"k":[-27.088,204.242]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[3.736,-9.47],[0,0],[-3.176,-6.11]],"o":[[-26.552,-33.921],[0,0],[3.204,-3.727],[0,0]],"v":[[19.947,13.146],[-46.178,26.645],[-12.883,-52.195],[-2.774,-51.026]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176474094,0.701960802078,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-4.447,177.777]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":47.507},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.802,-3.918],[0,0],[-4.644,-0.664],[0,0],[-3.345,6.577],[0,0],[0,0],[-8.8,-1.096],[0,0],[2.564,10.416],[0,0]],"o":[[0,0],[-8.603,15.142],[0,0],[9.302,-1.593],[0,0],[0,0],[0.712,7.089],[0,0],[11.198,0.879],[0,0],[-2.796,-6.209]],"v":[[-37.18,-79.654],[-95.863,46.318],[-84.795,64.368],[-56.451,64.108],[-44.314,56.023],[-34.855,4.054],[-26.4,53.847],[-15.899,67.743],[6.93,69.539],[20.376,55.416],[-27.261,-78.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.875,0.369,0.5,1,0.755,0.184,1,1,0.635,0]}},"s":{"a":0,"k":[-50.821,-10.362]},"e":{"a":0,"k":[39.444,112.755]},"t":1,"nm":"Gradient Fill 245","hd":false},{"ty":"tr","p":{"a":0,"k":[19.918,205.246]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false}],"ip":5,"op":38,"st":-27,"bm":0},{"ddd":0,"ind":118,"ty":4,"nm":"Spiral 29","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[0.939]},"o":{"x":[0.181],"y":[-0.002]},"t":10,"s":[471.636]},{"t":40,"s":[460.108]}]},"p":{"a":1,"k":[{"i":{"x":0.615,"y":0.162},"o":{"x":0.142,"y":1},"t":5,"s":[207.302,179.467,0],"to":[4.548,-35.775,0],"ti":[10.908,25.392,0]},{"t":40,"s":[201.623,60.362,0]}]},"a":{"a":0,"k":[-357,289.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.126,0.126,0.833],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":5,"s":[0,0,100]},{"t":12.615234375,"s":[-27.773,27.773,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":5,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-65.187,-14.819],[22.107,24.605],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[17.402,3.956],[-13.269,-14.768],[29.088,18]],"v":[[-471.765,282],[-417.722,215.819],[-414.22,299.441],[-367.107,227.443],[-354.184,320.867],[-324.048,242.435],[-313.519,335.152]],"c":false}]},{"t":27,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-94.693,0.752],[20.997,10],[-103.054,-44.05],[23.959,30.206],[-67.501,-54.873]],"o":[[65.243,12.331],[-31.306,-42.065],[94.693,-0.752],[-29.565,-14.081],[57.175,24.439],[-20.142,-25.394],[33.103,26.911]],"v":[[-517.761,298.913],[-414.278,223.297],[-379.593,319.403],[-270.799,239.948],[-255.812,364.683],[-156.032,321.239],[-166.167,435.229]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.712110691445,0.623529411765,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":5,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-67.325,-6.902],[23.271,23],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[29.478,3.022],[-23.271,-23],[29.088,18]],"v":[[-470.076,282],[-416.033,215.819],[-409.167,299.441],[-365.418,227.443],[-349.479,321.339],[-319.882,236.548],[-306.177,336.775]],"c":false}]},{"t":27,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-93.856,-12.583],[20.997,10],[-104.617,-40.197],[30.943,23],[-74.843,-34.831]],"o":[[65.243,12.331],[-31.306,-42.065],[98.686,13.231],[-29.565,-14.081],[59.299,22.784],[-30.943,-23],[38.678,18]],"v":[[-518.307,300.373],[-407.037,226.188],[-382.305,320.136],[-268.689,242.281],[-255.659,368.013],[-158.042,324.193],[-159.288,431.927]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.253979222915,0.176470573276,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,3]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.343],"y":[0]},"t":17.691,"s":[0]},{"t":41.76953125,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":12.846,"s":[100]},{"t":34,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":5,"op":41,"st":-65,"bm":0},{"ddd":0,"ind":119,"ty":4,"nm":"Spiral 28","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[1.061]},"o":{"x":[0.181],"y":[0.002]},"t":10,"s":[-81.126]},{"t":40,"s":[-69.598]}]},"p":{"a":1,"k":[{"i":{"x":0.615,"y":0.375},"o":{"x":0.19,"y":1},"t":5,"s":[258.292,208.536,0],"to":[19.079,-44.376,0],"ti":[-29.854,21.884,0]},{"t":40,"s":[345.838,74.953,0]}]},"a":{"a":0,"k":[-357,289.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.126,0.126,0.833],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":5,"s":[0,0,100]},{"t":12.615234375,"s":[37.2,37.2,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":5,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-65.187,-14.819],[22.107,24.605],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[17.402,3.956],[-13.269,-14.768],[29.088,18]],"v":[[-471.765,282],[-417.722,215.819],[-414.22,299.441],[-367.107,227.443],[-354.184,320.867],[-324.048,242.435],[-313.519,335.152]],"c":false}]},{"t":27,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-94.693,0.752],[20.997,10],[-103.054,-44.05],[23.959,30.206],[-67.501,-54.873]],"o":[[65.243,12.331],[-31.306,-42.065],[94.693,-0.752],[-29.565,-14.081],[57.175,24.439],[-20.142,-25.394],[33.103,26.911]],"v":[[-517.761,298.913],[-414.278,223.297],[-379.593,319.403],[-270.799,239.948],[-255.812,364.683],[-156.032,321.239],[-166.167,435.229]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.014825066398,0.945098039216,0.05860266218,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":5,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-67.325,-6.902],[23.271,23],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[29.478,3.022],[-23.271,-23],[29.088,18]],"v":[[-470.076,282],[-416.033,215.819],[-409.167,299.441],[-365.418,227.443],[-349.479,321.339],[-319.882,236.548],[-306.177,336.775]],"c":false}]},{"t":27,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-93.856,-12.583],[20.997,10],[-104.617,-40.197],[30.943,23],[-74.843,-34.831]],"o":[[65.243,12.331],[-31.306,-42.065],[98.686,13.231],[-29.565,-14.081],[59.299,22.784],[-30.943,-23],[38.678,18]],"v":[[-518.307,300.373],[-407.037,226.188],[-382.305,320.136],[-268.689,242.281],[-255.659,368.013],[-158.042,324.193],[-159.288,431.927]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.686274509804,0.032295301849,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,3]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.343],"y":[0]},"t":17.691,"s":[0]},{"t":41.76953125,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":12.846,"s":[100]},{"t":34,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":5,"op":41,"st":-65,"bm":0},{"ddd":0,"ind":120,"ty":4,"nm":"konfetti 60","sr":1,"ks":{"r":{"a":0,"k":-840.201},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":20,"s":[226.52,198.207,0],"to":[-35.498,-7.956,0],"ti":[97.53,-11.406,0]},{"t":54,"s":[82.956,126.125,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[157.953,138.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[-123.976,155.302,100]},{"t":54,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.827035582299,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":20,"op":55,"st":-131,"bm":0},{"ddd":0,"ind":121,"ty":4,"nm":"konfetti 59","sr":1,"ks":{"r":{"a":0,"k":-730.53},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":36,"s":[213.214,207.951,0],"to":[-33.199,-13.848,0],"ti":[18.445,32.075,0]},{"t":70,"s":[129.924,104.057,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":36,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":43,"s":[169.345,148.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":56,"s":[-142.337,178.302,100]},{"t":70,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.781914505304,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":36,"op":71,"st":-115,"bm":0},{"ddd":0,"ind":122,"ty":4,"nm":"konfetti 58","sr":1,"ks":{"r":{"a":0,"k":-828.625},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":20,"s":[226.513,190.397,0],"to":[15.817,-36.814,0],"ti":[-28.74,28.599,0]},{"t":54,"s":[300.579,17.725,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[-143.933,180.302,100]},{"t":54,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.932318354588,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":20,"op":55,"st":-131,"bm":0},{"ddd":0,"ind":123,"ty":4,"nm":"konfetti 57","sr":1,"ks":{"r":{"a":0,"k":-828.625},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":26,"s":[226.513,190.397,0],"to":[15.817,-36.814,0],"ti":[3.205,28.504,0]},{"t":60,"s":[191.482,74.614,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":26,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":33,"s":[168.206,147.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":46,"s":[-123.976,155.302,100]},{"t":60,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.556309060489,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":26,"op":61,"st":-125,"bm":0},{"ddd":0,"ind":124,"ty":4,"nm":"konfetti 56","sr":1,"ks":{"r":{"a":0,"k":-730.53},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":20,"s":[295.031,209.665,0],"to":[15.817,-36.814,0],"ti":[-39.051,24.576,0]},{"t":54,"s":[415.074,116.203,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[176.18,154.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[-164.689,206.302,100]},{"t":54,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.887197337431,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":20,"op":55,"st":-131,"bm":0},{"ddd":0,"ind":125,"ty":4,"nm":"konfetti 55","sr":1,"ks":{"r":{"a":0,"k":-384.115},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":22,"s":[269.408,164.557,0],"to":[-10.035,-24.497,0],"ti":[-36.615,27.902,0]},{"t":56,"s":[334.658,106.55,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":22,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":42,"s":[-160.371,202.099,100]},{"t":56,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070726641487,0.423678050322,0.858823529412,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.64655121448,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":22,"op":57,"st":-129,"bm":0},{"ddd":0,"ind":126,"ty":4,"nm":"konfetti 54","sr":1,"ks":{"r":{"a":0,"k":-840.201},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":5,"s":[226.52,198.207,0],"to":[-35.498,-7.956,0],"ti":[97.53,-11.406,0]},{"t":39,"s":[82.956,126.125,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[159.092,139.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-150.32,188.302,100]},{"t":39,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.827035582299,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":40,"st":-146,"bm":0},{"ddd":0,"ind":127,"ty":4,"nm":"konfetti 53","sr":1,"ks":{"r":{"a":0,"k":-730.53},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":12,"s":[213.214,207.951,0],"to":[-33.199,-13.848,0],"ti":[18.445,32.075,0]},{"t":46,"s":[129.924,104.057,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":19,"s":[176.18,154.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":32,"s":[-139.942,175.302,100]},{"t":46,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":12,"op":47,"st":-139,"bm":0},{"ddd":0,"ind":128,"ty":4,"nm":"konfetti 52","sr":1,"ks":{"r":{"a":0,"k":-828.625},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":5,"s":[226.513,190.397,0],"to":[15.817,-36.814,0],"ti":[-28.74,28.599,0]},{"t":39,"s":[300.579,17.725,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[181.876,159.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-146.328,183.302,100]},{"t":39,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.766874246036,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":40,"st":-146,"bm":0},{"ddd":0,"ind":129,"ty":4,"nm":"konfetti 51","sr":1,"ks":{"r":{"a":0,"k":-828.625},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":11,"s":[226.513,190.397,0],"to":[15.817,-36.814,0],"ti":[3.205,28.504,0]},{"t":45,"s":[191.482,74.614,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":11,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":18,"s":[211.495,185.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":31,"s":[-164.689,206.302,100]},{"t":45,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":11,"op":46,"st":-140,"bm":0},{"ddd":0,"ind":130,"ty":4,"nm":"konfetti 50","sr":1,"ks":{"r":{"a":0,"k":-730.53},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":5,"s":[295.031,209.665,0],"to":[15.817,-36.814,0],"ti":[-39.051,24.576,0]},{"t":39,"s":[415.074,116.203,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[157.953,138.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-164.689,206.302,100]},{"t":39,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":40,"st":-146,"bm":0},{"ddd":0,"ind":131,"ty":4,"nm":"konfetti 49","sr":1,"ks":{"r":{"a":0,"k":-384.115},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":7,"s":[269.408,193.557,0],"to":[-10.035,-24.497,0],"ti":[-36.615,27.902,0]},{"t":41,"s":[334.658,106.55,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":14,"s":[170.484,149.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[-142.913,180.099,100]},{"t":41,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070726641487,0.423678050322,0.858823529412,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.64655121448,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":7,"op":42,"st":-144,"bm":0},{"ddd":0,"ind":132,"ty":4,"nm":"konfetti 48","sr":1,"ks":{"r":{"a":0,"k":-343.43},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":5,"s":[221.907,194.371,0],"to":[-10.035,-24.497,0],"ti":[41.229,25.011,0]},{"t":39,"s":[160.524,25.129,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[143.143,125.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-181.003,228.099,100]},{"t":39,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.962399052639,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":40,"st":-146,"bm":0},{"ddd":0,"ind":133,"ty":4,"nm":"konfetti 47","sr":1,"ks":{"r":{"a":0,"k":-524.504},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":9,"s":[271.966,190.482,0],"to":[15.817,-36.814,0],"ti":[-28.889,73.348,0]},{"t":43,"s":[208.237,56.032,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":16,"s":[186.433,163.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":29,"s":[-174.655,220.099,100]},{"t":43,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0.170519017238,0.25623626709,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.435986268287,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":9,"op":44,"st":-142,"bm":0},{"ddd":0,"ind":134,"ty":4,"nm":"konfetti 46","sr":1,"ks":{"r":{"a":0,"k":-461.806},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":5,"s":[271.966,190.482,0],"to":[15.817,-36.814,0],"ti":[-28.889,73.348,0]},{"t":39,"s":[357.907,50.447,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":12,"s":[181.876,159.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":25,"s":[-174.655,220.099,100]},{"t":39,"s":[-2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0.170519017238,0.25623626709,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.435986268287,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":5,"op":40,"st":-146,"bm":0},{"ddd":0,"ind":135,"ty":4,"nm":"ZVEZDA 13","parent":136,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[79.997]},{"t":46,"s":[123.151]}]},"p":{"a":0,"k":[-5.578,204.735,0]},"a":{"a":0,"k":[159.035,247.474,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[2.285,-4.802],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[0.326,0.656],[-0.04,0.272],[0,0],[6.166,1.812],[0,0],[0.496,1.001],[0.851,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[2.536,1.328],[0,0],[5.221,0.665],[-1.944,4.085],[0,0],[-1.236,1.211],[0,0],[-1.257,7.912],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-0.649,0.33],[-0.122,-0.245],[0,0],[-3.398,-3.594],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-23.022,-27.622],[-12.989,-23.914],[-5.233,-28.121],[9.422,-29.733],[63.935,-40.256],[74.003,-39.25],[80.271,-33.077],[74.627,0.396],[69.484,6.312],[15.868,6.066],[60.868,26.43],[64.792,35.761],[55.711,74.587],[49.655,77.673],[7.888,50.594],[5.74,49.395],[-12.093,39.836],[-16.018,36.993],[-17.784,36.402],[-17.909,35.607],[-21.125,33.333],[-27.333,26.503],[-33.932,22.76],[-33.035,20.04],[-35.099,18.938],[-44.939,12.209],[-73.949,-6.341],[-71.861,-19.71],[-73.371,-19.12],[-64.346,-22.404],[-29.528,-26.548]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-31.265,-39.964],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[33.761,-42.739],[41.528,-37.112],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[59.679,28.115],[58.039,32.778],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.629,71.671],[4.48,70.472],[-3.001,70.325],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-53.78,50.738],[-38.571,29.576],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-47.904,13.215],[-67.218,7.67],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-37.052,-35.884]],"c":true}]},{"t":63,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-26.042,-33.03],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[27.96,-33.999],[35.727,-28.372],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[49.004,22.98],[47.364,27.642],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.728,62.319],[4.579,61.12],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-31.829,-28.951]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411824544,0.509803921569,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"path-3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152.417,251.468]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.626,-0.89],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.589,-1.651]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-3.6,7.583],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[104.674,7.197],[109.748,5.625],[111.32,10.699],[20.96,22.87],[7.428,24.199],[-31.051,27.942],[-35.274,24.719],[-32.051,20.497],[6.429,16.754],[14.313,19.368]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.938,-2.863],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.843,3.379]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-5.192,6.423],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[32.94,-29.073],[38.014,-30.645],[39.586,-25.571],[15.462,5.46],[-0.092,16.634],[-34.251,28.693],[-38.474,25.47],[-35.251,21.248],[-1.092,9.189],[8.815,1.958]],"c":true}]},{"t":63,"s":[{"i":[[0,0],[-1.835,-0.967],[0.967,-1.835],[0,0],[6.626,-0.89],[0,0],[0.276,2.056],[-2.056,0.276],[0,0],[-2.304,5.327]],"o":[[0.967,-1.835],[1.835,0.967],[0,0],[-3.6,7.583],[0,0],[-2.056,0.276],[-0.276,-2.056],[0,0],[4.217,-0.566],[0,0]],"v":[[32.94,-29.073],[38.014,-30.645],[39.586,-25.571],[20.684,12.393],[5.131,23.568],[-34.251,28.693],[-38.474,25.47],[-35.251,21.248],[4.131,16.122],[14.038,8.892]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,1,1,1,1,1,1]}},"s":{"a":0,"k":[-38464.41,8209.829]},"e":{"a":0,"k":[139.409,46.805]},"t":1,"nm":"Gradient Fill 246","hd":false},{"ty":"tr","p":{"a":0,"k":[116.591,209.195]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-9.706,-5.272],[-0.77,0.306],[-22.482,16.049],[6.126,0.871],[4.723,0.291],[8.562,2.243],[7.789,0.886],[6.577,2.19],[3.256,-0.255],[11.429,-1.234],[-4.137,-8.666],[-2.265,-3.132]],"o":[[2.683,1.457],[19.497,-3.53],[-6.065,-0.767],[-2.385,-0.339],[-11.668,-0.718],[-7.106,-1.861],[-13.133,-1.493],[-1.881,-0.626],[-7.646,0.599],[-7.776,0.839],[4.05,8.484],[3.108,4.297]],"v":[[-51.516,40.267],[-40.02,46.244],[58.261,-9.68],[65.928,-9.471],[57.085,-11.96],[2.956,-1.565],[-12.166,-0.049],[-29.785,0.252],[-36.006,1.798],[-71.285,5.735],[-78.565,8.327],[-80.562,21.713]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[5.476,1.955],[2.542,3.137],[9.482,11.983],[4.713,-6.264],[5.609,-7.304],[3.053,-1.16],[10.985,-3.924],[-4.775,-8.331],[-4.196,-3.323]],"o":[[10.354,-1.081],[19.114,-5.218],[-7.349,-1.852],[-2.269,-0.81],[-6.613,-8.163],[-4.558,-5.76],[-12.706,16.888],[-1.208,1.573],[-7.992,3.036],[-7.365,2.631],[4.548,7.934],[4.158,3.292]],"v":[[-54.481,41.273],[-10.146,32.923],[55.718,-0.802],[34.961,-9.026],[27.134,-14.667],[3.359,-43.56],[-13.016,-43.897],[-37.806,-12.314],[-43.62,-7.803],[-77.159,3.848],[-82.18,21.814],[-73.83,35.723]],"c":true}]},{"t":63,"s":[{"i":[[-10.985,1.147],[-14.517,3.963],[-22.482,16.049],[6.126,0.871],[1.659,3.681],[5.632,12.473],[3.521,-7.004],[4.842,-9.197],[3.256,-0.255],[11.429,-1.234],[-7.512,-5.982],[-4.196,-3.323]],"o":[[10.354,-1.081],[19.114,-5.218],[-6.065,-0.767],[-2.385,-0.339],[-4.803,-10.658],[-3.023,-6.695],[-12.952,25.77],[-0.924,1.754],[-7.646,0.599],[-7.776,0.839],[8.638,6.879],[4.158,3.292]],"v":[[-47.931,39.762],[-10.146,32.923],[53.343,2.68],[29.16,-0.287],[21.333,-5.927],[3.359,-43.56],[-13.016,-43.897],[-32.584,-5.38],[-38.398,-0.869],[-77.159,3.848],[-82.18,21.814],[-67.28,34.212]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.937254905701,0.611764729023,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[159.035,223.399]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":47.507},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Oval","bm":0,"hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[0.326,0.656],[-0.04,0.272],[0,0],[7.82,2.18],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[3.959,1.14],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[-0.843,8.004],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-0.649,0.33],[-0.122,-0.245],[0,0],[-1.927,-2.399],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-22.8,-27.845],[-13.123,-24.311],[-5.499,-28.03],[10.314,-28.853],[63.935,-40.256],[73.913,-39.515],[79.915,-33.252],[74.627,0.396],[69.307,6.667],[15.776,6.48],[60.868,26.43],[64.792,35.761],[55.712,74.587],[49.655,77.673],[7.888,50.594],[5.74,49.395],[-12.093,39.836],[-16.018,36.993],[-17.784,36.402],[-17.909,35.607],[-21.125,33.333],[-27.333,26.503],[-33.932,22.76],[-33.035,20.04],[-35.099,18.938],[-44.939,12.209],[-73.949,-6.341],[-71.861,-19.71],[-72.927,-19.566],[-64.035,-22.362],[-29.661,-26.503]],"c":true}]},{"i":{"x":0.269,"y":1},"o":{"x":0.339,"y":0},"t":46,"s":[{"i":[[-1.14,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-31.265,-39.964],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[33.761,-42.739],[41.528,-37.112],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[59.679,28.115],[58.039,32.778],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.629,71.671],[4.48,70.472],[-3.001,70.325],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-53.78,50.738],[-38.571,29.576],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-47.904,13.215],[-67.218,7.67],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-37.052,-35.884]],"c":true}]},{"t":63,"s":[{"i":[[-1.139,2.247],[0,0],[-4.436,-2.298],[-0.855,-1.779],[0,0],[-3.364,-0.428],[0,0],[0.658,-5.277],[1.557,-1.524],[0,0],[-0.203,-1.728],[0,0],[5.776,-0.694],[1.929,1.077],[0,0],[0,0],[2.365,-1.201],[0,0],[2.362,4.753],[-0.293,1.968],[0,0],[-8.174,4.133],[0,0],[0.495,1.001],[0.85,-0.117],[0,0],[5.392,4.487],[0,0],[-3.521,4.323],[-2.557,0.314],[0,0]],"o":[[0,0],[2.274,-4.484],[1.742,0.902],[0,0],[1.481,3.082],[0,0],[5.221,0.665],[-0.271,2.173],[0,0],[-1.236,1.211],[0,0],[0.686,5.838],[-2.189,0.263],[0,0],[0,0],[-2.317,-1.293],[0,0],[-4.702,2.388],[-0.884,-1.778],[0,0],[1.361,-9.135],[0,0],[0.991,-0.501],[-0.384,-0.776],[0,0],[-6.921,0.951],[0,0],[-4.276,-3.558],[1.637,-2.01],[0,0],[2.479,-0.305]],"v":[[-26.042,-33.03],[-6.327,-71.902],[5.824,-75.86],[9.825,-71.728],[27.96,-33.999],[35.727,-28.372],[74.185,-23.475],[82.446,-12.716],[79.622,-7.003],[49.004,22.98],[47.364,27.642],[52.154,68.421],[42.938,80.247],[36.605,78.996],[6.728,62.319],[4.579,61.12],[-2.902,60.973],[-36.314,77.943],[-49.106,73.662],[-50.014,67.904],[-47.23,49.227],[-32.021,28.065],[5.088,9.303],[5.985,6.582],[3.921,5.48],[-41.355,11.704],[-60.668,6.159],[-75.653,-6.31],[-77.021,-20.58],[-70.487,-24.201],[-31.829,-28.951]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.851,0.318,0.5,1,0.743,0.159,1,1,0.635,0]}},"s":{"a":0,"k":[-0.56,-74.935]},"e":{"a":0,"k":[-17.356,124.783]},"t":1,"nm":"Gradient Fill 247","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"path-3","bm":0,"hd":false},{"ty":"tr","p":{"a":0,"k":[152.417,251.468]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Path","bm":0,"hd":false}],"ip":38,"op":64,"st":12,"bm":0},{"ddd":0,"ind":136,"ty":4,"nm":"samolet 13","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.651],"y":[0.993]},"o":{"x":[0.279],"y":[-0.002]},"t":5,"s":[97.495]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.956],"y":[0]},"t":22,"s":[148.312]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":38,"s":[177.469]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":46,"s":[220.487]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":53,"s":[268.456]},{"t":63,"s":[222.176]}]},"p":{"a":1,"k":[{"i":{"x":0.65,"y":0.786},"o":{"x":0.315,"y":0.617},"t":5,"s":[301.833,322.076,0],"to":[14.66,-0.837,0],"ti":[-15.209,-21.663,0]},{"i":{"x":0.655,"y":0.401},"o":{"x":0.319,"y":0.255},"t":19,"s":[354.618,348.665,0],"to":[16.855,28.895,0],"ti":[2.899,-9.844,0]},{"i":{"x":0.757,"y":1},"o":{"x":0.16,"y":1},"t":43,"s":[375.822,425.846,0],"to":[-3.56,-11.582,0],"ti":[0.578,0.897,0]},{"t":69,"s":[358.518,409.879,0]}]},"a":{"a":0,"k":[-10.418,212.192,0]},"s":{"a":1,"k":[{"i":{"x":[0.774,0.774,0.636],"y":[0.996,0.997,1]},"o":{"x":[0.529,0.529,0.286],"y":[0.002,0.004,0]},"t":5,"s":[25,25,100]},{"i":{"x":[0.663,0.663,0.684],"y":[1.016,1.018,1]},"o":{"x":[0.222,0.222,0.33],"y":[0.083,-0.013,0]},"t":13,"s":[72,72,100]},{"i":{"x":[0.807,0.807,0.8],"y":[1,1,1]},"o":{"x":[0.525,0.525,0.431],"y":[0.003,0.003,0]},"t":31,"s":[77.235,46.752,100]},{"i":{"x":[0.307,0.307,0.833],"y":[1,1,1]},"o":{"x":[0.562,0.562,0.167],"y":[0,0,0]},"t":38,"s":[59.016,59,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":43,"s":[85.023,85,100]},{"i":{"x":[0.307,0.307,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":51,"s":[64.017,64,100]},{"t":61,"s":[75.02,75,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.393,-4.407],[0,0],[-3.917,-0.355],[0,0],[-2.267,6.301],[0,0],[0,0],[-9.248,-1.26],[0,0],[2.344,11.762],[0,0]],"o":[[0,0],[-8.346,15.09],[0,0],[8.479,-0.974],[0,0],[0,0],[1.07,7.35],[0,0],[11.529,0.474],[0,0],[-2.748,-6.036]],"v":[[-37.231,-79.654],[-95.811,46.266],[-84.692,64.367],[-56.862,64.108],[-44.416,56.126],[-34.41,3.935],[-26.503,53.95],[-15.899,67.743],[5.973,69.607],[20.804,54.534],[-27,-78.057]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.929411824544,0.509803921569,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[19.918,205.246]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.165,-4.647],[17.006,-36.829],[0,0],[0,0],[0,0]],"o":[[-0.652,2.867],[-17.905,38.777],[-10.703,-6.521],[0,0],[1.222,-1.709]],"v":[[18.746,-79.466],[-12.064,-7.711],[-44.578,62.783],[-48.806,47.271],[9.685,-78.566]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,1,0.5,1,1,1,1,1,1,1]}},"s":{"a":0,"k":[-16.816,-0.358]},"e":{"a":0,"k":[16.607,-0.358]},"t":1,"nm":"Gradient Fill 248","hd":false},{"ty":"tr","p":{"a":0,"k":[-27.088,204.242]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[3.736,-9.47],[0,0],[-3.176,-6.11]],"o":[[-26.552,-33.921],[0,0],[3.204,-3.727],[0,0]],"v":[[19.947,13.146],[-46.178,26.645],[-12.883,-52.195],[-2.774,-51.026]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.941176474094,0.701960802078,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-4.447,177.777]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":47.507},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.802,-3.918],[0,0],[-4.644,-0.664],[0,0],[-3.345,6.577],[0,0],[0,0],[-8.8,-1.096],[0,0],[2.564,10.416],[0,0]],"o":[[0,0],[-8.603,15.142],[0,0],[9.302,-1.593],[0,0],[0,0],[0.712,7.089],[0,0],[11.198,0.879],[0,0],[-2.796,-6.209]],"v":[[-37.18,-79.654],[-95.863,46.318],[-84.795,64.368],[-56.451,64.108],[-44.314,56.023],[-34.855,4.054],[-26.4,53.847],[-15.899,67.743],[6.93,69.539],[20.376,55.416],[-27.261,-78.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.875,0.369,0.5,1,0.755,0.184,1,1,0.635,0]}},"s":{"a":0,"k":[-50.821,-10.362]},"e":{"a":0,"k":[39.444,112.755]},"t":1,"nm":"Gradient Fill 249","hd":false},{"ty":"tr","p":{"a":0,"k":[19.918,205.246]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 4","bm":0,"hd":false}],"ip":5,"op":73,"st":-27,"bm":0},{"ddd":0,"ind":137,"ty":4,"nm":"Spiral 23","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[1.061]},"o":{"x":[0.181],"y":[0.002]},"t":5,"s":[-336.006]},{"t":35,"s":[-324.478]}]},"p":{"a":1,"k":[{"i":{"x":0.615,"y":0.162},"o":{"x":0.142,"y":1},"t":0,"s":[274.707,344.763,0],"to":[28.268,22.393,0],"ti":[-9.959,-25.779,0]},{"t":35,"s":[353.936,433.875,0]}]},"a":{"a":0,"k":[-357,289.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.126,0.126,0.833],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"t":7.615234375,"s":[27.773,27.773,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":0,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-65.187,-14.819],[22.107,24.605],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[17.402,3.956],[-13.269,-14.768],[29.088,18]],"v":[[-471.765,282],[-417.722,215.819],[-414.22,299.441],[-367.107,227.443],[-354.184,320.867],[-324.048,242.435],[-313.519,335.152]],"c":false}]},{"t":22,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-94.693,0.752],[20.997,10],[-103.054,-44.05],[23.959,30.206],[-67.501,-54.873]],"o":[[65.243,12.331],[-31.306,-42.065],[94.693,-0.752],[-29.565,-14.081],[57.175,24.439],[-20.142,-25.394],[33.103,26.911]],"v":[[-517.761,298.913],[-414.278,223.297],[-379.593,319.403],[-270.799,239.948],[-255.812,364.683],[-156.032,321.239],[-166.167,435.229]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.712110691445,0.623529411765,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":0,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-67.325,-6.902],[23.271,23],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[29.478,3.022],[-23.271,-23],[29.088,18]],"v":[[-470.076,282],[-416.033,215.819],[-409.167,299.441],[-365.418,227.443],[-349.479,321.339],[-319.882,236.548],[-306.177,336.775]],"c":false}]},{"t":22,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-93.856,-12.583],[20.997,10],[-104.617,-40.197],[30.943,23],[-74.843,-34.831]],"o":[[65.243,12.331],[-31.306,-42.065],[98.686,13.231],[-29.565,-14.081],[59.299,22.784],[-30.943,-23],[38.678,18]],"v":[[-518.307,300.373],[-407.037,226.188],[-382.305,320.136],[-268.689,242.281],[-255.659,368.013],[-158.042,324.193],[-159.288,431.927]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.253979222915,0.176470573276,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,3]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.343],"y":[0]},"t":12.691,"s":[0]},{"t":36.76953125,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":7.846,"s":[100]},{"t":29,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":0,"op":36,"st":-70,"bm":0},{"ddd":0,"ind":138,"ty":4,"nm":"Spiral 22","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[0.939]},"o":{"x":[0.181],"y":[-0.002]},"t":5,"s":[216.756]},{"t":35,"s":[205.229]}]},"p":{"a":1,"k":[{"i":{"x":0.615,"y":0.375},"o":{"x":0.19,"y":1},"t":0,"s":[290.83,288.327,0],"to":[44.67,18.38,0],"ti":[-36.644,5.233,0]},{"t":35,"s":[446.823,322.598,0]}]},"a":{"a":0,"k":[-357,289.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.126,0.126,0.833],"y":[1,1,1]},"o":{"x":[0.31,0.31,0.31],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"t":7.615234375,"s":[-37.2,37.2,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":0,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-65.187,-14.819],[22.107,24.605],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[17.402,3.956],[-13.269,-14.768],[29.088,18]],"v":[[-471.765,282],[-417.722,215.819],[-414.22,299.441],[-367.107,227.443],[-354.184,320.867],[-324.048,242.435],[-313.519,335.152]],"c":false}]},{"t":22,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-94.693,0.752],[20.997,10],[-103.054,-44.05],[23.959,30.206],[-67.501,-54.873]],"o":[[65.243,12.331],[-31.306,-42.065],[94.693,-0.752],[-29.565,-14.081],[57.175,24.439],[-20.142,-25.394],[33.103,26.911]],"v":[[-517.761,298.913],[-414.278,223.297],[-379.593,319.403],[-270.799,239.948],[-255.812,364.683],[-156.032,321.239],[-166.167,435.229]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.98006920908,0.435294087728,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.575,"y":1},"o":{"x":0.54,"y":0},"t":0,"s":[{"i":[[-19.261,-8.538],[15.791,38],[-42.05,-12],[15.791,10],[-67.325,-6.902],[23.271,23],[-56.287,-34.831]],"o":[[47.372,21],[-19.072,-45.896],[42.05,12],[-22.234,-14.081],[29.478,3.022],[-23.271,-23],[29.088,18]],"v":[[-470.076,282],[-416.033,215.819],[-409.167,299.441],[-365.418,227.443],[-349.479,321.339],[-319.882,236.548],[-306.177,336.775]],"c":false}]},{"t":22,"s":[{"i":[[-26.527,-5.014],[25.92,34.828],[-93.856,-12.583],[20.997,10],[-104.617,-40.197],[30.943,23],[-74.843,-34.831]],"o":[[65.243,12.331],[-31.306,-42.065],[98.686,13.231],[-29.565,-14.081],[59.299,22.784],[-30.943,-23],[38.678,18]],"v":[[-518.307,300.373],[-407.037,226.188],[-382.305,320.136],[-268.689,242.281],[-255.659,368.013],[-158.042,324.193],[-159.288,431.927]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.687750902363,0.435294087728,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":15},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-10,3]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 2","bm":0,"hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.343],"y":[0]},"t":12.691,"s":[0]},{"t":36.76953125,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":7.846,"s":[100]},{"t":29,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":0,"op":36,"st":-70,"bm":0},{"ddd":0,"ind":139,"ty":4,"nm":"konfetti 15","sr":1,"ks":{"r":{"a":0,"k":975.831},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":15,"s":[275.34,317.927,0],"to":[-19.812,30.511,0],"ti":[77.694,-60.048,0]},{"t":49,"s":[223.121,469.847,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":15,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":22,"s":[-208.078,182.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[164.689,206.302,100]},{"t":49,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.827035582299,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":15,"op":50,"st":-136,"bm":0},{"ddd":0,"ind":140,"ty":4,"nm":"konfetti 14","sr":1,"ks":{"r":{"a":0,"k":866.16},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":31,"s":[259.015,320.267,0],"to":[-14.049,33.115,0],"ti":[-9.244,-35.827,0]},{"t":65,"s":[272.127,452.778,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":31,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":38,"s":[-229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":51,"s":[114.397,143.302,100]},{"t":65,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.631511015051,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":31,"op":66,"st":-120,"bm":0},{"ddd":0,"ind":141,"ty":4,"nm":"konfetti 13","sr":1,"ks":{"r":{"a":0,"k":964.255},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":15,"s":[280.797,323.516,0],"to":[37.05,15.255,0],"ti":[-40.543,-0.346,0]},{"t":49,"s":[454.489,395.156,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":15,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":22,"s":[-229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[164.689,206.302,100]},{"t":49,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.932318354588,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":15,"op":50,"st":-136,"bm":0},{"ddd":0,"ind":142,"ty":4,"nm":"konfetti 12","sr":1,"ks":{"r":{"a":0,"k":964.255},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":21,"s":[280.797,323.516,0],"to":[37.05,15.255,0],"ti":[-17.641,-22.617,0]},{"t":55,"s":[336.721,430.779,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":21,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":28,"s":[-229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":41,"s":[164.689,206.302,100]},{"t":55,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.556309060489,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":21,"op":56,"st":-130,"bm":0},{"ddd":0,"ind":143,"ty":4,"nm":"konfetti 11","sr":1,"ks":{"r":{"a":0,"k":866.16},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":15,"s":[316.303,261.828,0],"to":[37.05,15.255,0],"ti":[-45.101,9.74,0]},{"t":49,"s":[467.471,244.694,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":15,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":22,"s":[-229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":35,"s":[164.689,206.302,100]},{"t":49,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":15,"op":50,"st":-136,"bm":0},{"ddd":0,"ind":144,"ty":4,"nm":"konfetti 10","sr":1,"ks":{"r":{"a":0,"k":519.745},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":17,"s":[309.251,291.261,0],"to":[9.957,24.529,0],"ti":[-45.686,5.658,0]},{"t":51,"s":[416.737,307.829,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":17,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":24,"s":[-161.37,141.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":37,"s":[142.913,180.099,100]},{"t":51,"s":[2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070726641487,0.423678050322,0.858823529412,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.64655121448,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":17,"op":52,"st":-134,"bm":0},{"ddd":0,"ind":145,"ty":4,"nm":"konfetti 3","sr":1,"ks":{"r":{"a":0,"k":975.831},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":0,"s":[275.34,317.927,0],"to":[-19.812,30.511,0],"ti":[77.694,-60.048,0]},{"t":34,"s":[223.121,469.847,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[-163.649,143.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[164.689,206.302,100]},{"t":34,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.827035582299,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":35,"st":-151,"bm":0},{"ddd":0,"ind":146,"ty":4,"nm":"konfetti 5","sr":1,"ks":{"r":{"a":0,"k":866.16},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":7,"s":[259.015,320.267,0],"to":[-14.049,33.115,0],"ti":[-9.244,-35.827,0]},{"t":41,"s":[272.127,452.778,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":14,"s":[-229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":27,"s":[164.689,206.302,100]},{"t":41,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":7,"op":42,"st":-144,"bm":0},{"ddd":0,"ind":147,"ty":4,"nm":"konfetti 9","sr":1,"ks":{"r":{"a":0,"k":964.255},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":0,"s":[280.797,323.516,0],"to":[37.05,15.255,0],"ti":[-40.543,-0.346,0]},{"t":34,"s":[454.489,395.156,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[-170.484,149.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[164.689,206.302,100]},{"t":34,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.932318354588,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":35,"st":-151,"bm":0},{"ddd":0,"ind":148,"ty":4,"nm":"konfetti 8","sr":1,"ks":{"r":{"a":0,"k":964.255},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":6,"s":[280.797,323.516,0],"to":[37.05,15.255,0],"ti":[-17.641,-22.617,0]},{"t":40,"s":[336.721,430.779,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":6,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[-229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":26,"s":[164.689,206.302,100]},{"t":40,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":6,"op":41,"st":-145,"bm":0},{"ddd":0,"ind":149,"ty":4,"nm":"konfetti 2","sr":1,"ks":{"r":{"a":0,"k":866.16},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":0,"s":[316.303,261.828,0],"to":[37.05,15.255,0],"ti":[-45.101,9.74,0]},{"t":34,"s":[467.471,244.694,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[-229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[164.689,206.302,100]},{"t":34,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.466066816741,1,0.360784283806,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":35,"st":-151,"bm":0},{"ddd":0,"ind":150,"ty":4,"nm":"konfetti 7","sr":1,"ks":{"r":{"a":0,"k":519.745},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":2,"s":[309.251,291.261,0],"to":[9.957,24.529,0],"ti":[-45.686,5.658,0]},{"t":36,"s":[416.737,307.829,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":2,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[-138.586,121.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":22,"s":[148.468,187.099,100]},{"t":36,"s":[2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070726641487,0.423678050322,0.858823529412,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.64655121448,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":2,"op":37,"st":-149,"bm":0},{"ddd":0,"ind":151,"ty":4,"nm":"konfetti 4","sr":1,"ks":{"r":{"a":0,"k":597.436},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":0,"s":[274.726,323.896,0],"to":[9.957,24.529,0],"ti":[11.982,-46.71,0]},{"t":34,"s":[352.583,501.275,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[-162.51,142.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[171.48,216.099,100]},{"t":34,"s":[2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070726641487,0.423678050322,0.858823529412,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784283806,0.64655121448,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":35,"st":-151,"bm":0},{"ddd":0,"ind":152,"ty":4,"nm":"konfetti 6","sr":1,"ks":{"r":{"a":0,"k":660.134},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":4,"s":[313.229,291.67,0],"to":[37.05,15.255,0],"ti":[-71.942,-32.231,0]},{"t":38,"s":[361.692,432.345,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":4,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":11,"s":[-229.723,201.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":24,"s":[160.371,202.099,100]},{"t":38,"s":[2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0.170519017238,0.25623626709,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.435986268287,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":4,"op":39,"st":-147,"bm":0},{"ddd":0,"ind":153,"ty":4,"nm":"konfetti","sr":1,"ks":{"r":{"a":0,"k":597.436},"p":{"a":1,"k":[{"i":{"x":0.764,"y":1},"o":{"x":0.277,"y":0},"t":0,"s":[313.229,291.67,0],"to":[37.05,15.255,0],"ti":[-71.942,-32.231,0]},{"t":34,"s":[472.587,331.676,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[-179.598,157.652,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[158.784,200.099,100]},{"t":34,"s":[2.253,105.652,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0,0],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[0,0],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.905882352941,0.170519017238,0.25623626709,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.360784283806,0.435986268287,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":0,"op":35,"st":-151,"bm":0},{"ddd":0,"ind":154,"ty":4,"nm":"Shape Layer 7","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":30,"s":[100]},{"t":40,"s":[0]}]},"p":{"a":0,"k":[256,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[16.82,-13.456],[0,0],[8,-24],[0,0],[-12.649,-12.649],[0,0],[-21,-17],[0,0],[-35,-2],[0,0],[1.612,29.024],[-33,6],[-1.838,15.926],[0,0],[16,12],[-14,16],[9,14],[0,0],[13,-2]],"o":[[0,0],[-10,8],[0,0],[-8,24],[0,0],[8,8],[0,0],[21,17],[0,0],[40.945,2.34],[0,0],[-1,-18],[-1,0],[3,-26],[0,0],[-16,-12],[-31,29],[-11.148,-17.341],[0,0],[-13,2]],"v":[[-167,-197],[-94,-59],[-163,-54],[-118,8],[-243,77],[-102,82],[-105,140],[-50,125],[2,240],[69,118],[137,141],[111,70],[241,33],[109,-19],[135,-61],[83,-61],[166,-185],[26,-116],[0,-173],[-28,-116]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.743990789675,0.298039185767,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":0},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0,0.992,0.282,1,0.181,0.996,0.265,0.889,0.363,1,0.247,0.779,0.681,1,0.124,0.848,1,1,0,0.918,0.2,0,0.279,0.44,0.357,0.88,0.679,0.44,1,0]}},"s":{"a":0,"k":[0,0]},"e":{"a":0,"k":[207,11]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 250","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":155,"ty":4,"nm":"Shape Layer 6","sr":1,"ks":{"r":{"a":0,"k":268.483},"p":{"a":0,"k":[256,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[167.231,-200.916],[51,-65]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":11.732421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4.268,"s":[0]},{"t":15,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.992710530758,0.38039213419,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8.533,"s":[23]},{"t":14.935546875,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.495501768823,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":0,"op":15,"st":-5,"bm":0},{"ddd":0,"ind":156,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"r":{"a":0,"k":176.847},"p":{"a":0,"k":[256,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[222.721,-169.861],[51,-65]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":11.732421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4.268,"s":[0]},{"t":15,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.992710530758,0.38039213419,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8.533,"s":[23]},{"t":14.935546875,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.495501768823,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":0,"op":15,"st":-5,"bm":0},{"ddd":0,"ind":157,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"r":{"a":0,"k":88.301},"p":{"a":0,"k":[256,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[131.315,-241.227],[51,-65]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":11.732421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4.268,"s":[0]},{"t":15,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.992710530758,0.38039213419,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8.533,"s":[23]},{"t":14.935546875,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.495501768823,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":0,"op":15,"st":-5,"bm":0},{"ddd":0,"ind":158,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"p":{"a":0,"k":[256,256,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[130,-227],[51,-65]],"c":false}},"nm":"Path 1","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":11.732421875,"s":[100]}]},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4.268,"s":[0]},{"t":15,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.992710530758,0.38039213419,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8.533,"s":[23]},{"t":14.935546875,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.495501768823,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":0,"op":15,"st":-5,"bm":0},{"ddd":0,"ind":159,"ty":3,"nm":"Null 1140","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":0,"k":-8.376},"p":{"a":0,"k":[159,407,0]},"s":{"a":0,"k":[-100,100,100]}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":160,"ty":4,"nm":"konfeti","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1.399]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[276.867]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0.227]},"t":70.666,"s":[350.007]},{"t":88,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.72},"o":{"x":0.185,"y":0.498},"t":64,"s":[389.547,413.574,0],"to":[-36.139,-4.041,0],"ti":[40.066,-63.969,0]},{"t":88,"s":[258.627,486.157,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[131.485,147.667,100]},{"t":88,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.184,3.952],[-2.665,2.586],[-0.736,-2.45],[-3.134,0.982],[0.159,-0.071]],"o":[[-0.929,-3.069],[-2.342,3.179],[1.059,3.525],[-0.154,0.099],[-3.79,1.624]],"v":[[-7.486,2.659],[-4.186,-10.314],[-5.239,1.422],[7.755,9.748],[7.28,10.001]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.141176470588,0.866666726505,0.431372578939,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[137.771,-92.175]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.976470648074,0.666666666667,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":88,"st":-90,"bm":0},{"ddd":0,"ind":161,"ty":4,"nm":"konfeti","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[15.103]},{"t":86.666015625,"s":[276.867]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.361},"o":{"x":0.163,"y":1},"t":64,"s":[374.885,399.107,0],"to":[-3.654,1.599,0],"ti":[10.131,-45.986,0]},{"t":88,"s":[347.998,461.819,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[105.329,112.656,100]},{"t":88,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470648074,0.431372578939,0.803321748621,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":88,"st":-90,"bm":0},{"ddd":0,"ind":162,"ty":4,"nm":"konfeti","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[225.375]},{"t":85,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.554},"o":{"x":0.185,"y":0.793},"t":64,"s":[416.909,415.7,0],"to":[18.824,-24.254,0],"ti":[-10.846,-84.473,0]},{"t":85,"s":[487.15,474.972,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":71,"s":[-59.119,157.306,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":78,"s":[141.765,149.285,100]},{"t":85,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.658823469573,0.715017341165,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":85,"st":-90,"bm":0},{"ddd":0,"ind":163,"ty":4,"nm":"konfeti","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[15.103]},{"t":89,"s":[225.375]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.501},"o":{"x":0.185,"y":0.887},"t":64,"s":[392.909,365.7,0],"to":[28.824,-2.754,0],"ti":[-27.536,-16.102,0]},{"t":89,"s":[499.669,387.029,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[-79.002,196.946,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[144.36,190.738,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.988235353956,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":90,"st":-90,"bm":0},{"ddd":0,"ind":164,"ty":4,"nm":"konfeti","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.739]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[15.103]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[-1.453]},"t":79,"s":[250.814]},{"t":88,"s":[225.375]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.446},"o":{"x":0.185,"y":0.985},"t":64,"s":[374.193,404.929,0],"to":[6.324,-14.754,0],"ti":[0.14,-36.628,0]},{"t":88,"s":[387.757,497.765,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[-69.375,172.946,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[161.011,212.738,100]},{"t":88,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470648074,0.931580248066,0.431372578939,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":88,"st":-90,"bm":0},{"ddd":0,"ind":165,"ty":4,"nm":"konfeti","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[15.103]},{"t":88,"s":[225.375]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.534},"o":{"x":0.185,"y":0.828},"t":64,"s":[374.193,404.929,0],"to":[18.824,-24.254,0],"ti":[-30.86,-33.628,0]},{"t":88,"s":[475.757,439.265,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[75.694,75.694,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72,"s":[161.011,212.738,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[-69.375,172.946,100]},{"t":88,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.976470648074,0.666666666667,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":88,"st":-90,"bm":0},{"ddd":0,"ind":166,"ty":4,"nm":"Blesk 32","sr":1,"ks":{"r":{"a":0,"k":-53.192},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[339.882,323.111,0],"to":[13.436,9.746,0],"ti":[-0.748,-22.623,0]},{"t":82,"s":[368.874,382.993,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":74,"s":[156.328,156.328,100]},{"t":82,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":89,"st":63,"bm":0},{"ddd":0,"ind":167,"ty":4,"nm":"manetka 37","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.816],"y":[1]},"o":{"x":[0.723],"y":[-0.052]},"t":64,"s":[226.232]},{"t":89,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.429},"o":{"x":0.185,"y":0.417},"t":64,"s":[373.05,414.429,0],"to":[44.491,4.017,0],"ti":[-8.449,-27.643,0]},{"t":89,"s":[478.527,494.093,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[104.075,104.075,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":77,"s":[141.075,141.075,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 251","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 252","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":89,"st":-93,"bm":0},{"ddd":0,"ind":168,"ty":4,"nm":"manetka 36","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.277],"y":[1.052]},"o":{"x":[0.184],"y":[0]},"t":64,"s":[15.103]},{"t":87,"s":[226.232]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.375},"o":{"x":0.185,"y":0.456},"t":64,"s":[410.05,397.429,0],"to":[-18.509,-57.983,0],"ti":[-31.449,8.357,0]},{"t":87,"s":[486.527,322.093,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":80,"s":[104.075,104.075,100]},{"t":87,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.131,-11.946],[-4.333,4.763],[13.131,11.946],[4.333,-4.763]],"o":[[13.131,11.946],[4.333,-4.763],[-13.131,-11.946],[-4.333,4.763]],"v":[[-9.188,10.099],[22.434,23.105],[6.505,-7.15],[-25.118,-20.156]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.876,0.349,1,1,0.753,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 253","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.335,-4.765],[0,0],[13.133,11.948],[4.335,-4.765],[0,0],[-13.133,-11.948]],"o":[[0,0],[4.335,-4.765],[-13.133,-11.948],[0,0],[4.335,-4.765],[13.133,11.948]],"v":[[20.459,25.35],[26.397,18.823],[10.467,-11.432],[-21.155,-24.438],[-27.093,-17.911],[4.529,-4.905]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":6},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 254","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":87,"st":-93,"bm":0},{"ddd":0,"ind":169,"ty":4,"nm":"manetka 35","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.727]},"o":{"x":[0.524],"y":[0]},"t":64,"s":[149.946]},{"t":83,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.75},"o":{"x":0.185,"y":0.445},"t":64,"s":[363.195,429.519,0],"to":[-2.432,-26.956,0],"ti":[50.972,2.748,0]},{"t":83,"s":[261.711,344.544,0]}]},"a":{"a":0,"k":[518.992,299.132,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":72.334,"s":[177.421,177.421,100]},{"t":83,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-9.346,-8.502],[-3.084,3.39],[9.346,8.502],[3.084,-3.39]],"o":[[9.346,8.502],[3.084,-3.39],[-9.346,-8.502],[-3.084,3.39]],"v":[[-6.07,6.672],[16.436,15.929],[5.099,-5.605],[-17.408,-14.861]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.698,0.5,1,0.888,0.349,1,1,0.776,0]}},"s":{"a":0,"k":[-14.102,-0.907]},"e":{"a":0,"k":[13.355,-0.907]},"t":1,"nm":"Gradient Fill 255","hd":false},{"ty":"tr","p":{"a":0,"k":[517.365,300.921]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.085,-3.391],[0,0],[9.347,8.503],[3.085,-3.391],[0,0],[-9.347,-8.504]],"o":[[0,0],[3.085,-3.391],[-9.347,-8.503],[0,0],[3.085,-3.391],[9.347,8.504]],"v":[[14.461,18.174],[18.687,13.528],[7.35,-8.005],[-15.157,-17.262],[-19.383,-12.616],[3.124,-3.36]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.521568655968,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,1,0.584,0.5,1,0.841,0.292,1,1,0.682,0]}},"s":{"a":0,"k":[298.893,293.553]},"e":{"a":0,"k":[279.283,301.764]},"t":1,"nm":"Gradient Fill 256","hd":false},{"ty":"tr","p":{"a":0,"k":[519.34,298.677]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":83,"st":-91,"bm":0},{"ddd":0,"ind":170,"ty":4,"nm":"konfeti","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[276.867]},{"t":89,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.654},"o":{"x":0.185,"y":0.615},"t":64,"s":[326.855,383.244,0],"to":[-50.165,11.195,0],"ti":[21.829,-46.171,0]},{"t":89,"s":[220.792,443.639,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[166.973,198.197,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470648074,0.431372578939,0.764844228707,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":89,"st":-90,"bm":0},{"ddd":0,"ind":171,"ty":4,"nm":"konfeti","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[276.867]},{"t":89,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.624},"o":{"x":0.185,"y":0.669},"t":64,"s":[360.355,376.744,0],"to":[-7.665,-39.305,0],"ti":[-25.171,9.829,0]},{"t":89,"s":[412.292,278.639,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[166.973,198.197,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.828973388672,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":89,"st":-90,"bm":0},{"ddd":0,"ind":172,"ty":4,"nm":"konfeti","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.798]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[276.867]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[5.972]},"t":74,"s":[27.726]},{"t":89,"s":[15.103]}]},"p":{"a":1,"k":[{"i":{"x":0.749,"y":0.175},"o":{"x":0.126,"y":1},"t":64,"s":[371.855,407.244,0],"to":[-3.718,-13.17,0],"ti":[5.076,-13.025,0]},{"t":89,"s":[325.031,404.74,0]}]},"a":{"a":0,"k":[140.192,-92.728,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":64,"s":[40.436,40.436,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":75,"s":[171.277,171.73,100]},{"t":89,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.032,-3.432],[-3.792,1.62],[2.059,3.323],[3.69,-1.751]],"o":[[1.187,3.949],[3.595,-1.535],[-2.152,-3.472],[-3.237,1.536]],"v":[[-9.909,3.215],[4.863,10.554],[9.52,-4.373],[-5.641,-10.467]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.431372578939,0.495501768823,0.976470648074,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[140.192,-92.729]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":89,"st":-90,"bm":0},{"ddd":0,"ind":173,"ty":4,"nm":"Blesk 31","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[175.482]},{"t":82,"s":[28.044]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[393.005,432.028,0],"to":[-7.131,-3.583,0],"ti":[7.131,3.583,0]},{"t":82,"s":[350.217,410.531,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":72,"s":[159.443,159.443,100]},{"t":82,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-10.988,-1.594],[6.981,-49.743],[10.988,1.594],[-6.981,49.743]],"o":[[-11.089,-0.57],[2.811,-50.152],[11.089,0.57],[-2.811,50.152]],"v":[[46.414,4.55],[-5.508,56.191],[-46.414,-4.55],[5.508,-56.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":56},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":64,"op":82,"st":48,"bm":0},{"ddd":0,"ind":174,"ty":4,"nm":"zvezda 9","sr":1,"ks":{"r":{"a":0,"k":0.733},"p":{"a":0,"k":[383.887,401.249,0]},"a":{"a":0,"k":[9.5,6.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.175,0.175,0.175],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[46.023,46.023,100]},{"t":83,"s":[89.73,89.73,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[9.432,10.291],[0,0],[15.903,-5.645],[0,0],[-0.699,-14.617],[0,0],[-17.316,-4.781],[0,0],[-9.92,16.028],[0,0]],"o":[[-9.432,-10.291],[0,0],[-15.903,5.645],[0,0],[0.699,14.617],[0,0],[17.316,4.781],[0,0],[9.92,-16.028],[0,0]],"v":[[92.766,-69.972],[23.627,-60.306],[-31.787,-101.428],[-45.395,-32.672],[-97.782,9.095],[-42.509,42.123],[-22.912,101.428],[31.421,58.048],[97.782,58.896],[72.37,-5.445]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.964705882353,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.175],"y":[1]},"o":{"x":[0.31],"y":[0.163]},"t":64,"s":[34]},{"t":83,"s":[0]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":83,"st":-61,"bm":0},{"ddd":0,"ind":175,"ty":4,"nm":"Zvezda svet 9","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":77,"s":[100]},{"t":83,"s":[0]}]},"r":{"a":0,"k":37.75},"p":{"a":0,"k":[383.15,409.077,0]},"a":{"a":0,"k":[32.5,-42.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[0.79,0.79,0.112]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[22.119,22.119,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":77,"s":[52.788,52.788,100]},{"t":83,"s":[55.255,55.255,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":64,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[209.496,84.242]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[209.496,84.242]],"c":true}]},{"t":83,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[223.437,-201.363],[-37.419,-219.321],[-223.437,-22.93],[-34.515,219.321],[294.799,-18.428]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.988,0,0.5,1,0.965,0,1,1,0.941,0,0,1,0.5,0.5,1,0]}},"s":{"a":0,"k":[37.61,-34.052]},"e":{"a":0,"k":[207.569,-21.988]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 257","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":64,"op":83,"st":-61,"bm":0},{"ddd":0,"ind":176,"ty":4,"nm":"Blesk 26","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[-160.379]},{"t":32,"s":[-12.942]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":8,"s":[196.78,336.956,0],"to":[-11.75,2.667,0],"ti":[11.75,-2.667,0]},{"t":32,"s":[126.28,352.956,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":8,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":20,"s":[-101.169,101.169,100]},{"t":32,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-10.988,-1.594],[6.981,-49.743],[10.988,1.594],[-6.981,49.743]],"o":[[-11.089,-0.57],[2.811,-50.152],[11.089,0.57],[-2.811,50.152]],"v":[[46.414,4.55],[-5.508,56.191],[-46.414,-4.55],[5.508,-56.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":56},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":8,"op":32,"st":-5,"bm":0},{"ddd":0,"ind":177,"ty":4,"nm":"Blesk 7","sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[-160.379]},{"t":32,"s":[-12.942]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":8,"s":[293.78,197.956,0],"to":[5.25,-6.167,0],"ti":[-5.25,6.167,0]},{"t":32,"s":[325.28,160.956,0]}]},"a":{"a":0,"k":[-333.78,211.956,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":8,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":20,"s":[-155.169,155.169,100]},{"t":32,"s":[0,0,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-7.073,-1.026],[4.494,-32.018],[7.073,1.026],[-4.494,32.018]],"o":[[-7.137,-0.367],[1.809,-32.281],[7.137,0.367],[-1.809,32.281]],"v":[[29.875,2.928],[-3.545,36.169],[-29.875,-2.928],[3.545,-36.169]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-10.988,-1.594],[6.981,-49.743],[10.988,1.594],[-6.981,49.743]],"o":[[-11.089,-0.57],[2.811,-50.152],[11.089,0.57],[-2.811,50.152]],"v":[[46.414,4.55],[-5.508,56.191],[-46.414,-4.55],[5.508,-56.191]],"c":true}},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-333.78,211.956]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":56},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 2","bm":0,"hd":false}],"ip":8,"op":32,"st":-5,"bm":0},{"ddd":0,"ind":178,"ty":4,"nm":"zvezda","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":18,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.732],"y":[0.998]},"o":{"x":[0.405],"y":[0.006]},"t":7.285,"s":[224.555]},{"t":18,"s":[158.279]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.692},"t":3,"s":[330.879,229.853,0],"to":[34.552,3.21,0],"ti":[-56.851,15.113,0]},{"t":18,"s":[468.305,207.731,0]}]},"a":{"a":0,"k":[0.5,-3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":3,"s":[-12,12,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7.285,"s":[92.754,92.754,100]},{"t":18,"s":[5.32,140.393,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-33.589,-48.117],[-0.773,-35.441],[31.137,-49.26],[29.924,-13.961],[50.837,12.545],[19.926,22.408],[3.505,49.26],[-18.178,21.74],[-50.837,14.541],[-30.985,-14.114]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.098039208206,0.182929723403,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":13},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":18,"st":3,"bm":0},{"ddd":0,"ind":179,"ty":4,"nm":"zvezda","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":18,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.732],"y":[0.995]},"o":{"x":[0.405],"y":[0.012]},"t":5.535,"s":[224.555]},{"t":15.673828125,"s":[194.219]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.604},"t":3,"s":[336.093,293.074,0],"to":[42.377,7.767,0],"ti":[0.31,-28.402,0]},{"t":18,"s":[462.607,382.139,0]}]},"a":{"a":0,"k":[0.5,-3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":3,"s":[-12,12,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7.285,"s":[66.196,66.196,100]},{"t":18,"s":[-20,146.949,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-33.589,-48.117],[-0.773,-35.441],[31.137,-49.26],[29.924,-13.961],[50.837,12.545],[19.926,22.408],[3.505,49.26],[-18.178,21.74],[-50.837,14.541],[-30.985,-14.114]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.098039208206,0.968166097005,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":12},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":18,"st":3,"bm":0},{"ddd":0,"ind":180,"ty":4,"nm":"zvezda","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":18,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.732],"y":[1.006]},"o":{"x":[0.405],"y":[-0.015]},"t":5.535,"s":[224.555]},{"t":15.673828125,"s":[248.913]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.554},"t":3,"s":[283.558,305.163,0],"to":[75.379,80.787,0],"ti":[35.835,-5.797,0]},{"t":18,"s":[300.098,449.494,0]}]},"a":{"a":0,"k":[0.5,-3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":3,"s":[-12,12,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7.285,"s":[85.596,85.596,100]},{"t":18,"s":[0.77,111.855,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-33.589,-48.117],[-0.773,-35.441],[31.137,-49.26],[29.924,-13.961],[50.837,12.545],[19.926,22.408],[3.505,49.26],[-18.178,21.74],[-50.837,14.541],[-30.985,-14.114]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.498039245605,0.988235353956,0.086274509804,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":18},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":18,"st":3,"bm":0},{"ddd":0,"ind":181,"ty":4,"nm":"zvezda","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":19,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.732],"y":[0.997]},"o":{"x":[0.405],"y":[0.007]},"t":5.666,"s":[98]},{"t":18.78125,"s":[31.724]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.581},"t":3,"s":[195.303,220.26,0],"to":[-18,-29.667,0],"ti":[46,36.667,0]},{"t":18.78125,"s":[76.803,103.76,0]}]},"a":{"a":0,"k":[0.5,-3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":3,"s":[-12,12,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7.51,"s":[60.628,60.628,100]},{"t":18.78125,"s":[0.741,59.508,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-33.589,-48.117],[-0.773,-35.441],[31.137,-49.26],[29.924,-13.961],[50.837,12.545],[19.926,22.408],[3.505,49.26],[-18.178,21.74],[-50.837,14.541],[-30.985,-14.114]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.098039208206,0.182929723403,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":18},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":19,"st":3,"bm":0},{"ddd":0,"ind":182,"ty":4,"nm":"zvezda","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":18.78125,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.732],"y":[0.995]},"o":{"x":[0.405],"y":[0.012]},"t":5.666,"s":[98]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":16.334,"s":[67.664]},{"t":18.78125,"s":[94.142]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.756},"t":3,"s":[252.303,165.26,0],"to":[-19,-38.667,0],"ti":[-23,16.667,0]},{"t":18.78125,"s":[245.803,43.76,0]}]},"a":{"a":0,"k":[0.5,-3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":3,"s":[-12,12,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7.51,"s":[88.196,88.196,100]},{"t":18.78125,"s":[-1.563,70.464,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-33.589,-48.117],[-0.773,-35.441],[31.137,-49.26],[29.924,-13.961],[50.837,12.545],[19.926,22.408],[3.505,49.26],[-18.178,21.74],[-50.837,14.541],[-30.985,-14.114]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.098039208206,0.968166097005,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":13},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":19,"st":3,"bm":0},{"ddd":0,"ind":183,"ty":4,"nm":"zvezda","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":19,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.732],"y":[1.003]},"o":{"x":[0.405],"y":[-0.007]},"t":5.705,"s":[98]},{"t":19,"s":[164.813]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.446},"t":3,"s":[293.303,200.26,0],"to":[20,-108.667,0],"ti":[-26,-25.333,0]},{"t":19,"s":[459.803,121.76,0]}]},"a":{"a":0,"k":[0.5,-3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":3,"s":[-12,12,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7.572,"s":[90.196,90.196,100]},{"t":19,"s":[-1.707,74.473,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-33.589,-48.117],[-0.773,-35.441],[31.137,-49.26],[29.924,-13.961],[50.837,12.545],[19.926,22.408],[3.505,49.26],[-18.178,21.74],[-50.837,14.541],[-30.985,-14.114]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.490196108351,0.972549079446,0.164705882353,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":11},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":19,"st":3,"bm":0},{"ddd":0,"ind":184,"ty":4,"nm":"zvezda","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":19,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.732],"y":[0.997]},"o":{"x":[0.405],"y":[0.007]},"t":5.705,"s":[-34.436]},{"t":19,"s":[-100.711]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.551},"t":3,"s":[254.579,326.913,0],"to":[-32.749,22.303,0],"ti":[-41.978,-90.691,0]},{"t":19,"s":[237.206,485.893,0]}]},"a":{"a":0,"k":[0.5,-3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":3,"s":[-12,12,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7.572,"s":[80.628,80.628,100]},{"t":19,"s":[-5.699,91,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-33.589,-48.117],[-0.773,-35.441],[31.137,-49.26],[29.924,-13.961],[50.837,12.545],[19.926,22.408],[3.505,49.26],[-18.178,21.74],[-50.837,14.541],[-30.985,-14.114]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.098039208206,0.182929723403,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":13},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":19,"st":3,"bm":0},{"ddd":0,"ind":185,"ty":4,"nm":"zvezda","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":19,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.376],"y":[-0.018]},"t":5.705,"s":[-34.436]},{"t":19,"s":[-10.928]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.574},"t":3,"s":[191.526,319.957,0],"to":[-16.717,65.114,0],"ti":[27.82,5.729,0]},{"t":19,"s":[47.781,377.01,0]}]},"a":{"a":0,"k":[0.5,-3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":3,"s":[-12,12,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7.572,"s":[118.196,118.196,100]},{"t":19,"s":[26.737,118.196,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-33.589,-48.117],[-0.773,-35.441],[31.137,-49.26],[29.924,-13.961],[50.837,12.545],[19.926,22.408],[3.505,49.26],[-18.178,21.74],[-50.837,14.541],[-30.985,-14.114]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.098039208206,0.968166097005,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":11},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":19,"st":3,"bm":0},{"ddd":0,"ind":186,"ty":4,"nm":"zvezda","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[100]},{"t":19,"s":[0]}]},"r":{"a":1,"k":[{"i":{"x":[0.732],"y":[1.005]},"o":{"x":[0.405],"y":[-0.013]},"t":5.705,"s":[-34.436]},{"t":19,"s":[1.052]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.513},"t":3,"s":[193.691,271.081,0],"to":[-93.695,14.564,0],"ti":[-1.153,36.283,0]},{"t":19,"s":[51.408,181.167,0]}]},"a":{"a":0,"k":[0.5,-3.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":3,"s":[-12,12,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7.572,"s":[73.196,73.196,100]},{"t":19,"s":[-6.575,86.765,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-33.589,-48.117],[-0.773,-35.441],[31.137,-49.26],[29.924,-13.961],[50.837,12.545],[19.926,22.408],[3.505,49.26],[-18.178,21.74],[-50.837,14.541],[-30.985,-14.114]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.416378245634,1,0.098039208206,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":13},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":19,"st":3,"bm":0},{"ddd":0,"ind":187,"ty":4,"nm":"zvezda svet 1","sr":1,"ks":{"r":{"a":0,"k":-12.561},"p":{"a":0,"k":[263.19,256.233,0]},"a":{"a":0,"k":[-397.19,252.733,0]},"s":{"a":1,"k":[{"i":{"x":[0.624,0.624,0.624],"y":[1,1,1]},"o":{"x":[0.99,0.99,0.727],"y":[0,0,0]},"t":0,"s":[207.066,207.066,100]},{"t":7.08984375,"s":[99.824,99.824,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.705},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[-3.221,-10.494],[0,0],[-2.661,-2.112],[0,0],[8.945,-6.441],[0,0],[1.082,-2.73],[0,0],[8.424,5.807],[0,0],[3.411,-0.413],[0,0],[-3.251,10.242],[-2.539,6.845],[-0.088,3.284],[4.061,4.723],[0,0],[-11.326,-0.218],[0,0],[-3.774,1.922],[0,0]],"o":[[0,0],[2.638,4.617],[0,0],[10.201,4.198],[0,0],[-1.95,3.566],[0,0],[-1.74,10.119],[0,0],[-3.454,-1.231],[0,0],[-10.537,2.198],[0,0],[1.606,-4.332],[0.089,-3.281],[-4.052,-4.708],[-6.232,-9.446],[0,0],[3.924,-1.257],[0,0],[7.254,-8.245]],"v":[[25.676,-95.702],[46.869,-49.239],[54.636,-40.238],[94.06,-18.739],[96.931,5.563],[66.954,42.237],[61.362,51.185],[41.713,93.969],[19.994,103.1],[-20.364,85.627],[-31.134,83.457],[-73.518,83.366],[-89.716,65.431],[-90.236,24.071],[-43.547,9.574],[-93.3,-5.775],[-100.414,-35.498],[-88.448,-57.195],[-46.399,-63.563],[-35.64,-68.294],[1.797,-100.835]],"c":true}]},{"t":6,"s":[{"i":[[-0.821,-15.05],[0,0],[-3.863,-1.594],[0,0],[13.886,-5.803],[0,0],[0.63,-3.596],[0,0],[8.186,9.204],[0,0],[3.736,-0.77],[0,0],[-6.072,12.747],[0,0],[0.399,2.214],[1.047,1.597],[0,0],[-17.008,-2.299],[0,0],[-2.722,3.075],[0,0]],"o":[[0,0],[1.239,3.991],[0,0],[14.762,5.058],[0,0],[-2.957,2.142],[0,0],[0.589,16.115],[0,0],[-3.146,-2.157],[0,0],[-15.065,5.947],[0,0],[0.694,-2.198],[-0.331,-1.834],[0,0],[-11.836,-11.138],[0,0],[4.106,0.072],[0,0],[7.39,-13.772]],"v":[[23.672,-96.402],[30.289,-42.844],[38.344,-34.027],[94.867,-15.708],[96.447,3.744],[41.219,25.782],[35.627,34.729],[39.417,96.074],[22.751,102.236],[-16.221,56.807],[-26.992,54.637],[-74.992,81.486],[-88.63,67.804],[-61.931,22.021],[-56.299,6.443],[-66.752,-6.747],[-99.88,-37.393],[-90.384,-55.446],[-35.152,-49.38],[-24.393,-54.111],[4.132,-100.354]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0.998431384563,1,0.866666674614,1]},{"t":6,"s":[1,1,1,1]}]},"o":{"a":0,"k":100},"w":{"a":0,"k":7},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-397.19,252.733]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":7,"st":-9,"bm":0},{"ddd":0,"ind":188,"ty":4,"nm":"zvezda svet 3","sr":1,"ks":{"o":{"a":0,"k":46},"r":{"a":0,"k":-12.561},"p":{"a":0,"k":[263.19,256.233,0]},"a":{"a":0,"k":[-397.19,252.733,0]},"s":{"a":1,"k":[{"i":{"x":[0.624,0.624,0.624],"y":[1,1,1]},"o":{"x":[0.99,0.99,0.727],"y":[0,0,0]},"t":0,"s":[207.066,207.066,100]},{"t":7.08984375,"s":[99.824,99.824,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.705},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[-3.221,-10.494],[0,0],[-2.661,-2.112],[0,0],[8.945,-6.441],[0,0],[1.082,-2.73],[0,0],[8.424,5.807],[0,0],[3.411,-0.413],[0,0],[-3.251,10.242],[-2.539,6.845],[-0.088,3.284],[4.061,4.723],[0,0],[-11.326,-0.218],[0,0],[-3.774,1.922],[0,0]],"o":[[0,0],[2.638,4.617],[0,0],[10.201,4.198],[0,0],[-1.95,3.566],[0,0],[-1.74,10.119],[0,0],[-3.454,-1.231],[0,0],[-10.537,2.198],[0,0],[1.606,-4.332],[0.089,-3.281],[-4.052,-4.708],[-6.232,-9.446],[0,0],[3.924,-1.257],[0,0],[7.254,-8.245]],"v":[[25.676,-95.702],[46.869,-49.239],[54.636,-40.238],[94.06,-18.739],[96.931,5.563],[66.954,42.237],[61.362,51.185],[41.713,93.969],[19.994,103.1],[-20.364,85.627],[-31.134,83.457],[-73.518,83.366],[-89.716,65.431],[-90.236,24.071],[-43.547,9.574],[-93.3,-5.775],[-100.414,-35.498],[-88.448,-57.195],[-46.399,-63.563],[-35.64,-68.294],[1.797,-100.835]],"c":true}]},{"t":6,"s":[{"i":[[-0.821,-15.05],[0,0],[-3.863,-1.594],[0,0],[13.886,-5.803],[0,0],[0.63,-3.596],[0,0],[8.186,9.204],[0,0],[3.736,-0.77],[0,0],[-6.072,12.747],[0,0],[0.399,2.214],[1.047,1.597],[0,0],[-17.008,-2.299],[0,0],[-2.722,3.075],[0,0]],"o":[[0,0],[1.239,3.991],[0,0],[14.762,5.058],[0,0],[-2.957,2.142],[0,0],[0.589,16.115],[0,0],[-3.146,-2.157],[0,0],[-15.065,5.947],[0,0],[0.694,-2.198],[-0.331,-1.834],[0,0],[-11.836,-11.138],[0,0],[4.106,0.072],[0,0],[7.39,-13.772]],"v":[[23.672,-96.402],[30.289,-42.844],[38.344,-34.027],[94.867,-15.708],[96.447,3.744],[41.219,25.782],[35.627,34.729],[39.417,96.074],[22.751,102.236],[-16.221,56.807],[-26.992,54.637],[-74.992,81.486],[-88.63,67.804],[-61.931,22.021],[-56.299,6.443],[-66.752,-6.747],[-99.88,-37.393],[-90.384,-55.446],[-35.152,-49.38],[-24.393,-54.111],[4.132,-100.354]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0.989388619217,1,0.098039208206,1]},{"t":6,"s":[0.989388619217,1,0.098039208206,1]}]},"o":{"a":0,"k":100},"w":{"a":0,"k":23},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-397.19,252.733]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":7,"st":-9,"bm":0},{"ddd":0,"ind":189,"ty":4,"nm":"zvezda svet 14","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":10,"s":[40]},{"t":14,"s":[100]}]},"r":{"a":0,"k":-12.561},"p":{"a":0,"k":[263.19,256.233,0]},"a":{"a":0,"k":[-397.19,252.733,0]},"s":{"a":1,"k":[{"i":{"x":[0.624,0.624,0.624],"y":[1,1,1]},"o":{"x":[0.99,0.99,0.727],"y":[0,0,0]},"t":7,"s":[207.066,207.066,100]},{"t":14.08984375,"s":[99.824,99.824,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.705},"o":{"x":0.167,"y":0},"t":7,"s":[{"i":[[-3.221,-10.494],[0,0],[-2.661,-2.112],[0,0],[8.945,-6.441],[0,0],[1.082,-2.73],[0,0],[8.424,5.807],[0,0],[3.411,-0.413],[0,0],[-3.251,10.242],[-2.539,6.845],[-0.088,3.284],[4.061,4.723],[0,0],[-11.326,-0.218],[0,0],[-3.774,1.922],[0,0]],"o":[[0,0],[2.638,4.617],[0,0],[10.201,4.198],[0,0],[-1.95,3.566],[0,0],[-1.74,10.119],[0,0],[-3.454,-1.231],[0,0],[-10.537,2.198],[0,0],[1.606,-4.332],[0.089,-3.281],[-4.052,-4.708],[-6.232,-9.446],[0,0],[3.924,-1.257],[0,0],[7.254,-8.245]],"v":[[25.676,-95.702],[46.869,-49.239],[54.636,-40.238],[94.06,-18.739],[96.931,5.563],[66.954,42.237],[61.362,51.185],[41.713,93.969],[19.994,103.1],[-20.364,85.627],[-31.134,83.457],[-73.518,83.366],[-89.716,65.431],[-90.236,24.071],[-43.547,9.574],[-93.3,-5.775],[-100.414,-35.498],[-88.448,-57.195],[-46.399,-63.563],[-35.64,-68.294],[1.797,-100.835]],"c":true}]},{"t":14,"s":[{"i":[[-0.821,-15.05],[0,0],[-3.863,-1.594],[0,0],[13.886,-5.803],[0,0],[0.63,-3.596],[0,0],[8.186,9.204],[0,0],[3.736,-0.77],[0,0],[-6.072,12.747],[0,0],[0.399,2.214],[1.047,1.597],[0,0],[-17.008,-2.299],[0,0],[-2.722,3.075],[0,0]],"o":[[0,0],[1.239,3.991],[0,0],[14.762,5.058],[0,0],[-2.957,2.142],[0,0],[0.589,16.115],[0,0],[-3.146,-2.157],[0,0],[-15.065,5.947],[0,0],[0.694,-2.198],[-0.331,-1.834],[0,0],[-11.836,-11.138],[0,0],[4.106,0.072],[0,0],[7.39,-13.772]],"v":[[23.672,-96.402],[30.289,-42.844],[38.344,-34.027],[94.867,-15.708],[96.447,3.744],[41.219,25.782],[35.627,34.729],[39.417,96.074],[22.751,102.236],[-16.221,56.807],[-26.992,54.637],[-74.992,81.486],[-88.63,67.804],[-61.931,22.021],[-56.299,6.443],[-66.752,-6.747],[-99.88,-37.393],[-90.384,-55.446],[-35.152,-49.38],[-24.393,-54.111],[4.132,-100.354]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[0.989388619217,1,0.098039208206,1]},{"t":14,"s":[0.989388619217,1,0.098039208206,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":7,"s":[40]},{"t":14,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-397.19,252.733]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":7,"op":14,"st":-2,"bm":0},{"ddd":0,"ind":190,"ty":4,"nm":"zvezda svet 13","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[40]},{"t":11,"s":[100]}]},"r":{"a":0,"k":-12.561},"p":{"a":0,"k":[263.19,256.233,0]},"a":{"a":0,"k":[-397.19,252.733,0]},"s":{"a":1,"k":[{"i":{"x":[0.624,0.624,0.624],"y":[1,1,1]},"o":{"x":[0.99,0.99,0.727],"y":[0,0,0]},"t":4,"s":[207.066,207.066,100]},{"t":11.08984375,"s":[99.824,99.824,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.705},"o":{"x":0.167,"y":0},"t":4,"s":[{"i":[[-3.221,-10.494],[0,0],[-2.661,-2.112],[0,0],[8.945,-6.441],[0,0],[1.082,-2.73],[0,0],[8.424,5.807],[0,0],[3.411,-0.413],[0,0],[-3.251,10.242],[-2.539,6.845],[-0.088,3.284],[4.061,4.723],[0,0],[-11.326,-0.218],[0,0],[-3.774,1.922],[0,0]],"o":[[0,0],[2.638,4.617],[0,0],[10.201,4.198],[0,0],[-1.95,3.566],[0,0],[-1.74,10.119],[0,0],[-3.454,-1.231],[0,0],[-10.537,2.198],[0,0],[1.606,-4.332],[0.089,-3.281],[-4.052,-4.708],[-6.232,-9.446],[0,0],[3.924,-1.257],[0,0],[7.254,-8.245]],"v":[[25.676,-95.702],[46.869,-49.239],[54.636,-40.238],[94.06,-18.739],[96.931,5.563],[66.954,42.237],[61.362,51.185],[41.713,93.969],[19.994,103.1],[-20.364,85.627],[-31.134,83.457],[-73.518,83.366],[-89.716,65.431],[-90.236,24.071],[-43.547,9.574],[-93.3,-5.775],[-100.414,-35.498],[-88.448,-57.195],[-46.399,-63.563],[-35.64,-68.294],[1.797,-100.835]],"c":true}]},{"t":11,"s":[{"i":[[-0.821,-15.05],[0,0],[-3.863,-1.594],[0,0],[13.886,-5.803],[0,0],[0.63,-3.596],[0,0],[8.186,9.204],[0,0],[3.736,-0.77],[0,0],[-6.072,12.747],[0,0],[0.399,2.214],[1.047,1.597],[0,0],[-17.008,-2.299],[0,0],[-2.722,3.075],[0,0]],"o":[[0,0],[1.239,3.991],[0,0],[14.762,5.058],[0,0],[-2.957,2.142],[0,0],[0.589,16.115],[0,0],[-3.146,-2.157],[0,0],[-15.065,5.947],[0,0],[0.694,-2.198],[-0.331,-1.834],[0,0],[-11.836,-11.138],[0,0],[4.106,0.072],[0,0],[7.39,-13.772]],"v":[[23.672,-96.402],[30.289,-42.844],[38.344,-34.027],[94.867,-15.708],[96.447,3.744],[41.219,25.782],[35.627,34.729],[39.417,96.074],[22.751,102.236],[-16.221,56.807],[-26.992,54.637],[-74.992,81.486],[-88.63,67.804],[-61.931,22.021],[-56.299,6.443],[-66.752,-6.747],[-99.88,-37.393],[-90.384,-55.446],[-35.152,-49.38],[-24.393,-54.111],[4.132,-100.354]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[0.989388619217,1,0.098039208206,1]},{"t":11,"s":[0.989388619217,1,0.098039208206,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":4,"s":[40]},{"t":11,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-397.19,252.733]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":4,"op":11,"st":-5,"bm":0},{"ddd":0,"ind":191,"ty":4,"nm":"zvezda svet 12","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":5,"s":[40]},{"t":9,"s":[100]}]},"r":{"a":0,"k":-12.561},"p":{"a":0,"k":[263.19,256.233,0]},"a":{"a":0,"k":[-397.19,252.733,0]},"s":{"a":1,"k":[{"i":{"x":[0.624,0.624,0.624],"y":[1,1,1]},"o":{"x":[0.99,0.99,0.727],"y":[0,0,0]},"t":2,"s":[207.066,207.066,100]},{"t":9.08984375,"s":[99.824,99.824,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.705},"o":{"x":0.167,"y":0},"t":2,"s":[{"i":[[-3.221,-10.494],[0,0],[-2.661,-2.112],[0,0],[8.945,-6.441],[0,0],[1.082,-2.73],[0,0],[8.424,5.807],[0,0],[3.411,-0.413],[0,0],[-3.251,10.242],[-2.539,6.845],[-0.088,3.284],[4.061,4.723],[0,0],[-11.326,-0.218],[0,0],[-3.774,1.922],[0,0]],"o":[[0,0],[2.638,4.617],[0,0],[10.201,4.198],[0,0],[-1.95,3.566],[0,0],[-1.74,10.119],[0,0],[-3.454,-1.231],[0,0],[-10.537,2.198],[0,0],[1.606,-4.332],[0.089,-3.281],[-4.052,-4.708],[-6.232,-9.446],[0,0],[3.924,-1.257],[0,0],[7.254,-8.245]],"v":[[25.676,-95.702],[46.869,-49.239],[54.636,-40.238],[94.06,-18.739],[96.931,5.563],[66.954,42.237],[61.362,51.185],[41.713,93.969],[19.994,103.1],[-20.364,85.627],[-31.134,83.457],[-73.518,83.366],[-89.716,65.431],[-90.236,24.071],[-43.547,9.574],[-93.3,-5.775],[-100.414,-35.498],[-88.448,-57.195],[-46.399,-63.563],[-35.64,-68.294],[1.797,-100.835]],"c":true}]},{"t":9,"s":[{"i":[[-0.821,-15.05],[0,0],[-3.863,-1.594],[0,0],[13.886,-5.803],[0,0],[0.63,-3.596],[0,0],[8.186,9.204],[0,0],[3.736,-0.77],[0,0],[-6.072,12.747],[0,0],[0.399,2.214],[1.047,1.597],[0,0],[-17.008,-2.299],[0,0],[-2.722,3.075],[0,0]],"o":[[0,0],[1.239,3.991],[0,0],[14.762,5.058],[0,0],[-2.957,2.142],[0,0],[0.589,16.115],[0,0],[-3.146,-2.157],[0,0],[-15.065,5.947],[0,0],[0.694,-2.198],[-0.331,-1.834],[0,0],[-11.836,-11.138],[0,0],[4.106,0.072],[0,0],[7.39,-13.772]],"v":[[23.672,-96.402],[30.289,-42.844],[38.344,-34.027],[94.867,-15.708],[96.447,3.744],[41.219,25.782],[35.627,34.729],[39.417,96.074],[22.751,102.236],[-16.221,56.807],[-26.992,54.637],[-74.992,81.486],[-88.63,67.804],[-61.931,22.021],[-56.299,6.443],[-66.752,-6.747],[-99.88,-37.393],[-90.384,-55.446],[-35.152,-49.38],[-24.393,-54.111],[4.132,-100.354]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[0.989388619217,1,0.098039208206,1]},{"t":9,"s":[0.989388619217,1,0.098039208206,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":2,"s":[40]},{"t":9,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-397.19,252.733]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":2,"op":9,"st":-7,"bm":0},{"ddd":0,"ind":192,"ty":4,"nm":"zvezda svet 4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[40]},{"t":7,"s":[100]}]},"r":{"a":0,"k":-12.561},"p":{"a":0,"k":[263.19,256.233,0]},"a":{"a":0,"k":[-397.19,252.733,0]},"s":{"a":1,"k":[{"i":{"x":[0.624,0.624,0.624],"y":[1,1,1]},"o":{"x":[0.99,0.99,0.727],"y":[0,0,0]},"t":0,"s":[207.066,207.066,100]},{"t":7.08984375,"s":[99.824,99.824,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.705},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[-3.221,-10.494],[0,0],[-2.661,-2.112],[0,0],[8.945,-6.441],[0,0],[1.082,-2.73],[0,0],[8.424,5.807],[0,0],[3.411,-0.413],[0,0],[-3.251,10.242],[-2.539,6.845],[-0.088,3.284],[4.061,4.723],[0,0],[-11.326,-0.218],[0,0],[-3.774,1.922],[0,0]],"o":[[0,0],[2.638,4.617],[0,0],[10.201,4.198],[0,0],[-1.95,3.566],[0,0],[-1.74,10.119],[0,0],[-3.454,-1.231],[0,0],[-10.537,2.198],[0,0],[1.606,-4.332],[0.089,-3.281],[-4.052,-4.708],[-6.232,-9.446],[0,0],[3.924,-1.257],[0,0],[7.254,-8.245]],"v":[[25.676,-95.702],[46.869,-49.239],[54.636,-40.238],[94.06,-18.739],[96.931,5.563],[66.954,42.237],[61.362,51.185],[41.713,93.969],[19.994,103.1],[-20.364,85.627],[-31.134,83.457],[-73.518,83.366],[-89.716,65.431],[-90.236,24.071],[-43.547,9.574],[-93.3,-5.775],[-100.414,-35.498],[-88.448,-57.195],[-46.399,-63.563],[-35.64,-68.294],[1.797,-100.835]],"c":true}]},{"t":7,"s":[{"i":[[-0.821,-15.05],[0,0],[-3.863,-1.594],[0,0],[13.886,-5.803],[0,0],[0.63,-3.596],[0,0],[8.186,9.204],[0,0],[3.736,-0.77],[0,0],[-6.072,12.747],[0,0],[0.399,2.214],[1.047,1.597],[0,0],[-17.008,-2.299],[0,0],[-2.722,3.075],[0,0]],"o":[[0,0],[1.239,3.991],[0,0],[14.762,5.058],[0,0],[-2.957,2.142],[0,0],[0.589,16.115],[0,0],[-3.146,-2.157],[0,0],[-15.065,5.947],[0,0],[0.694,-2.198],[-0.331,-1.834],[0,0],[-11.836,-11.138],[0,0],[4.106,0.072],[0,0],[7.39,-13.772]],"v":[[23.672,-96.402],[30.289,-42.844],[38.344,-34.027],[94.867,-15.708],[96.447,3.744],[41.219,25.782],[35.627,34.729],[39.417,96.074],[22.751,102.236],[-16.221,56.807],[-26.992,54.637],[-74.992,81.486],[-88.63,67.804],[-61.931,22.021],[-56.299,6.443],[-66.752,-6.747],[-99.88,-37.393],[-90.384,-55.446],[-35.152,-49.38],[-24.393,-54.111],[4.132,-100.354]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0.989388619217,1,0.098039208206,1]},{"t":7,"s":[0.989388619217,1,0.098039208206,1]}]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[40]},{"t":7,"s":[10]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-397.19,252.733]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":0,"op":7,"st":-9,"bm":0},{"ddd":0,"ind":193,"ty":4,"nm":"Luch sveta 13","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0.024]},"t":9.719,"s":[100]},{"t":24,"s":[0]}]},"r":{"a":0,"k":-106.706},"p":{"a":0,"k":[245.145,273.42,0]},"a":{"a":0,"k":[18,56,0]},"s":{"a":0,"k":[157.44,106.595,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.285,"y":0},"t":3,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[28.934,65.727],[-9.548,-232.046],[-18.625,-230.494],[-27.642,-228.952],[15.658,68.08],[22.774,66.819]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[32.49,-13.813],[51.426,-169.101],[5.538,-258.488],[-28.625,-160.829],[1.637,-3.608],[18.045,2.364]],"c":true}]},{"t":23.25,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[19.641,23.658],[7.272,-222.264],[8.366,-224.044],[7.888,-222.956],[20.114,22.209],[20.152,23.209]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.139,1,1,1,0.309,1,0.974,0.563,0.479,1,0.949,0.125,0.739,1,0.974,0.563,1,1,1,1,0.138,0,0.307,0.3,0.477,0.6,0.708,0.3,0.94,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[17.871,4.77],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[19.479,-29.756],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[20.321,62.035]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[10.682,-157.765],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[18.054,-174.657],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[15.871,-190.393]}]},"t":1,"nm":"Gradient Fill 258","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":24,"st":3,"bm":0},{"ddd":0,"ind":194,"ty":4,"nm":"Luch sveta 12","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0.024]},"t":9.719,"s":[100]},{"t":24,"s":[0]}]},"r":{"a":0,"k":183.878},"p":{"a":0,"k":[268.492,272.287,0]},"a":{"a":0,"k":[18,56,0]},"s":{"a":0,"k":[157.44,106.595,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.285,"y":0},"t":3,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[28.934,65.727],[-9.548,-232.046],[-18.625,-230.494],[-27.642,-228.952],[15.658,68.08],[22.774,66.819]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[33.082,-17.102],[46.045,-165.284],[14.903,-165.397],[-21.506,-158.195],[1.498,-7.758],[18.045,2.364]],"c":true}]},{"t":23.25,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[19.641,23.658],[7.272,-222.264],[8.366,-224.044],[7.888,-222.956],[20.114,22.209],[20.152,23.209]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.139,1,1,1,0.308,1,0.974,0.563,0.476,1,0.949,0.125,0.738,1,0.974,0.563,1,1,1,1,0.138,0,0.307,0.3,0.477,0.6,0.708,0.3,0.94,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[17.871,4.77],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[19.479,-29.756],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[20.321,62.035]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[10.682,-157.765],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[18.054,-174.657],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[15.871,-190.393]}]},"t":1,"nm":"Gradient Fill 259","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":24,"st":3,"bm":0},{"ddd":0,"ind":195,"ty":4,"nm":"Luch sveta 11","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0.024]},"t":9.719,"s":[100]},{"t":24,"s":[0]}]},"r":{"a":0,"k":122.287},"p":{"a":0,"k":[276.268,252.761,0]},"a":{"a":0,"k":[18,56,0]},"s":{"a":0,"k":[157.44,106.595,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.285,"y":0},"t":3,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[28.934,65.727],[-9.548,-232.046],[-18.625,-230.494],[-27.642,-228.952],[15.658,68.08],[22.774,66.819]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[33.721,-14.881],[42.377,-169.937],[5.538,-258.488],[-25.945,-159.394],[0.826,-2.079],[18.045,2.364]],"c":true}]},{"t":23.25,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[19.641,23.658],[7.272,-222.264],[8.366,-224.044],[7.888,-222.956],[20.114,22.209],[20.152,23.209]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.139,1,1,1,0.307,1,0.974,0.563,0.474,1,0.949,0.125,0.737,1,0.974,0.563,1,1,1,1,0.138,0,0.307,0.3,0.477,0.6,0.708,0.3,0.94,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[17.871,4.77],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[19.479,-29.756],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[20.321,62.035]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[10.682,-157.765],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[18.054,-174.657],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[15.871,-190.393]}]},"t":1,"nm":"Gradient Fill 260","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":24,"st":3,"bm":0},{"ddd":0,"ind":196,"ty":4,"nm":"Luch sveta 10","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0.024]},"t":9.719,"s":[100]},{"t":24,"s":[0]}]},"r":{"a":0,"k":45.668},"p":{"a":0,"k":[257.54,235.532,0]},"a":{"a":0,"k":[18,56,0]},"s":{"a":0,"k":[157.44,106.595,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.285,"y":0},"t":3,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[28.934,65.727],[-9.548,-232.046],[-18.625,-230.494],[-27.642,-228.952],[15.658,68.08],[22.774,66.819]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[33.454,-15.989],[46.885,-179.865],[5.538,-258.488],[-27.97,-168.651],[0.242,-11.585],[18.045,2.364]],"c":true}]},{"t":23.25,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[19.641,23.658],[7.272,-222.264],[8.366,-224.044],[7.888,-222.956],[20.114,22.209],[20.152,23.209]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.139,1,1,1,0.308,1,0.974,0.563,0.476,1,0.949,0.125,0.738,1,0.974,0.563,1,1,1,1,0.138,0,0.307,0.3,0.477,0.6,0.708,0.3,0.94,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[17.871,4.77],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[19.479,-29.756],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[20.321,62.035]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[10.682,-157.765],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[18.054,-174.657],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[15.871,-190.393]}]},"t":1,"nm":"Gradient Fill 261","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":24,"st":3,"bm":0},{"ddd":0,"ind":197,"ty":4,"nm":"Luch sveta 9","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0.024]},"t":10,"s":[100]},{"t":24,"s":[0]}]},"r":{"a":0,"k":-50.074},"p":{"a":0,"k":[252.892,235.711,0]},"a":{"a":0,"k":[18,56,0]},"s":{"a":0,"k":[-157.44,106.595,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.285,"y":0},"t":3,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[28.934,65.727],[-9.548,-232.046],[-18.625,-230.494],[-27.642,-228.952],[15.658,68.08],[22.774,66.819]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[30.671,-11.928],[45.12,-169.727],[5.538,-258.488],[-18.275,-163.089],[2.656,-1.068],[18.045,2.364]],"c":true}]},{"t":23.25,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[19.641,23.658],[7.272,-222.264],[8.366,-224.044],[7.888,-222.956],[20.114,22.209],[20.152,23.209]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.139,1,1,1,0.31,1,0.974,0.563,0.481,1,0.949,0.125,0.741,1,0.974,0.563,1,1,1,1,0.138,0,0.307,0.3,0.477,0.6,0.708,0.3,0.94,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[17.871,4.77],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[19.479,-29.756],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[20.321,62.035]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[10.682,-157.765],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[18.054,-174.657],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[15.871,-190.393]}]},"t":1,"nm":"Gradient Fill 262","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":24,"st":3,"bm":0},{"ddd":0,"ind":198,"ty":4,"nm":"Luch sveta 8","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.215],"y":[1]},"o":{"x":[0.724],"y":[0.031]},"t":10,"s":[55]},{"t":24,"s":[0]}]},"r":{"a":0,"k":-106.706},"p":{"a":0,"k":[245.145,273.42,0]},"a":{"a":0,"k":[18,56,0]},"s":{"a":0,"k":[157.44,106.595,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.285,"y":0},"t":3,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[28.934,65.727],[-9.548,-232.046],[-18.625,-230.494],[-27.642,-228.952],[15.658,68.08],[22.774,66.819]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[48.248,-19.561],[75.7,-171.074],[5.538,-258.488],[-49.432,-156.34],[-15.397,-1.365],[18.045,2.364]],"c":true}]},{"t":23.25,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[19.641,23.658],[7.272,-222.264],[8.366,-224.044],[7.888,-222.956],[20.114,22.209],[20.152,23.209]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.139,1,1,1,0.309,1,0.974,0.563,0.479,1,0.949,0.125,0.739,1,0.974,0.563,1,1,1,1,0.138,0,0.307,0.3,0.477,0.6,0.708,0.3,0.94,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[17.871,4.77],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[19.479,-29.756],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[20.321,62.035]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[10.682,-157.765],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[18.054,-174.657],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[15.871,-190.393]}]},"t":1,"nm":"Gradient Fill 263","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":24,"st":3,"bm":0},{"ddd":0,"ind":199,"ty":4,"nm":"Luch sveta 7","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.215],"y":[1]},"o":{"x":[0.724],"y":[0.031]},"t":10,"s":[55]},{"t":24,"s":[0]}]},"r":{"a":0,"k":183.878},"p":{"a":0,"k":[268.492,272.287,0]},"a":{"a":0,"k":[18,56,0]},"s":{"a":0,"k":[157.44,106.595,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.285,"y":0},"t":3,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[28.934,65.727],[-9.548,-232.046],[-18.625,-230.494],[-27.642,-228.952],[15.658,68.08],[22.774,66.819]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[48.248,-19.561],[75.7,-171.074],[5.538,-258.488],[-49.432,-156.34],[-15.397,-1.365],[18.045,2.364]],"c":true}]},{"t":23.25,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[19.641,23.658],[7.272,-222.264],[8.366,-224.044],[7.888,-222.956],[20.114,22.209],[20.152,23.209]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.139,1,1,1,0.308,1,0.974,0.563,0.476,1,0.949,0.125,0.738,1,0.974,0.563,1,1,1,1,0.138,0,0.307,0.3,0.477,0.6,0.708,0.3,0.94,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[17.871,4.77],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[19.479,-29.756],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[20.321,62.035]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[10.682,-157.765],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[18.054,-174.657],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[15.871,-190.393]}]},"t":1,"nm":"Gradient Fill 264","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":24,"st":3,"bm":0},{"ddd":0,"ind":200,"ty":4,"nm":"Luch sveta 6","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.215],"y":[1]},"o":{"x":[0.724],"y":[0.031]},"t":10,"s":[55]},{"t":24,"s":[0]}]},"r":{"a":0,"k":122.287},"p":{"a":0,"k":[276.268,252.761,0]},"a":{"a":0,"k":[18,56,0]},"s":{"a":0,"k":[157.44,106.595,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.285,"y":0},"t":3,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[28.934,65.727],[-9.548,-232.046],[-18.625,-230.494],[-27.642,-228.952],[15.658,68.08],[22.774,66.819]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[48.248,-19.561],[75.7,-171.074],[5.538,-258.488],[-49.432,-156.34],[-15.397,-1.365],[18.045,2.364]],"c":true}]},{"t":23.25,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[19.641,23.658],[7.272,-222.264],[8.366,-224.044],[7.888,-222.956],[20.114,22.209],[20.152,23.209]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.139,1,1,1,0.307,1,0.974,0.563,0.474,1,0.949,0.125,0.737,1,0.974,0.563,1,1,1,1,0.138,0,0.307,0.3,0.477,0.6,0.708,0.3,0.94,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[17.871,4.77],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[19.479,-29.756],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[20.321,62.035]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[10.682,-157.765],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[18.054,-174.657],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[15.871,-190.393]}]},"t":1,"nm":"Gradient Fill 265","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":24,"st":3,"bm":0},{"ddd":0,"ind":201,"ty":4,"nm":"Luch sveta 5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.215],"y":[1]},"o":{"x":[0.724],"y":[0.031]},"t":10,"s":[55]},{"t":24,"s":[0]}]},"r":{"a":0,"k":45.668},"p":{"a":0,"k":[257.54,235.532,0]},"a":{"a":0,"k":[18,56,0]},"s":{"a":0,"k":[157.44,106.595,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.285,"y":0},"t":3,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[28.934,65.727],[-9.548,-232.046],[-18.625,-230.494],[-27.642,-228.952],[15.658,68.08],[22.774,66.819]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[48.248,-19.561],[75.7,-171.074],[5.538,-258.488],[-49.432,-156.34],[-15.397,-1.365],[18.045,2.364]],"c":true}]},{"t":23.25,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[19.641,23.658],[7.272,-222.264],[8.366,-224.044],[7.888,-222.956],[20.114,22.209],[20.152,23.209]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.139,1,1,1,0.308,1,0.974,0.563,0.476,1,0.949,0.125,0.738,1,0.974,0.563,1,1,1,1,0.138,0,0.307,0.3,0.477,0.6,0.708,0.3,0.94,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[17.871,4.77],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[19.479,-29.756],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[20.321,62.035]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[10.682,-157.765],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[18.054,-174.657],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[15.871,-190.393]}]},"t":1,"nm":"Gradient Fill 266","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":24,"st":3,"bm":0},{"ddd":0,"ind":202,"ty":4,"nm":"Luch sveta 4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.215],"y":[1]},"o":{"x":[0.724],"y":[0.031]},"t":10,"s":[55]},{"t":24,"s":[0]}]},"r":{"a":0,"k":-50.074},"p":{"a":0,"k":[252.892,235.711,0]},"a":{"a":0,"k":[18,56,0]},"s":{"a":0,"k":[-157.44,106.595,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.285,"y":0},"t":3,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[28.934,65.727],[-9.548,-232.046],[-18.625,-230.494],[-27.642,-228.952],[15.658,68.08],[22.774,66.819]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[48.248,-19.561],[75.7,-171.074],[5.538,-258.488],[-49.432,-156.34],[-15.397,-1.365],[18.045,2.364]],"c":true}]},{"t":23.25,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[19.641,23.658],[7.272,-222.264],[8.366,-224.044],[7.888,-222.956],[20.114,22.209],[20.152,23.209]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0.139,1,1,1,0.31,1,0.974,0.563,0.481,1,0.949,0.125,0.741,1,0.974,0.563,1,1,1,1,0.138,0,0.307,0.3,0.477,0.6,0.708,0.3,0.94,0]}},"s":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[17.871,4.77],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[19.479,-29.756],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[20.321,62.035]}]},"e":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[10.682,-157.765],"to":[0,0],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[18.054,-174.657],"to":[0,0],"ti":[0,0]},{"t":23.25,"s":[15.871,-190.393]}]},"t":1,"nm":"Gradient Fill 267","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Group 1","bm":0,"hd":false}],"ip":3,"op":24,"st":3,"bm":0},{"ddd":0,"ind":203,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":11.902,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12.732,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18.537,"s":[100]},{"t":21.853515625,"s":[0]}]},"p":{"a":0,"k":[256,256,0]},"s":{"a":0,"k":[75.063,75.063,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[7.63,12.716],[14,-33],[-21,-43],[-20.229,19.616],[-0.112,109.698],[7.797,-7.631],[4.022,-6.911],[14.599,-10.388],[13.34,0.037],[15.243,9.298],[-7.687,24.54],[0.73,2.776],[7.842,6.659],[-4.345,14.316],[-5.841,3.114],[-13.823,-0.41],[-7.686,-6.903],[-6.148,-14.105],[4.014,-4.363],[0.045,2.152]],"o":[[-18,-30],[-14,33],[21,43],[16.845,-16.335],[0,-0.137],[-4.509,4.413],[-2.089,2.757],[-13.836,14.229],[-12.502,-0.035],[-9.11,-5.557],[3.241,-10.347],[-0.565,-2.147],[-4.417,-3.75],[4.344,-14.316],[4.413,-2.353],[19.019,0.564],[3.305,2.089],[4.47,10.254],[15.005,-2.032],[-1.55,-74.835]],"v":[[313.604,-295.275],[-300.282,-290.611],[-306.275,297.94],[304.604,309.604],[325.58,10.323],[79.779,7.244],[66.535,25.386],[58.672,85.991],[-1.726,83.562],[-57.208,87.287],[-67.187,41.321],[-56.017,24.867],[-75.119,13.991],[-95.934,-21.654],[-43.38,-43.609],[-2.033,-92.154],[39.326,-44.72],[90.451,-23.576],[79.916,7.028],[325.489,6.493]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.917646998985,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":0},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":5,"k":{"a":0,"k":[0,0.991,1,0.263,0.292,0.991,1,0.263,0.585,0.991,1,0.263,0.792,0.992,1,0.263,1,0.992,1,0.263,0,0,0.139,0,0.278,0,0.432,0.33,0.587,0.66,0.876,0.33,1,0]}},"s":{"a":0,"k":[2,2]},"e":{"a":0,"k":[321.94,5.987]},"t":2,"h":{"a":0,"k":0},"a":{"a":0,"k":0},"nm":"Gradient Fill 268","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shape 1","bm":0,"hd":false}],"ip":12,"op":22,"st":-8,"bm":0}]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/stars_send.json b/TMessagesProj/src/main/res/raw/stars_send.json new file mode 100644 index 00000000000..d737d67a747 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/stars_send.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":0,"op":140,"w":512,"h":512,"nm":"Prem Star Move 6","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Null 2","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":0,"k":[259,267,0]},"s":{"a":1,"k":[{"i":{"x":[0.5,0.5,0.5],"y":[1,1,1]},"o":{"x":[0.481,0.481,0.3],"y":[0,0,0]},"t":14,"s":[100,100,100]},{"i":{"x":[0.568,0.568,0.7],"y":[1,1,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":67,"s":[112,112,100]},{"t":110,"s":[100,100,100]}]}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Star Main","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.41],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.766],"y":[0.974]},"o":{"x":[0.449],"y":[0]},"t":14,"s":[-14]},{"i":{"x":[0.473],"y":[0.884]},"o":{"x":[0.086],"y":[-0.023]},"t":23,"s":[12]},{"i":{"x":[0.762],"y":[1]},"o":{"x":[0.465],"y":[-0.42]},"t":36,"s":[-4]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.341],"y":[0]},"t":56,"s":[2]},{"i":{"x":[0.84],"y":[1]},"o":{"x":[1],"y":[0]},"t":80,"s":[-5]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.311],"y":[0]},"t":113,"s":[20]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":127,"s":[-2]},{"t":138,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.41,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[-2.939,-7.668,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.6,"y":0.871},"o":{"x":0.582,"y":0},"t":14,"s":[-49.939,-15.668,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":0.947},"o":{"x":0.5,"y":0.229},"t":31,"s":[25.061,-1.668,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":0.942},"o":{"x":0.5,"y":0.085},"t":54,"s":[-44.939,-21.668,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.685,"y":0.939},"o":{"x":0.5,"y":0.086},"t":78,"s":[32.587,-5.668,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":0.961},"o":{"x":0.7,"y":0.102},"t":102,"s":[-56.939,3.332,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.299,"y":1},"o":{"x":0.211,"y":0.038},"t":119,"s":[27.061,2.332,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":129,"s":[-4.939,-13.668,0],"to":[0,0,0],"ti":[0,0,0]},{"t":139,"s":[-2.939,-7.668,0]}]},"a":{"a":0,"k":[0.061,3.332,0]},"s":{"a":1,"k":[{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.41,0.41,0.41],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":5,"s":[105,95,100]},{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.582,0.582,0.582],"y":[0,0,0]},"t":14,"s":[95,105,100]},{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":31,"s":[105,95,100]},{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":54,"s":[95,105,100]},{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":78,"s":[105,95,100]},{"i":{"x":[0.72,0.72,0.72],"y":[1,1,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":102,"s":[95,105,100]},{"i":{"x":[0.51,0.51,0.51],"y":[1,1,1]},"o":{"x":[0.28,0.28,0.28],"y":[0,0,0]},"t":110,"s":[110,88,100]},{"i":{"x":[0.299,0.299,0.299],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":119,"s":[92,108,100]},{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":129,"s":[103,98,100]},{"t":139,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.365,"y":1},"o":{"x":0.7,"y":0},"t":11,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-162.5,-33],[-71.2,-45.9],[-45.5,-63.8],[-0.1,-152.2]],"c":false}]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-160.353,-21.808],[-59.929,-27.356],[-59.783,-27.348],[-49.876,-27.78]],"c":false}]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":51,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-101.489,-109.455],[50.336,-69.786],[50.363,-69.803],[50.75,-69.351]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":75,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-160.353,-21.808],[-49.865,-27.886],[-49.72,-27.878],[-49.876,-27.78]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":98,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-101.489,-109.455],[50.336,-69.786],[50.363,-69.803],[50.75,-69.351]],"c":false}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":106,"s":[{"i":[[0,0],[0,0],[-0.398,0.543],[0,0]],"o":[[0,0],[0.789,-0.13],[0,0],[0,0]],"v":[[-124.757,-82.678],[-35.133,-66.919],[-0.878,-61.071],[18.338,-59.168]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":122,"s":[{"i":[[0,0],[0,0],[-5.099,9.023],[0,0]],"o":[[0,0],[10.098,-2.161],[0,0],[0,0]],"v":[[-165.102,-42.752],[-73.877,-56.85],[-44.041,-76.213],[-6.416,-153.714]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":123,"s":[{"i":[[0,0],[0,0],[-5.105,9.01],[0,0]],"o":[[0,0],[10.092,-2.138],[0,0],[0,0]],"v":[[-156.761,-43.622],[-68.056,-55.46],[-37.593,-75.02],[2.989,-150.073]],"c":false}]},{"t":133,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-162.5,-33],[-71.2,-45.9],[-45.5,-63.8],[-0.1,-152.2]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.365],"y":[1]},"o":{"x":[0.7],"y":[0]},"t":11,"s":[17]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":28,"s":[5]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":51,"s":[14]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":75,"s":[5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.5],"y":[0]},"t":98,"s":[14]},{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":106,"s":[16]},{"t":122,"s":[17]}]},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":28,"s":[100]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":51,"s":[70]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":75,"s":[100]},{"i":{"x":[0.52],"y":[1]},"o":{"x":[0.8],"y":[0]},"t":98,"s":[70]},{"t":122,"s":[100]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Blik","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.6,"y":1},"o":{"x":0.7,"y":0},"t":11,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[75.9,-52.5],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[22.9,11.6],[118.1,-47.3]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":28,"s":[{"i":[[0,0],[4.536,0.898],[0,0],[1.5,0.009],[1.9,0.026],[0,0],[10.009,-0.844],[0,0],[1.231,-6.792],[-1.739,-0.736],[0,0],[-12.212,2.009],[0,0],[-1.716,-2.436],[-0.155,-0.293],[-21.112,3.146]],"o":[[-7.445,0.134],[0,0],[-0.8,-0.001],[-2.7,-0.016],[0,0],[0,0],[0,0],[-1.696,0.196],[-4.177,9.621],[0,0],[3.87,1.598],[0,0],[3.474,-0.596],[0.202,0.291],[8.522,-0.984],[0,0]],"v":[[75.983,-37.957],[49.009,-35.76],[18.304,-33.369],[5.057,-33.05],[-1.884,-32.424],[-38.157,-30.302],[-71.791,-28.108],[-160.933,-25.456],[-172.798,-20.003],[-160.408,-3.83],[-152.795,0.611],[-113.395,0.769],[53.673,-20.883],[62.176,-18.996],[62.689,-18.118],[163.596,-42.187]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":51,"s":[{"i":[[0,0],[8.436,1.476],[0,0],[1.5,0.01],[1.9,0.029],[0,0],[0,0],[0,0],[1.6,-1.391],[-4.3,-2.384],[0,0],[-12.3,1.559],[0,0],[-2.528,-4.569],[-0.223,-0.546],[-9.597,5.244]],"o":[[-12.088,-1.27],[0,0],[-0.8,-0.001],[-2.7,-0.018],[0,0],[0,0],[0,0],[-2.6,0.199],[-2.8,2.517],[0,0],[9.6,7.246],[0,0],[5.576,-0.75],[0.297,0.546],[1.463,-0.904],[0,0]],"v":[[76.477,-41.662],[47.571,-44.223],[10.756,-47.485],[6.967,-47.964],[-2.752,-48.728],[-46.484,-52.864],[-73.559,-54.867],[-162.268,-63.742],[-168.968,-61.491],[-166.268,-51.424],[-135.191,-23.984],[-98.199,-14.26],[63.486,-25.925],[77.018,-19.446],[77.761,-17.81],[146.771,-36.073]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":75,"s":[{"i":[[0,0],[4.536,0.898],[0,0],[1.5,0.009],[1.9,0.026],[0,0],[10.009,-0.844],[0,0],[1.231,-6.792],[-1.739,-0.736],[0,0],[-12.212,2.009],[0,0],[-1.716,-2.436],[-0.155,-0.293],[-21.112,3.146]],"o":[[-7.445,0.134],[0,0],[-0.8,-0.001],[-2.7,-0.016],[0,0],[0,0],[0,0],[-1.696,0.196],[-4.177,9.621],[0,0],[3.87,1.598],[0,0],[3.474,-0.596],[0.202,0.291],[8.522,-0.984],[0,0]],"v":[[75.983,-37.957],[49.009,-35.76],[18.304,-33.369],[5.057,-33.05],[-1.884,-32.424],[-38.157,-30.302],[-71.791,-28.108],[-160.933,-25.456],[-172.798,-20.003],[-160.408,-3.83],[-152.795,0.611],[-113.395,0.769],[53.673,-20.883],[62.176,-18.996],[62.689,-18.118],[163.596,-42.187]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.8,"y":0},"t":98,"s":[{"i":[[0,0],[8.436,1.476],[0,0],[1.5,0.01],[1.9,0.029],[0,0],[0,0],[0,0],[1.6,-1.391],[-4.3,-2.384],[0,0],[-12.3,1.559],[0,0],[-2.528,-4.569],[-0.223,-0.546],[-9.597,5.244]],"o":[[-12.088,-1.27],[0,0],[-0.8,-0.001],[-2.7,-0.018],[0,0],[0,0],[0,0],[-2.6,0.199],[-2.8,2.517],[0,0],[9.6,7.246],[0,0],[5.576,-0.75],[0.297,0.546],[1.463,-0.904],[0,0]],"v":[[76.477,-41.662],[47.571,-44.223],[10.756,-47.485],[6.967,-47.964],[-2.752,-48.728],[-46.484,-52.864],[-73.559,-54.867],[-162.268,-63.742],[-168.968,-61.491],[-166.268,-51.424],[-135.191,-23.984],[-98.199,-14.26],[63.486,-25.925],[77.018,-19.446],[77.761,-17.81],[146.771,-36.073]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":106,"s":[{"i":[[0,0],[8.501,1.784],[0,0],[1.556,0.043],[1.946,-0.232],[0,0],[0.797,-0.124],[0,0],[1.654,-1.166],[-4.489,-1.97],[0,0],[-12.783,1.311],[0,0],[-2.681,-3.798],[-0.236,-0.454],[-11.392,5.38]],"o":[[-12.509,-1.033],[0,0],[-0.836,-0.098],[-2.799,-0.077],[0,0],[-0.338,0.568],[0,0],[-2.702,0.177],[-2.894,2.11],[0,0],[10.021,5.81],[0,0],[5.915,-0.624],[0.316,0.454],[3.433,-1.658],[0,0]],"v":[[101.787,-39.946],[57.573,-31.975],[18.188,-38.774],[14.258,-39.334],[4.207,-39.636],[-40.197,-38.182],[-68.26,-38.472],[-160.374,-43.903],[-167.326,-41.997],[-164.446,-33.614],[-131.813,-11.759],[-93.577,-4.081],[52.621,0.187],[66.47,14.683],[67.259,16.044],[186.339,-13.715]],"c":true}]},{"i":{"x":0.9,"y":1},"o":{"x":0.3,"y":0},"t":122,"s":[{"i":[[0,0],[5.195,11.541],[0,0],[1.484,0.629],[1.575,-4.215],[0,0],[10.207,-2.064],[0,0],[1.619,-2.243],[-4.483,-3.668],[0,0],[-12.652,2.092],[0,0],[-2.489,-5.349],[-0.22,-0.639],[-27.933,25.035]],"o":[[-11.64,-1.574],[0,0],[-0.87,-1.619],[-2.668,-1.069],[0,0],[-4.329,9.443],[0,0],[-2.675,0.38],[-2.832,4.056],[0,0],[10.006,8.044],[0,0],[5.49,-0.878],[0.293,0.639],[19.765,-12.535],[0,0]],"v":[[72.747,-64.357],[45.715,-85.655],[-0.738,-160.224],[-4.513,-163.631],[-13.792,-159.278],[-50.486,-82.718],[-78.647,-64.408],[-165.84,-51.547],[-172.696,-47.812],[-169.669,-29.939],[-134.858,-2.041],[-98.682,5.967],[3.603,-9.084],[19.146,-2.336],[19.436,1.098],[112.294,-64.269]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.1,"y":0},"t":123,"s":[{"i":[[0,0],[5.201,11.525],[0,0],[1.485,0.631],[1.585,-4.205],[0,0],[10.201,-2.04],[0,0],[1.522,-2.305],[-4.629,-3.472],[0,0],[-12.541,2.615],[0,0],[-4.873,-10.376],[-0.229,-0.665],[-28.029,24.916]],"o":[[-11.654,-1.572],[0,0],[-0.868,-1.619],[-2.669,-1.073],[0,0],[-4.334,9.429],[0,0],[-2.654,0.491],[-2.656,4.164],[0,0],[10.326,7.607],[0,0],[5.729,-0.914],[0.311,0.662],[20.623,-13.045],[0,0]],"v":[[75.817,-61.467],[49.543,-86.728],[9.397,-157.217],[5.625,-160.627],[-3.674,-156.3],[-46.038,-82.287],[-72.573,-62.596],[-160.936,-50.065],[-167.623,-46.053],[-163.962,-30.342],[-132.511,-7.01],[-103.058,7.214],[3.79,-4.392],[23.689,6.753],[23.049,5.979],[115.919,-58.72]],"c":true}]},{"t":133,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[75.9,-52.5],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[22.9,11.6],[118.1,-47.3]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.850980401039,0.403921574354,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.6],"y":[1]},"o":{"x":[0.7],"y":[0]},"t":11,"s":[100]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":28,"s":[0]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.8],"y":[0]},"t":106,"s":[0]},{"t":122,"s":[100]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shine","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.41,"y":1},"o":{"x":0.7,"y":0},"t":11,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[4.3,8.6],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[13.8,32.5],[-70,75.5],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-90.3,166.1],[-15.4,127.5],[14.8,128.1],[87.1,167.8],[94.8,168.8]],"c":true}]},{"i":{"x":0.6,"y":1},"o":{"x":0.7,"y":0},"t":12,"s":[{"i":[[-2.358,4.807],[0,0],[0,0],[-9.522,-4.534],[-1.814,-3.809],[0,0],[-7.074,-0.907],[0,0],[1.324,-11.25],[3.265,-3.265],[0,0],[-0.453,-3.628],[0,0],[9.063,-2.288],[4.172,2.267],[0,0],[4.988,-2.63],[0,0],[5.042,10.085],[-0.726,5.079],[0,0],[-17.231,8.888],[0,0],[16.614,-4.327],[0,0],[11.518,9.432],[0,0],[-7.462,9.23],[-5.351,0.726],[0,0]],"o":[[0,0],[0,0],[4.716,-9.16],[3.718,1.814],[0,0],[4.423,11.793],[0,0],[11.88,1.451],[-0.544,4.625],[0,0],[-2.63,2.63],[0,0],[1.542,12.424],[-4.625,0.544],[0,0],[-6.348,-3.265],[0,0],[-9.976,5.169],[-1.904,-3.809],[0,0],[4.899,-16.76],[0,0],[15.65,-12.576],[0,0],[-14.692,2.086],[0,0],[-8.797,-6.892],[3.446,-4.262],[0,0],[5.26,-0.544]],"v":[[-51.918,-67.483],[-31.884,-109.017],[-11.85,-150.552],[3.469,-161.051],[10.929,-148.505],[47.553,-73.539],[75.775,-51.95],[150.598,-43.581],[170.533,-31.778],[161.799,-18.729],[92.791,46.751],[89.979,56.001],[103.031,147.532],[92.682,168.128],[78.549,164.34],[10.856,126.608],[-11.326,125.027],[-78.918,159.969],[-102.675,160.533],[-101.98,142.673],[-96.411,106.67],[-59.132,71.174],[14.656,32.053],[5.241,-0.278],[-97.779,14.83],[-133.903,3.511],[-164.246,-20.961],[-169.331,-38.599],[-152.785,-42.781],[-74.668,-53.057]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.685,-1.014],[3.323,-2.717],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[11.537,0.665],[5.777,3.334],[0,0],[-14.716,3.843],[0,0],[25.169,-4.132],[0,0],[4.72,1.583],[0,0],[0.109,3.451],[-3.552,0.394],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[9.267,-0.792],[-0.937,1.387],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.198,2.614],[-10.402,-0.6],[0,0],[2.478,-3.091],[0,0],[18.642,-5.659],[0,0],[-14.842,2.034],[0,0],[-4.231,-2.538],[-0.097,-3.072],[0,0],[5.357,-0.287]],"v":[[-60.725,-32.175],[-39.48,-33.258],[-18.234,-34.34],[16.973,-35.598],[16.5,-34.942],[58.242,-37.463],[68.153,-37.588],[145.089,-41.221],[166.816,-42.229],[155.193,-32.381],[104.899,1.678],[103.917,2.656],[73.739,22.347],[73.456,22.562],[73.035,22.904],[72.401,23.341],[44.464,41.414],[14.473,59.827],[-19.528,72.001],[-43.843,62.879],[-92.071,32.095],[-57.971,20.11],[63.118,-9.411],[54.389,-28.862],[-112.468,-10.288],[-154.071,-9.932],[-164.065,-13.536],[-173.927,-24.868],[-157.635,-28.29],[-71.553,-32.356]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":51,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.516,-9.156],[3.141,-3.181],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[6.306,1.117],[2.892,15.404],[0,0],[-24.126,9.096],[0,0],[28.671,-1.78],[0,0],[12.618,12.351],[0,0],[-9.177,7.131],[-14.19,-4.68],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[14.295,3.769],[4.102,10.684],[0,0],[-2.376,2.37],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-12.044,10.852],[-10.326,-1.829],[0,0],[-1.422,-8.733],[0,0],[22.409,-8.738],[0,0],[-14.887,1.939],[0,0],[-6.312,-8.613],[4.238,-3.293],[0,0],[0,0]],"v":[[-41.901,-97.259],[-21.502,-91.633],[-1.103,-86.007],[32.821,-77.159],[33.13,-77.138],[69.76,-67.046],[87.225,-62.366],[160.866,-42.206],[187.615,-24.225],[173.626,4.464],[124.466,57.509],[117.061,65.917],[95.307,90.885],[74.457,114.292],[60.875,128.737],[49.862,139.689],[21.066,171.991],[8.03,185.093],[-17.864,199.414],[-36.727,177.907],[-63.19,91.489],[-45.264,58.32],[63.504,15.536],[51.459,-20.758],[-65.147,-16.168],[-111.12,-27.048],[-160.683,-96.727],[-161.995,-122.567],[-136.124,-122.933],[-65.06,-103.125]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":75,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.685,-1.014],[3.323,-2.717],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[11.537,0.665],[5.777,3.334],[0,0],[-14.716,3.843],[0,0],[25.169,-4.132],[0,0],[4.72,1.583],[0,0],[0.109,3.451],[-3.552,0.394],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[9.267,-0.792],[-0.937,1.387],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.198,2.614],[-10.402,-0.6],[0,0],[2.478,-3.091],[0,0],[18.642,-5.659],[0,0],[-14.842,2.034],[0,0],[-4.231,-2.538],[-0.097,-3.072],[0,0],[5.357,-0.287]],"v":[[-60.725,-32.175],[-39.48,-33.258],[-18.234,-34.34],[16.973,-35.598],[16.5,-34.942],[58.242,-37.463],[68.153,-37.588],[145.089,-41.221],[166.816,-42.229],[155.193,-32.381],[104.899,1.678],[103.917,2.656],[73.739,22.347],[73.456,22.562],[73.035,22.904],[72.401,23.341],[44.464,41.414],[14.473,59.827],[-19.528,72.001],[-43.843,62.879],[-92.071,32.095],[-57.971,20.11],[63.118,-9.411],[54.389,-28.862],[-112.468,-10.288],[-154.071,-9.932],[-164.065,-13.536],[-173.927,-24.868],[-157.635,-28.29],[-71.553,-32.356]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.8,"y":0},"t":98,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.516,-9.156],[3.141,-3.181],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[6.306,1.117],[2.892,15.404],[0,0],[-24.126,9.096],[0,0],[28.671,-1.78],[0,0],[12.618,12.351],[0,0],[-9.177,7.131],[-14.19,-4.68],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[14.295,3.769],[4.102,10.684],[0,0],[-2.376,2.37],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-12.044,10.852],[-10.326,-1.829],[0,0],[-1.422,-8.733],[0,0],[22.409,-8.738],[0,0],[-14.887,1.939],[0,0],[-6.312,-8.613],[4.238,-3.293],[0,0],[0,0]],"v":[[-41.901,-97.259],[-21.502,-91.633],[-1.103,-86.007],[32.821,-77.159],[33.13,-77.138],[69.76,-67.046],[87.225,-62.366],[160.866,-42.206],[187.615,-24.225],[173.626,4.464],[124.466,57.509],[117.061,65.917],[95.307,90.885],[74.457,114.292],[60.875,128.737],[49.862,139.689],[21.066,171.991],[8.03,185.093],[-17.864,199.414],[-36.727,177.907],[-63.19,91.489],[-45.264,58.32],[63.504,15.536],[51.459,-20.758],[-65.147,-16.168],[-111.12,-27.048],[-160.683,-96.727],[-161.995,-122.567],[-136.124,-122.933],[-65.06,-103.125]],"c":true}]},{"i":{"x":0.39,"y":1},"o":{"x":0.167,"y":0.167},"t":106,"s":[{"i":[[0.06,0.373],[0,0],[-0.481,0.355],[0,0],[0.014,0.122],[0.371,0.009],[0,0],[0.406,0.641],[-3.361,-6.252],[3.137,-2.135],[0.123,-0.24],[0,0],[0.797,-0.115],[0,0],[0.12,-0.128],[-0.363,-0.193],[0,0],[-0.98,0.147],[6.051,0.762],[2.52,10.116],[0.646,-0.256],[-23.151,6.204],[0.18,-0.985],[34.493,-1.782],[-0.098,-0.082],[11.778,8.553],[0,0],[-9.49,4.572],[-13.617,-3.192],[-0.173,0.029]],"o":[[0,0],[-0.075,-0.466],[0,0],[0.102,-0.095],[-0.035,-0.296],[0,0],[-0.91,-0.087],[13.718,2.571],[3.869,7.197],[-0.162,-0.05],[-2.28,1.616],[-0.338,0.524],[0,0],[-0.208,0.028],[-0.2,0.214],[0,0],[0.808,0.422],[-5.676,4.959],[-4.408,-0.339],[0.323,0.501],[-1.364,-5.957],[-1.127,0.449],[21.504,-5.96],[-0.022,0.111],[-14.038,1.538],[0,0],[-5.276,-6.183],[4.067,-2.246],[0.158,0.064],[0.376,-0.07]],"v":[[-20.846,-70.366],[-2.967,-67.624],[16.091,-63.903],[50.728,-56.53],[51.15,-56.916],[85.454,-49.715],[98.925,-47.456],[166.291,-34.254],[194.637,-24.271],[184.754,0.712],[136.962,39.427],[126.425,47.641],[103.635,64.997],[76.497,85.287],[62.832,94.37],[50.896,103.65],[27.017,122.011],[11.835,132.504],[-11.412,141.486],[-26.104,129.911],[-55.194,64.87],[-36.144,47.012],[53.755,17.206],[40.489,-11.969],[-60.11,-9.961],[-104.388,-19.633],[-141.216,-64.185],[-150.524,-90.948],[-112.164,-86.454],[-44.33,-74.543]],"c":true}]},{"i":{"x":0.9,"y":1},"o":{"x":0.7,"y":0},"t":122,"s":[{"i":[[-2.148,4.904],[0,0],[0,0],[-4.918,-2.716],[-1.977,-3.727],[0,0],[-7.106,-0.601],[0,0],[0.836,-11.296],[3.121,-3.403],[0,0],[-0.61,-3.605],[0,0],[8.956,-2.677],[4.266,2.085],[0,0],[4.87,-2.843],[0,0],[5.473,9.858],[-0.505,5.105],[0,0],[-16.831,9.624],[0,0],[12.488,-3.836],[0,0],[11.512,9.439],[0,0],[-7.468,9.225],[-5.351,0.722],[0,0]],"o":[[0,0],[0,0],[0.809,-4.005],[3.793,1.651],[0,0],[4.928,11.591],[0,0],[11.932,0.936],[-0.344,4.644],[0,0],[-2.514,2.741],[0,0],[2.077,12.346],[-4.597,0.743],[0,0],[-6.483,-2.988],[0,0],[-9.743,5.595],[-2.067,-3.723],[0,0],[4.171,-16.956],[0,0],[11.484,-10.075],[0,0],[-14.693,2.077],[0,0],[-8.793,-6.898],[3.449,-4.26],[0,0],[5.26,-0.541]],"v":[[-51.778,-81.665],[-32.882,-119.983],[-13.986,-158.301],[-3.927,-164.012],[5.326,-151.599],[45.151,-83.92],[67.966,-65.078],[142.656,-64.435],[164.63,-52.313],[155.345,-35.603],[91.125,42.98],[88.716,52.343],[101.555,132.878],[90.376,154.47],[76.092,151.296],[11.888,124.333],[-10.34,123.711],[-73.566,156.178],[-97.806,157.038],[-96.74,136.367],[-90.674,101.579],[-57.221,64.344],[14.195,15.178],[5.976,-9.091],[-104.147,6.55],[-140.264,-4.791],[-165.848,-28.007],[-168.692,-49.636],[-159.147,-53.093],[-82.517,-62.801]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.1,"y":0},"t":123,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-2.696,-5.313],[6.82,-3.489],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[5.948,-0.872],[3.41,6.82],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[101.929,147.184],[95.967,65.205],[102.889,38.812],[170.775,-39.525],[173.075,-46.226],[164.015,-56.571],[79.81,-61.475],[52.533,-80.017],[10.193,-155.281],[5.794,-158.881],[-2.706,-154.781],[-44.513,-81.222],[-72.938,-60.093],[-157.539,-47.343],[-164.239,-43.943],[-161.539,-28.743],[-132.608,-4.389],[-104.694,7.154],[5.868,-4.9],[22.32,3.529],[13.21,24.676],[-65.015,74.262],[-93.71,112.928],[-98.861,155.274],[-96.961,161.474],[-85.561,164.074],[-15.385,126],[14.815,126.6],[85.529,159.284],[93.229,160.284]],"c":true}]},{"t":133,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[4.3,8.6],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[13.8,32.5],[-70,75.5],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-90.3,166.1],[-15.4,127.5],[14.8,128.1],[87.1,167.8],[94.8,168.8]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.635,0,0.5,1,0.755,0.184,1,1,0.875,0.369]}},"s":{"a":1,"k":[{"i":{"x":0.6,"y":1},"o":{"x":0.7,"y":0},"t":12,"s":[93.279,197.903],"to":[0,0],"ti":[0,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":28,"s":[66.277,144.932],"to":[0,0],"ti":[0,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":51,"s":[41.865,136.366],"to":[0,0],"ti":[0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":75,"s":[66.277,144.932],"to":[0,0],"ti":[0,0]},{"i":{"x":0.52,"y":1},"o":{"x":0.8,"y":0},"t":98,"s":[36.463,131.019],"to":[0,0],"ti":[0,0]},{"t":122,"s":[93.279,197.903]}]},"e":{"a":1,"k":[{"i":{"x":0.6,"y":1},"o":{"x":0.7,"y":0},"t":12,"s":[-47.232,-173.304],"to":[0,0],"ti":[0,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":28,"s":[5.793,-57.521],"to":[0,0],"ti":[0,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":51,"s":[-14.848,-161.832],"to":[0,0],"ti":[0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":75,"s":[5.793,-57.521],"to":[0,0],"ti":[0,0]},{"i":{"x":0.52,"y":1},"o":{"x":0.8,"y":0},"t":98,"s":[-14.848,-161.832],"to":[0,0],"ti":[0,0]},{"t":122,"s":[-47.232,-173.304]}]},"t":1,"nm":"Gradient_xiyQ7W5iHE","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Front","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.6,"y":1},"o":{"x":0.7,"y":0},"t":11,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":28,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[7.907,-9.584],[3.6,-3.6],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[11.923,0.827],[6.259,4.418],[0,0],[-24.924,4.565],[0,0],[9.296,-1.378],[0,0],[5.114,2.098],[0,0],[-4.892,12.483],[-3.849,0.522],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[8.973,-0.122],[-2.543,3.082],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.465,3.464],[-15.014,-1.041],[0,0],[-23.917,-21.932],[0,0],[9.917,-2.261],[0,0],[-16.082,2.695],[0,0],[-4.584,-3.364],[3.118,-7.958],[0,0],[5.804,-0.381]],"v":[[-64.527,-38.242],[-18.829,-39.819],[18.773,-41.773],[18.57,-41.426],[62.166,-43.544],[75.549,-44.799],[171.452,-48.297],[180.932,-33.736],[173.103,-25.282],[118.861,20.138],[118.145,20.373],[89.829,43.763],[87.752,45.687],[84.659,48.761],[80,52.684],[53.92,72.83],[21.928,97.808],[-15.49,114.443],[-41.789,105.609],[-101.603,56.999],[-68.485,15.706],[55.538,-12.972],[54.066,-19.766],[-118.955,8.83],[-160.488,5.271],[-168.759,0.885],[-188.114,-22.984],[-171.472,-32.477],[-76.567,-37.959]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.5,"y":0},"t":51,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.971,-10.206],[3.418,-3.461],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[12.236,4.275],[3.264,11.943],[0,0],[-26.253,9.898],[0,0],[10.008,-0.334],[0,0],[13.731,13.44],[0,0],[-9.986,7.759],[-15.441,-5.092],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[15.556,4.102],[4.232,14.538],[0,0],[-2.585,2.579],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-13.106,11.809],[-16.718,-5.841],[0,0],[-1.547,-9.503],[0,0],[5.935,-3.539],[0,0],[-16.2,2.11],[0,0],[-6.869,-9.372],[4.612,-3.583],[0,0],[0,0]],"v":[[-46.584,-109.176],[-2.188,-96.933],[34.727,-87.304],[35.063,-87.281],[74.923,-76.299],[93.928,-71.207],[174.062,-49.27],[202.803,-28.476],[190.565,2.935],[138.567,62.503],[130.509,71.652],[106.837,98.823],[84.148,124.293],[69.369,140.012],[57.385,151.93],[26.049,187.08],[11.864,201.337],[-26.979,213.735],[-55.199,179.102],[-79.873,93.063],[-59.293,50.035],[60.695,3.582],[55.075,-8.916],[-55.373,-1.367],[-118.968,-14.076],[-176.989,-100.667],[-174.629,-135.546],[-149.115,-137.114],[-71.785,-115.56]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":75,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[7.907,-9.584],[3.6,-3.6],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[11.923,0.827],[6.259,4.418],[0,0],[-24.924,4.565],[0,0],[9.296,-1.378],[0,0],[5.114,2.098],[0,0],[-4.892,12.483],[-3.849,0.522],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[8.973,-0.122],[-2.543,3.082],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.465,3.464],[-15.014,-1.041],[0,0],[-23.917,-21.932],[0,0],[9.917,-2.261],[0,0],[-16.082,2.695],[0,0],[-4.584,-3.364],[3.118,-7.958],[0,0],[5.804,-0.381]],"v":[[-64.527,-38.242],[-18.829,-39.819],[18.773,-41.773],[18.57,-41.426],[62.166,-43.544],[75.549,-44.799],[171.452,-48.297],[180.932,-33.736],[173.103,-25.282],[118.861,20.138],[118.145,20.373],[89.829,43.763],[87.752,45.687],[84.659,48.761],[80,52.684],[53.92,72.83],[21.928,97.808],[-15.49,114.443],[-41.789,105.609],[-101.603,56.999],[-68.485,15.706],[55.538,-12.972],[54.066,-19.766],[-118.955,8.83],[-160.488,5.271],[-168.759,0.885],[-188.114,-22.984],[-171.472,-32.477],[-76.567,-37.959]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.8,"y":0},"t":98,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.971,-10.206],[3.418,-3.461],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[12.236,4.275],[3.264,11.943],[0,0],[-26.253,9.898],[0,0],[10.008,-0.334],[0,0],[13.731,13.44],[0,0],[-9.986,7.759],[-15.441,-5.092],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[15.556,4.102],[4.232,14.538],[0,0],[-2.585,2.579],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-13.106,11.809],[-16.718,-5.841],[0,0],[-1.547,-9.503],[0,0],[5.935,-3.539],[0,0],[-16.2,2.11],[0,0],[-6.869,-9.372],[4.612,-3.583],[0,0],[0,0]],"v":[[-46.584,-109.176],[-2.188,-96.933],[34.727,-87.304],[35.063,-87.281],[74.923,-76.299],[93.928,-71.207],[174.062,-49.27],[202.803,-28.476],[190.565,2.935],[138.567,62.503],[130.509,71.652],[106.837,98.823],[84.148,124.293],[69.369,140.012],[57.385,151.93],[26.049,187.08],[11.864,201.337],[-26.979,213.735],[-55.199,179.102],[-79.873,93.063],[-59.293,50.035],[60.695,3.582],[55.075,-8.916],[-55.373,-1.367],[-118.968,-14.076],[-176.989,-100.667],[-174.629,-135.546],[-149.115,-137.114],[-71.785,-115.56]],"c":true}]},{"i":{"x":0.39,"y":1},"o":{"x":0.167,"y":0.167},"t":106,"s":[{"i":[[-0.195,0.334],[0,0],[-0.812,-0.271],[-0.171,-0.256],[0,0],[-0.586,-0.063],[0,0],[-2.827,-8.327],[3.524,-2.804],[0,0],[-0.038,-0.252],[0,0],[1.015,-0.107],[0.346,0.158],[0,0],[0.413,-0.183],[0,0],[12.159,3.86],[3.072,9.176],[0,0],[-26.62,7.931],[0,0],[10.167,-0.31],[0,0],[14.246,10.53],[0,0],[-10.196,6.408],[-15.288,-3.687],[0,0]],"o":[[0,0],[0.34,-0.658],[0.317,0.109],[0,0],[0.263,0.454],[0,0],[15.919,3.055],[4.051,11.064],[0,0],[-2.699,2.088],[0,0],[0.128,0.864],[-0.383,0.038],[0,0],[-0.526,-0.227],[0,0],[-13.403,9.084],[-16.2,-4.58],[0,0],[-1.244,-8.491],[0,0],[6.079,-2.804],[0,0],[-16.836,1.772],[0,0],[-7.407,-7.361],[4.709,-2.959],[0,0],[0.463,-0.062]],"v":[[-41.307,-80.332],[2.53,-72.969],[41.264,-65.451],[42.409,-64.848],[86.485,-55.819],[107.242,-51.45],[186.769,-36.016],[217.176,-18.438],[205.043,5.691],[149.702,54.838],[141.737,62.24],[116.671,83.884],[92.172,104.328],[78.005,115.149],[64.014,126.593],[32.637,152.528],[13.283,165.559],[-26.387,174.094],[-53.693,147.613],[-76.927,81.332],[-54.457,46.226],[54.996,10.683],[49.445,1.147],[-52.378,6.394],[-117.189,-3.675],[-175.798,-69.317],[-173.953,-97.256],[-148.246,-99.098],[-66.832,-84.294]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":122,"s":[{"i":[[-2.501,5.561],[0,0],[-10.398,-4.505],[-2.187,-4.258],[0,0],[-7.504,-1.049],[0,0],[0.305,-13.101],[3.131,-4.107],[0,0],[-0.481,-4.197],[0,0],[12.987,-1.784],[4.425,2.623],[0,0],[5.291,-3.043],[0,0],[5.348,11.664],[-0.77,5.875],[0,0],[-18.278,10.282],[0,0],[7.215,-1.049],[0,0],[13.236,10.588],[0,0],[-8.334,10.878],[-6.069,0.987],[0,0]],"o":[[0,0],[4.348,-10.935],[4.063,1.809],[0,0],[3.367,7.554],[0,0],[12.69,0.412],[-0.125,5.386],[0,0],[-2.79,3.043],[0,0],[1.635,14.374],[-4.906,0.63],[0,0],[-6.734,-3.777],[0,0],[-10.582,5.98],[-2.02,-4.407],[0,0],[3.078,-24.446],[0,0],[4.906,-3.148],[0,0],[-16.663,2.819],[0,0],[-10.105,-7.727],[3.85,-5.025],[0,0],[5.969,-0.775]],"v":[[-63.473,-91.846],[-26.953,-169.576],[0.944,-181.691],[11.468,-171.938],[60.049,-93.629],[76.403,-81.249],[159.537,-80.284],[181.947,-53.98],[176.963,-38.624],[107.283,46.858],[104.301,57.56],[118.012,144.33],[96.174,173.707],[81.167,171.084],[7.619,141.496],[-9.12,140.971],[-82.617,182.52],[-113.305,172.133],[-116.191,157.234],[-110.515,112.014],[-75.691,56.826],[-1.903,10.013],[-3.923,4.976],[-99.564,23.536],[-147.477,10.121],[-183.752,-19.314],[-187.542,-55.627],[-171.398,-66.301],[-78.399,-80.843]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":123,"s":[{"i":[[-2.504,5.553],[0,0],[-10.401,-4.52],[-2.182,-4.256],[0,0],[-7.513,-1.048],[0,0],[0.341,-13.079],[3.145,-4.092],[0,0],[-0.482,-4.191],[0,0],[13.003,-1.781],[4.43,2.619],[0,0],[5.297,-3.038],[0,0],[5.355,11.647],[-0.771,5.867],[0,0],[-18.3,10.268],[0,0],[7.224,-1.048],[23.627,-0.372],[13.657,10.011],[0,0],[-7.86,11.201],[-6.016,1.238],[0,0]],"o":[[0,0],[4.373,-10.91],[4.064,1.815],[0,0],[3.371,7.544],[0,0],[12.703,0.448],[-0.14,5.377],[0,0],[-2.793,3.038],[0,0],[1.637,14.354],[-4.912,0.629],[0,0],[-6.742,-3.772],[0,0],[-10.595,5.972],[-2.023,-4.4],[0,0],[3.082,-24.412],[0,0],[4.912,-3.143],[0,0],[-15.631,0.246],[0,0],[-10.411,-7.287],[3.631,-5.174],[0,0],[5.925,-1.022]],"v":[[-59.041,-91.402],[-16.83,-166.61],[11.121,-178.649],[21.639,-168.889],[67.58,-88.402],[83.953,-76.039],[165.238,-73.054],[187.602,-46.725],[182.573,-31.407],[112.358,53.11],[109.372,63.797],[118.037,148.767],[96.173,178.103],[81.148,175.484],[7.637,141.563],[-9.122,141.039],[-82.707,182.528],[-113.432,172.156],[-116.322,157.278],[-110.639,112.122],[-73.278,57.538],[2.18,14.185],[0.157,9.156],[-101.766,22.977],[-145.613,7.391],[-177.572,-19.154],[-182.883,-55.223],[-167.218,-66.547],[-76.063,-78.948]],"c":true}]},{"t":133,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gs","o":{"a":0,"k":100},"w":{"a":0,"k":8},"g":{"p":3,"k":{"a":0,"k":[0,0.796,0.439,0,0.5,0.782,0.4,0,1,0.769,0.361,0]}},"s":{"a":0,"k":[-1,-171]},"e":{"a":0,"k":[1.73,184.29]},"t":1,"lc":2,"lj":2,"bm":0,"nm":"Gradient_og3ukSNqC9","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[0,1,0.714,0,0.5,0.965,0.612,0,1,0.929,0.51,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[0,1,0.714,0,0.5,0.95,0.572,0,1,0.901,0.431,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":98,"s":[0,1,0.714,0,0.5,0.95,0.572,0,1,0.901,0.431,0]},{"t":113,"s":[0,1,0.714,0,0.5,0.965,0.612,0,1,0.929,0.51,0]}]}},"s":{"a":0,"k":[-0.953,-180.679]},"e":{"a":0,"k":[1.58,188.35]},"t":1,"nm":"Gradient_WU2RY3KFCA","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Back","bm":0,"hd":false}],"ip":0,"op":173,"st":-7,"bm":0}]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/stars_topup.json b/TMessagesProj/src/main/res/raw/stars_topup.json new file mode 100644 index 00000000000..c04633491fb --- /dev/null +++ b/TMessagesProj/src/main/res/raw/stars_topup.json @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":0,"op":109,"w":512,"h":512,"nm":"Prem Star Move 2","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Null 3","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29,"s":[256,256,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34,"s":[282,256,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[233,256,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":39,"s":[256,256,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[263,256,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[287.249,256,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[287.249,256,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":62,"s":[286,256,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[233.498,256,0],"to":[0,0,0],"ti":[0,0,0]},{"t":71,"s":[256,256,0]}]},"s":{"a":1,"k":[{"i":{"x":[0.1,0.1,0.1],"y":[1,1,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":17,"s":[100,100,100]},{"i":{"x":[0.9,0.9,0.9],"y":[1,1,1]},"o":{"x":[0.9,0.9,0.9],"y":[0,0,0]},"t":49,"s":[116,100,100]},{"t":78,"s":[100,100,100]}]}},"ao":0,"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Star Simple","parent":4,"sr":1,"ks":{"p":{"a":0,"k":[-0.163,-1.32,0]},"a":{"a":0,"k":[1.049,-1.084,0]},"s":{"a":0,"k":[89.232,89.232,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[6.444,-4.125],[0,0],[5.822,9.428],[-1.293,5.317],[-5.032,15.493],[0,0],[0,0],[-7.133,8.444],[-5.201,0.425],[0,0],[-2.808,7.082],[0,0],[-10.143,-4.169],[-2.013,-5.077],[0,0],[-7.477,-0.611],[0,0],[0.876,-11.101],[3.883,-3.459],[0,0],[-1.673,-7.261],[0,0],[10.649,-2.543],[4.483,2.87],[0,0]],"o":[[0,0],[-9.26,5.928],[-2.864,-4.638],[0,0],[6.87,-15.529],[-19.738,-13.421],[-8.293,-7.262],[3.402,-4.028],[0,0],[7.477,-0.611],[0,0],[4.094,-10.328],[4.986,2.049],[0,0],[2.808,7.082],[0,0],[10.903,0.892],[-0.413,5.237],[0,0],[-5.513,4.911],[0,0],[2.498,10.843],[-5.156,1.231],[0,0],[-6.444,-4.125]],"v":[[-10.769,136.774],[-99.891,193.826],[-127.2,187.488],[-129.658,171.908],[-98.269,67.114],[-103.081,44.495],[-192.748,-28.449],[-194.849,-56.887],[-181.419,-63.839],[-75.773,-72.478],[-58.992,-85.031],[-18.593,-186.939],[7.186,-198.091],[18.139,-186.939],[58.539,-85.031],[75.319,-72.478],[181.525,-63.793],[199.681,-42.078],[192.981,-28.516],[111.229,44.314],[104.988,64.095],[129.986,172.613],[115.227,196.851],[100.163,194.29],[10.315,136.774]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[{"i":[[8.731,-5.608],[0,0],[7.889,12.818],[-1.752,7.229],[-6.818,21.063],[0,0],[0,0],[-9.665,11.479],[-7.048,0.578],[0,0],[-3.804,9.628],[0,0],[-13.744,-5.667],[-2.727,-6.902],[0,0],[-10.131,-0.831],[0,0],[1.187,-15.092],[5.262,-4.703],[0,0],[-2.267,-9.872],[0,0],[14.43,-3.458],[6.075,3.902],[0,0]],"o":[[0,0],[-12.547,8.059],[-3.88,-6.305],[0,0],[9.309,-21.112],[-26.745,-18.245],[-11.237,-9.873],[4.61,-5.476],[0,0],[10.131,-0.831],[0,0],[5.548,-14.04],[6.757,2.786],[0,0],[3.804,9.628],[0,0],[14.774,1.212],[-0.56,7.119],[0,0],[-7.47,6.677],[0,0],[3.384,14.741],[-6.986,1.674],[0,0],[-8.732,-5.608]],"v":[[-14.92,186.395],[-122.282,248.287],[-159.285,239.671],[-162.616,218.491],[-133.483,91.692],[-140.004,60.942],[-248.446,-34.869],[-251.293,-73.531],[-233.095,-82.981],[-108.961,-98.169],[-86.224,-115.235],[-25.075,-212.451],[9.855,-227.612],[24.696,-212.451],[88.527,-115.015],[111.264,-97.949],[236.042,-83.241],[260.644,-53.719],[251.565,-35.281],[150.386,60.695],[141.93,87.588],[167.764,218.087],[147.764,251.038],[127.352,247.556],[13.648,186.395]],"c":true}]},{"t":96,"s":[{"i":[[9.294,-6.094],[0,0],[8.397,13.927],[-1.865,7.855],[-7.257,22.886],[0,0],[0,0],[-10.287,12.473],[-7.502,0.628],[0,0],[-4.049,10.461],[0,0],[-14.629,-6.158],[-2.903,-7.5],[0,0],[-10.784,-0.903],[0,0],[1.263,-16.399],[5.601,-5.11],[0,0],[-2.413,-10.727],[0,0],[15.359,-3.757],[6.466,4.239],[0,0]],"o":[[0,0],[-13.356,8.757],[-4.13,-6.851],[0,0],[9.908,-22.94],[-28.468,-19.825],[-11.961,-10.728],[4.907,-5.95],[0,0],[10.784,-0.903],[0,0],[5.905,-15.256],[7.192,3.027],[0,0],[4.049,10.461],[0,0],[15.725,1.317],[-0.596,7.736],[0,0],[-7.951,7.255],[0,0],[3.602,16.017],[-7.436,1.819],[0,0],[-9.294,-6.094]],"v":[[-13.56,206.52],[-137.885,270.574],[-177.271,261.211],[-180.817,238.198],[-149.987,89.53],[-156.928,56.118],[-265.006,-49.562],[-268.036,-91.571],[-248.667,-101.839],[-117.541,-116.674],[-93.339,-135.217],[-27.137,-276.378],[10.044,-292.851],[25.841,-276.378],[88.456,-135.39],[112.658,-116.848],[249.131,-100.224],[275.317,-68.146],[265.653,-48.112],[165.566,55.661],[156.566,84.882],[182.452,235.839],[161.165,271.642],[139.437,267.859],[16.849,206.52]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[46.036]},{"t":96,"s":[3]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Star","bm":0,"hd":false}],"ip":76,"op":97,"st":69,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Star Flash","parent":4,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":67,"s":[0]},{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":78,"s":[80]},{"t":101,"s":[0]}]},"p":{"a":0,"k":[0.061,187.015,0]},"a":{"a":0,"k":[0.061,187.015,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.96862745098,0.788235294118,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.969273585899,0.788235294118,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Back","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Star Main","parent":1,"sr":1,"ks":{"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.659],"y":[0]},"t":26,"s":[0]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.6],"y":[0]},"t":54,"s":[-3]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":69,"s":[3]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":82,"s":[-2]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":92,"s":[1]},{"t":105,"s":[0]}]},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[0.061,187.015,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.5,"y":0},"t":17,"s":[0.061,229.015,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.9,"y":1},"o":{"x":0.9,"y":0},"t":47,"s":[0.061,80.015,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.4,"y":1},"o":{"x":0.1,"y":0},"t":76,"s":[0.061,235.015,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":86,"s":[0.061,169.015,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.6,"y":1},"o":{"x":0.3,"y":0},"t":96,"s":[0.061,195.015,0],"to":[0,0,0],"ti":[0,0,0]},{"t":108,"s":[0.061,187.015,0]}]},"a":{"a":0,"k":[0.061,187.015,0]},"s":{"a":1,"k":[{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.1,0.1,0.1],"y":[1,1,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":17,"s":[120,80,100]},{"i":{"x":[0.9,0.9,0.9],"y":[1,1,1]},"o":{"x":[0.9,0.9,0.9],"y":[0,0,0]},"t":49,"s":[82.941,90,100]},{"i":{"x":[0.4,0.4,0.4],"y":[1,1,1]},"o":{"x":[0.1,0.1,0.1],"y":[0,0,0]},"t":78,"s":[115,85,100]},{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":86,"s":[94,106,100]},{"i":{"x":[0.6,0.6,0.6],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":96,"s":[102,98,100]},{"t":108,"s":[100,100,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":20,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-162.5,-33],[-71.2,-45.9],[-45.5,-63.8],[-0.1,-152.2]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[0,0],[0,0],[-1.838,8.6],[0,0]],"o":[[0,0],[9.004,0.427],[0,0],[0,0]],"v":[[-49.271,-52.376],[-27.366,-47.901],[-12.379,-64.077],[-0.293,-146.496]],"c":false}]},{"i":{"x":0.6,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[0,0],[-0.417,8.239],[0,0]],"o":[[0,0],[4.762,-3.148],[0,0],[0,0]],"v":[[-45.562,-26.278],[-18.391,-41.97],[-8.922,-67.631],[-0.143,-146.408]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":45,"s":[{"i":[[0,0],[0,0],[-5.818,9.761],[0,0]],"o":[[0,0],[15.726,-1.964],[0,0],[0,0]],"v":[[-164.959,-34],[-76.665,-44.805],[-43.687,-66.258],[-2.574,-152.03]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.333},"t":57,"s":[{"i":[[0,0],[0,0],[-3.07,8.647],[0,0]],"o":[[0,0],[17.534,3.754],[0,0],[0,0]],"v":[[-94.961,-59.143],[-53.679,-47.176],[-25.132,-66.202],[-1.432,-152.108]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[0,0],[0,0],[-1.743,5.934],[0,0]],"o":[[0,0],[4.612,-2.095],[0,0],[0,0]],"v":[[-16.584,-62.254],[-6.975,-60.133],[-1.799,-71.821],[-1.052,-152.135]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64,"s":[{"i":[[0,0],[0,0],[-0.511,18.014],[0,0]],"o":[[0,0],[6.199,-1.887],[0,0],[0,0]],"v":[[-33.069,-33.03],[-16.819,-41.953],[-2.877,-69.26],[-0.766,-152.154]],"c":false}]},{"t":71,"s":[{"i":[[0,0],[0,0],[-5.3,8.6],[0,0]],"o":[[0,0],[9.9,-1.4],[0,0],[0,0]],"v":[[-162.5,-33],[-71.2,-45.9],[-45.5,-63.8],[-0.1,-152.2]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":17},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":20,"s":[100]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":35,"s":[0]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.6],"y":[0]},"t":45,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.59],"y":[0]},"t":62,"s":[0]},{"t":71,"s":[100]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Blik","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":20,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[75.9,-52.5],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[22.9,11.6],[118.1,-47.3]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[0,0],[1.873,11],[0,0],[0.52,0.7],[0.659,-3.9],[0,0],[3.468,-1.3],[0,0],[0.555,-2.1],[-1.491,-3.6],[0,0],[-4.266,1.7],[0,0],[-0.841,-6.7],[-0.074,-0.8],[-7.043,17.746]],"o":[[-4.196,-1.5],[0,0],[-0.277,-1.6],[-0.936,-1.2],[0,0],[-1.561,9],[0,0],[-0.902,0.3],[-0.971,3.8],[0,0],[3.329,7.9],[0,0],[1.854,-1.1],[0.099,0.8],[7.654,-5.303],[0,0]],"v":[[26.348,-44.405],[16.603,-64.705],[1.66,-158],[0.377,-161.5],[-3.056,-158],[-18.593,-70],[-26.639,-53.4],[-54.09,-59.74],[-56.414,-56.34],[-55.477,-41.14],[-43.894,-13.74],[-32.276,-3.64],[-7.253,0.763],[-2.753,10.263],[-2.527,27.232],[51.064,-24.345]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[0,0],[-0.439,11],[0,0],[-0.122,0.7],[-0.155,-3.9],[0,0],[-0.813,-1.3],[0,0],[-0.13,-2.1],[0.35,-3.6],[0,0],[1.909,-1.014],[0,0],[3.869,-6.034],[0.036,-0.8],[0.047,7.658]],"o":[[0.984,-1.5],[0,0],[0.065,-1.6],[0.22,-1.2],[0,0],[0.366,9],[0,0],[0.211,0.3],[0.228,3.8],[0,0],[-0.781,7.9],[0,0],[-1.111,-0.231],[-0.376,0.576],[-0.436,-7.54],[0,0]],"v":[[-5.981,-44.726],[-4.386,-62.162],[-1.315,-158],[-1.014,-161.5],[-0.209,-158],[3.434,-70],[6.2,-59.131],[14.256,-67.654],[14.801,-64.254],[13.58,-49.062],[13.053,-24.195],[9.296,-10.119],[4.171,0.665],[-8.226,10.254],[-9.126,2.574],[-9.794,-25.593]],"c":true}]},{"i":{"x":0.6,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[-1.98,11],[0,0],[-0.55,0.7],[-0.697,-3.9],[0,0],[-3.667,-1.3],[0,0],[-0.587,-2.1],[1.577,-3.6],[0,0],[6.025,-2.824],[0,0],[14.431,-8.908],[0.11,-0.8],[3.504,24.21]],"o":[[4.438,-1.5],[0,0],[0.293,-1.6],[0.99,-1.2],[0,0],[1.65,9],[0,0],[0.953,0.3],[1.027,3.8],[0,0],[-3.521,7.9],[0,0],[-3.088,0.348],[-0.692,0.427],[-4.469,-7.884],[0,0]],"v":[[-27.534,-44.94],[-18.378,-60.467],[-3.299,-158],[-1.942,-161.5],[1.689,-158],[18.119,-70],[28.093,-62.951],[59.82,-72.93],[62.277,-69.53],[59.619,-54.342],[51.017,-31.166],[37.011,-14.438],[11.788,0.6],[-39.479,31.726],[-44.486,12.295],[-52.652,-27.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":45,"s":[{"i":[[0,0],[-5.447,11],[0,0],[-1.513,0.7],[-1.917,-3.9],[0,0],[-10.088,-1.3],[0,0],[0,0],[0,0],[0,0],[7.057,0.528],[0,0],[22.068,-11.67],[0.303,-0.8],[-13.933,8.718]],"o":[[12.206,-1.5],[0,0],[0.807,-1.6],[2.724,-1.2],[0,0],[4.539,9],[0,0],[0,0],[0,0],[0,0],[-3.891,0.904],[0,0],[-10.496,4.709],[-0.792,0.419],[-16.155,-11.705],[0,0]],"v":[[-78.073,-52.5],[-49.726,-72.8],[-7.761,-158],[-4.029,-161.5],[5.958,-158],[51.152,-70],[74.555,-53.4],[115.999,-47.571],[115.598,-47.686],[115.374,-47.163],[26.546,3.344],[19.494,3.539],[-11.2,-0.448],[-97.294,46.308],[-151.891,-8.518],[-168.038,-40.688]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[0,0],[-3.323,11],[0,0],[-0.923,0.7],[-1.169,-3.9],[0,0],[-6.153,-1.3],[0,0],[0,0],[0,0],[0,0],[5.669,1.7],[0,0],[27.988,-6.069],[0.185,-0.8],[-15.765,2.57]],"o":[[7.446,-1.5],[0,0],[0.492,-1.6],[1.662,-1.2],[0,0],[2.769,9],[0,0],[1.198,0.3],[0,0],[0,0],[0,0],[0,0],[-4.615,-1.1],[-0.818,0.177],[-13.502,-21.471],[0,0]],"v":[[-47.917,-52.5],[-30.625,-72.8],[-5.027,-158],[-2.75,-161.5],[3.342,-158],[30.612,-64.199],[43.555,-43.695],[67.122,-34.203],[66.58,-35.425],[77.237,-31.077],[30.624,11.849],[28.873,11.419],[24.769,11.538],[-56.567,31.259],[-81.562,-14.291],[-95.236,-64.407]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[0,0],[-0.831,11],[0,0],[-0.231,0.7],[-0.292,-3.9],[0,0],[-1.538,-1.3],[0,0],[-0.07,-2.1],[0.187,-3.6],[0,0],[0.535,1.7],[0,0],[0.523,-6.7],[0.046,-0.8],[4.784,21.1]],"o":[[1.861,-1.5],[0,0],[0.123,-1.6],[0.415,-1.2],[0,0],[0.692,9],[0,0],[0.113,0.3],[0.122,3.8],[0,0],[-0.418,7.9],[0,0],[-1.154,-1.1],[-0.062,0.8],[-13.974,-19.331],[0,0]],"v":[[-12.592,-54.637],[-8.27,-74.937],[-1.819,-158],[-1.25,-161.5],[0.273,-158],[7.042,-62.117],[10.438,-43.408],[12.239,-28.53],[12.531,-25.13],[11.987,-13.948],[11.411,8.566],[10.207,18.672],[3.645,13.849],[0.845,23.349],[0.276,29.883],[-16.201,-58.863]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0,0],[1.662,11],[0,0],[0.462,0.7],[0.585,-3.9],[0,0],[3.077,-1.3],[0,0],[0.598,-2.1],[-1.608,-3.6],[0,0],[-4.599,1.7],[0,0],[-1.046,-6.7],[-0.092,-0.8],[-9.57,21.1]],"o":[[-3.723,-1.5],[0,0],[-0.246,-1.6],[-0.831,-1.2],[0,0],[-1.385,9],[0,0],[-0.972,0.3],[-1.047,3.8],[0,0],[3.589,7.9],[0,0],[2.308,-1.1],[0.123,0.8],[2.416,-17.878],[0,0]],"v":[[22.732,-56.774],[14.086,-77.074],[1.389,-158],[0.25,-161.5],[-2.796,-158],[-16.528,-60.035],[-24.238,-41.762],[-56.094,-28.32],[-58.599,-24.92],[-57.462,-12.206],[-44.974,15.194],[-32.449,25.294],[-17.479,16.159],[-11.879,25.659],[-11.82,30.54],[27.106,-58.642]],"c":true}]},{"t":71,"s":[{"i":[[0,0],[5.4,11],[0,0],[1.5,0.7],[1.9,-3.9],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[-0.3,-0.8],[-31.1,21.1]],"o":[[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.7,-1.2],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.8,3.8],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[0.4,0.8],[27,-15.7],[0,0]],"v":[[75.9,-52.5],[47.8,-72.8],[6.2,-158],[2.5,-161.5],[-7.4,-158],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[22.9,11.6],[118.1,-47.3]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.850980401039,0.403921574354,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":26,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":35,"s":[100]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":52,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":62,"s":[0]},{"t":63,"s":[100]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Shine","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":20,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[4.3,8.6],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[13.8,32.5],[-70,75.5],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-90.3,166.1],[-15.4,127.5],[14.8,128.1],[87.1,167.8],[94.8,168.8]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[0.277,6.4],[0,0],[-2.22,6.1],[0,0],[0,2.1],[1.699,0.6],[0,0],[1.873,11],[0,0],[0.555,0.7],[0.659,-4],[0,0],[3.468,-1.3],[0,0],[0.551,-2.097],[-1.491,-3.6],[0,0],[-4.266,1.7],[0,0],[-0.828,-6.702],[2.126,-4.4],[0,0],[0.832,-16.9],[0,0],[-0.451,-1.4],[-1.526,2.2],[0,0],[-3.156,-5],[0,0],[-0.798,0.5]],"o":[[0,0],[-0.347,-8],[0,0],[0.52,-1.5],[0,-5.1],[0,0],[-4.196,-1.5],[0,0],[-0.277,-1.6],[-0.728,-1],[0,0],[-1.561,9],[0,0],[-0.902,0.3],[-0.936,3.5],[0,0],[3.329,7.9],[0,0],[1.854,-1.1],[1.063,8.6],[0,0],[-5.202,7.7],[0,0],[-0.104,1.9],[1.144,3.7],[0,0],[3.607,-5.3],[0,0],[0.728,1.1],[1.734,-1.2]],"v":[[35.404,155.7],[31.347,62.9],[34.191,41.5],[51.597,-9.886],[52.395,-16.586],[49.516,-25.186],[26.348,-44.405],[16.603,-64.705],[1.66,-158],[0.134,-161.6],[-2.813,-157.5],[-18.593,-70],[-26.639,-53.4],[-54.09,-59.74],[-56.414,-56.34],[-55.477,-41.14],[-43.894,-13.74],[-32.276,-3.64],[-7.253,0.763],[-2.753,10.263],[-4.756,33.563],[-23.408,61.743],[-30.886,100.678],[-32.663,141.929],[-32.004,148.13],[-28.05,150.729],[-5.831,127.5],[4.643,128.1],[29.717,167.8],[32.387,168.8]],"c":true}]},{"i":{"x":0.6,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[-0.293,6.4],[0,0],[2.347,6.1],[0,0],[0,2.1],[-1.797,0.6],[0,0],[-1.98,11],[0,0],[-0.587,0.7],[-0.697,-4],[0,0],[-3.667,-1.3],[0,0],[-0.595,-2.093],[1.577,-3.6],[0,0],[5.747,-2.826],[0,0],[1.052,-5.053],[-3.154,-4.4],[0,0],[-0.88,-16.9],[0,0],[0.012,-1.479],[1.063,0.482],[0,0],[3.337,-5],[0,0],[0.844,0.5]],"o":[[0,0],[0.367,-8],[0,0],[-0.55,-1.5],[0,-5.1],[0,0],[4.438,-1.5],[0,0],[0.293,-1.6],[0.77,-1],[0,0],[1.65,9],[0,0],[0.953,0.3],[0.99,3.5],[0,0],[-3.521,7.9],[0,0],[-2.534,0.618],[-1.783,8.56],[0,0],[5.501,7.7],[0,0],[0.11,1.9],[-0.012,1.411],[0,0],[-3.814,-5.3],[0,0],[-0.77,1.1],[-1.834,-1.2]],"v":[[-38.983,155.7],[-34.692,62.9],[-37.699,41.5],[-52.63,-13.807],[-53.474,-20.507],[-50.43,-29.107],[-27.534,-44.94],[-18.378,-60.467],[-3.299,-158],[-1.685,-161.6],[1.432,-157.5],[18.119,-70],[28.093,-62.951],[59.82,-72.93],[62.277,-69.53],[59.619,-54.343],[51.017,-31.166],[37.011,-14.438],[11.788,0.6],[0.954,8.741],[3.925,32.041],[24.549,57.293],[30.999,95.27],[33.664,137.368],[34.009,143.575],[32.605,146.594],[4.623,127.5],[-6.453,128.1],[-32.968,167.8],[-35.792,168.8]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":45,"s":[{"i":[[-0.807,6.4],[0,0],[6.456,6.1],[0,0],[0,2.1],[-4.943,0.6],[0,0],[-5.447,11],[0,0],[-1.614,0.7],[-1.917,-4],[0,0],[-10.088,-1.3],[0,0],[-1.627,-2.09],[4.338,-3.6],[0,0],[12.408,1.7],[0,0],[3.43,-6.7],[-8.675,-4.4],[0,0],[-2.421,-16.9],[0,0],[1.311,-1.4],[4.439,2.2],[0,0],[9.18,-5],[0,0],[2.32,0.5]],"o":[[0,0],[1.009,-8],[0,0],[-1.513,-1.5],[0,-5.1],[0,0],[12.206,-1.5],[0,0],[0.807,-1.6],[2.118,-1],[0,0],[4.539,9],[0,0],[2.623,0.3],[2.724,3.5],[0,0],[-9.684,7.9],[0,0],[-7.566,-1.1],[-4.338,8.6],[0,0],[15.132,7.7],[0,0],[0.303,1.9],[-3.329,3.7],[0,0],[-10.491,-5.3],[0,0],[-2.118,1.1],[-5.044,-1.2]],"v":[[-105.915,155.7],[-94.112,62.9],[-102.384,41.5],[-171.687,-26.6],[-174.007,-33.3],[-165.634,-41.9],[-78.073,-52.5],[-49.726,-72.8],[-7.761,-158],[-3.322,-161.6],[5.252,-157.5],[51.151,-70],[74.555,-53.4],[163.025,-41.4],[169.783,-38],[167.06,-22.8],[133.367,4.6],[99.573,14.7],[-5.239,-0.3],[-23.599,9.2],[-15.428,32.5],[69.108,75.5],[97.051,114.7],[103.003,157.3],[101.086,163.5],[89.586,166.1],[14.029,127.5],[-16.436,128.1],[-89.371,167.8],[-97.139,168.8]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[-0.492,6.4],[0,0],[3.938,6.1],[0,0],[0,2.1],[-3.015,0.6],[0,0],[-3.323,11],[0,0],[-0.985,0.7],[-1.169,-4],[0,0],[-6.154,-1.3],[0,0],[-0.744,-2.093],[1.982,-3.6],[0,0],[5.669,1.7],[0,0],[2.092,-6.7],[-5.292,-4.4],[0,0],[-1.477,-16.9],[0,0],[0.8,-1.4],[2.708,2.2],[0,0],[5.6,-5],[0,0],[1.415,0.5]],"o":[[0,0],[0.615,-8],[0,0],[-0.923,-1.5],[0,-5.1],[0,0],[7.446,-1.5],[0,0],[0.492,-1.6],[1.292,-1],[0,0],[2.769,9],[0,0],[1.198,0.3],[1.244,3.5],[0,0],[-4.425,7.9],[0,0],[-4.615,-1.1],[-2.646,8.6],[0,0],[9.23,7.7],[0,0],[0.185,1.9],[-2.031,3.7],[0,0],[-6.4,-5.3],[0,0],[-1.292,1.1],[-3.077,-1.2]],"v":[[-64.249,143.044],[-56.697,43.389],[-61.743,21.989],[-101.246,-50.48],[-102.661,-57.18],[-97.554,-65.78],[-47.917,-52.5],[-30.625,-72.8],[-5.027,-158],[-2.319,-161.6],[2.911,-157.5],[30.611,-64.199],[43.555,-43.695],[86.158,-28.331],[89.246,-24.931],[88.3,-15.531],[73.366,2.904],[57.925,13.004],[24.769,11.538],[13.569,21.038],[18.554,44.338],[42.803,79.242],[58.529,122.083],[61.003,165.159],[59.834,171.359],[52.818,173.959],[7.885,134.883],[-10.319,128.1],[-54.158,155.144],[-58.896,156.144]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[-0.123,6.4],[0,0],[0.984,6.1],[0,0],[0,2.1],[-0.754,0.6],[0,0],[-0.831,11],[0,0],[-0.246,0.7],[-0.292,-4],[0,0],[-1.538,-1.3],[0,0],[-0.074,-2.095],[0.187,-3.6],[0,0],[0.535,1.7],[0,0],[0.523,-6.7],[-1.323,-4.4],[0,0],[-0.369,-16.9],[0,0],[0.2,-1.4],[0.677,2.2],[0,0],[1.4,-5],[0,0],[0.354,0.5]],"o":[[0,0],[0.154,-8],[0,0],[-0.231,-1.5],[0,-5.1],[0,0],[1.861,-1.5],[0,0],[0.123,-1.6],[0.323,-1],[0,0],[0.692,9],[0,0],[0.113,0.3],[0.117,3.5],[0,0],[-0.418,7.9],[0,0],[-1.154,-1.1],[-0.661,8.6],[0,0],[2.307,7.7],[0,0],[0.046,1.9],[-0.508,3.7],[0,0],[-1.6,-5.3],[0,0],[-0.323,1.1],[-0.769,-1.2]],"v":[[-13.094,141.614],[-9.012,49.826],[-11.756,26.716],[-17.368,-51.293],[-19.24,-58.308],[-18.479,-66.64],[-12.592,-54.637],[-8.27,-74.937],[-1.819,-158],[-1.142,-161.6],[0.165,-157.5],[7.042,-62.117],[10.438,-43.408],[12.239,-28.53],[12.531,-25.13],[11.987,-13.948],[11.411,8.566],[10.207,18.672],[3.645,13.849],[0.845,23.349],[2.091,46.649],[10.265,77.885],[14.74,121.29],[14.821,164.23],[14.529,170.43],[12.775,173.03],[1.232,132.773],[-3.142,128.1],[-12.322,152.556],[-11.982,153.592]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0.246,6.4],[0,0],[-1.969,6.1],[0,0],[0,2.1],[1.508,0.6],[0,0],[1.662,11],[0,0],[0.492,0.7],[0.585,-4],[0,0],[3.077,-1.3],[0,0],[0.595,-2.097],[-1.608,-3.6],[0,0],[-4.599,1.7],[0,0],[-1.046,-6.7],[2.646,-4.4],[0,0],[0.738,-16.9],[0,0],[-0.4,-1.4],[-1.354,2.2],[0,0],[-2.8,-5],[0,0],[-0.708,0.5]],"o":[[0,0],[-0.308,-8],[0,0],[0.462,-1.5],[0,-5.1],[0,0],[-3.723,-1.5],[0,0],[-0.246,-1.6],[-0.646,-1],[0,0],[-1.385,9],[0,0],[-0.972,0.3],[-1.01,3.5],[0,0],[3.589,7.9],[0,0],[2.308,-1.1],[1.323,8.6],[0,0],[-4.616,7.7],[0,0],[-0.092,1.9],[1.015,3.7],[0,0],[3.2,-5.3],[0,0],[0.646,1.1],[1.539,-1.2]],"v":[[30.352,143.356],[26.473,55.981],[28.996,34.581],[55.339,-52.925],[56.047,-59.625],[53.493,-68.225],[22.732,-56.774],[14.086,-77.074],[1.389,-158],[0.035,-161.6],[-2.581,-157.5],[-16.528,-60.035],[-24.238,-41.762],[-56.094,-28.32],[-58.599,-24.92],[-57.462,-12.206],[-44.974,15.194],[-32.449,25.294],[-17.479,16.159],[-11.879,25.659],[-14.372,48.959],[-22.273,76.527],[-29.049,120.497],[-31.36,163.301],[-30.775,169.501],[-27.268,172.101],[-5.421,130.664],[4.035,128.1],[25.305,155.456],[27.675,156.456]],"c":true}]},{"t":71,"s":[{"i":[[0.8,6.4],[0,0],[-6.4,6.1],[0,0],[0,2.1],[4.9,0.6],[0,0],[5.4,11],[0,0],[1.6,0.7],[1.9,-4],[0,0],[10,-1.3],[0,0],[1.6,-2.1],[-4.3,-3.6],[0,0],[-12.3,1.7],[0,0],[-3.4,-6.7],[8.6,-4.4],[0,0],[2.4,-16.9],[0,0],[-1.3,-1.4],[-4.4,2.2],[0,0],[-9.1,-5],[0,0],[-2.3,0.5]],"o":[[0,0],[-1,-8],[0,0],[1.5,-1.5],[0,-5.1],[0,0],[-12.1,-1.5],[0,0],[-0.8,-1.6],[-2.1,-1],[0,0],[-4.5,9],[0,0],[-2.6,0.3],[-2.7,3.5],[0,0],[9.6,7.9],[0,0],[7.5,-1.1],[4.3,8.6],[0,0],[-15,7.7],[0,0],[-0.3,1.9],[3.3,3.7],[0,0],[10.4,-5.3],[0,0],[2.1,1.1],[5,-1.2]],"v":[[103.5,155.7],[91.8,62.9],[100,41.5],[168.7,-26.6],[171,-33.3],[162.7,-41.9],[75.9,-52.5],[47.8,-72.8],[6.2,-158],[1.8,-161.6],[-6.7,-157.5],[-52.2,-70],[-75.4,-53.4],[-163.1,-41.4],[-169.8,-38],[-167.1,-22.8],[-133.7,4.6],[-100.2,14.7],[3.7,-0.3],[21.9,9.2],[13.8,32.5],[-70,75.5],[-97.7,114.7],[-103.6,157.3],[-101.7,163.5],[-90.3,166.1],[-15.4,127.5],[14.8,128.1],[87.1,167.8],[94.8,168.8]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,1,0.635,0,0.5,1,0.755,0.184,1,1,0.875,0.369]}},"s":{"a":0,"k":[93.279,197.903]},"e":{"a":0,"k":[-47.232,-173.304]},"t":1,"nm":"Gradient_zWsUUlgrZd","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":26,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":35,"s":[100]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":52,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.3],"y":[0]},"t":62,"s":[0]},{"t":63,"s":[100]}]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Front","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":20,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[-0.902,5.3],[0,0],[-3.641,-5],[-0.694,-4.2],[0,0],[-2.705,-1],[0,0],[0.533,-12.402],[1.248,-3.6],[0,0],[-0.173,-4],[0,0],[4.682,-1.7],[1.595,2.5],[0,0],[1.907,-2.9],[0,0],[1.955,11.107],[-0.277,5.6],[0,0],[-6.589,9.8],[0,0],[1.854,-1],[0,0],[4.404,10.4],[0,0],[-2.835,10.193],[-2.046,0.8],[0,0]],"o":[[0,0],[1.803,-10.1],[1.422,2],[0,0],[1.214,7.2],[0,0],[4.543,1.6],[-0.208,5.1],[0,0],[-1.006,2.9],[0,0],[0.59,13.7],[-1.769,0.6],[0,0],[-2.428,-3.6],[0,0],[-3.815,5.7],[-0.728,-4.2],[0,0],[1.11,-23.3],[0,0],[1.261,-3],[0,0],[-5.618,2.3],[0,0],[-3.364,-7.6],[1.318,-4.7],[0,0],[2.011,-0.6]],"v":[[-23.275,-78.7],[-7.565,-168.7],[2.735,-178.3],[6.307,-168.3],[21.771,-72.305],[27.666,-60.505],[51.493,-41.286],[58.741,-14.186],[56.487,-0.086],[38.283,53.5],[37.208,63.7],[41.196,158.8],[33.324,186.8],[27.913,184.3],[2.354,143.7],[-3.68,143.2],[-31.745,169.307],[-42.809,159.407],[-43.849,145.207],[-41.803,102.107],[-29.248,49.507],[-7.55,21.963],[-8.069,17.163],[-32.137,11.46],[-48.194,-2.44],[-60.263,-31.34],[-61.373,-66.04],[-55.893,-75.84],[-27.506,-69.2]],"c":true}]},{"i":{"x":0.6,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0.954,5.3],[0,0],[3.851,-5],[0.733,-4.2],[0,0],[2.861,-1],[0,0],[-0.522,-12.403],[-1.32,-3.6],[0,0],[0.183,-4],[0,0],[-4.951,-1.7],[-1.687,2.5],[0,0],[-2.017,-2.9],[0,0],[-2.026,11.114],[0.293,5.6],[0,0],[6.968,9.8],[0,0],[-2.751,-1],[0,0],[-1.423,4.278],[0,0],[3.027,10.184],[2.164,0.8],[0,0]],"o":[[0,0],[-1.907,-10.1],[-1.504,2],[0,0],[-1.284,7.2],[0,0],[-4.804,1.6],[0.22,5.1],[0,0],[1.064,2.9],[0,0],[-0.623,13.7],[1.87,0.6],[0,0],[2.567,-3.6],[0,0],[4.034,5.7],[0.77,-4.2],[0,0],[-1.174,-23.3],[0,0],[-1.87,-3],[0,0],[7.182,-5.168],[0,0],[3.557,-7.6],[-1.394,-4.7],[0,0],[-2.127,-0.6]],"v":[[23.07,-78.7],[6.456,-168.7],[-4.436,-178.3],[-8.213,-168.3],[-23.843,-68.067],[-30.077,-56.267],[-52.52,-45.207],[-60.185,-18.107],[-57.801,-4.007],[-42.027,53.5],[-40.89,63.7],[-45.107,158.8],[-36.782,186.8],[-31.061,184.3],[-4.032,143.7],[2.349,143.2],[29.749,164.193],[41.448,154.293],[42.548,140.093],[40.361,96.461],[27.085,43.861],[8.069,20.441],[8.839,15.641],[36.605,-1.73],[57.5,-18.523],[66.348,-44.53],[67.521,-79.23],[61.727,-89.03],[27.616,-78.23]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":45,"s":[{"i":[[2.623,5.3],[0,0],[10.592,-5],[2.018,-4.2],[0,0],[7.868,-1],[0,0],[-1.472,-12.405],[-3.632,-3.6],[0,0],[0.504,-4],[0,0],[-13.618,-1.7],[-4.64,2.5],[0,0],[-5.548,-2.9],[0,0],[-5.609,11.12],[0.807,5.6],[0,0],[19.167,9.8],[0,0],[-7.566,-1],[0,0],[-12.811,10.4],[0,0],[8.3,10.177],[5.952,0.8],[0,0]],"o":[[0,0],[-5.246,-10.1],[-4.136,2],[0,0],[-3.531,7.2],[0,0],[-13.215,1.6],[0.605,5.1],[0,0],[2.925,2.9],[0,0],[-1.715,13.7],[5.145,0.6],[0,0],[7.061,-3.6],[0,0],[11.097,5.7],[2.118,-4.2],[0,0],[-3.228,-23.3],[0,0],[-5.145,-3],[0,0],[16.342,2.3],[0,0],[9.785,-7.6],[-3.833,-4.7],[0,0],[-5.851,-0.6]],"v":[[64.77,-78.7],[19.072,-168.7],[-10.888,-178.3],[-21.279,-168.3],[-64.757,-80.4],[-81.906,-68.6],[-171.384,-58],[-192.468,-30.9],[-185.911,-16.8],[-114.288,53.5],[-111.16,63.7],[-122.761,158.8],[-99.862,186.8],[-84.125,184.3],[-9.779,143.7],[7.774,143.2],[84.845,182.8],[117.024,172.9],[120.051,158.7],[114.099,115.6],[77.581,63],[-4.029,20.9],[-1.91,16.1],[99.169,29.8],[145.875,15.9],[180.981,-13],[184.209,-47.7],[168.27,-57.5],[77.077,-69.2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[1.6,5.3],[0,0],[6.461,-5],[1.231,-4.2],[0,0],[4.8,-1],[0,0],[-0.89,-12.404],[-2.215,-3.6],[0,0],[0.308,-4],[0,0],[-8.307,-1.7],[-2.831,2.5],[0,0],[-3.384,-2.9],[0,0],[-3.414,11.116],[0.492,5.6],[0,0],[8.521,12.168],[0,0],[-4.615,-1],[0,0],[-5.854,10.4],[0,0],[3.795,10.182],[2.719,0.8],[0,0]],"o":[[0,0],[-3.2,-10.1],[-2.523,2],[0,0],[-2.154,7.2],[0,0],[-8.061,1.6],[0.369,5.1],[0,0],[1.785,2.9],[0,0],[-1.046,13.7],[3.138,0.6],[0,0],[4.307,-3.6],[0,0],[6.769,5.7],[1.292,-4.2],[0,0],[-1.969,-23.3],[0,0],[-3.138,-3],[0,0],[7.467,2.3],[0,0],[4.471,-7.6],[-1.752,-4.7],[0,0],[-3.569,-0.6]],"v":[[38.919,-72.899],[11.342,-168.7],[-6.934,-178.3],[-13.272,-168.3],[-39.794,-80.4],[-49.177,-73.044],[-101.061,-81.879],[-113.922,-54.78],[-109.923,-40.68],[-69.004,33.989],[-67.097,44.189],[-74.526,146.144],[-60.557,174.144],[-50.958,171.644],[-6.257,143.7],[4.45,143.2],[49.926,190.659],[69.556,180.759],[71.402,166.559],[68.928,122.983],[49.584,68.4],[25.507,32.738],[26.799,27.938],[57.741,28.104],[79.081,14.204],[94.66,-5.731],[95.837,-34.631],[88.554,-44.431],[45.093,-59.495]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[-0.8,5.3],[0,0],[-3.231,-5],[-0.615,-4.2],[0,0],[-2.4,-1],[0,0],[0.476,-12.402],[1.108,-3.6],[0,0],[-0.154,-4],[0,0],[4.154,-1.7],[1.415,2.5],[0,0],[1.692,-2.9],[0,0],[1.737,11.107],[-0.246,5.6],[0,0],[-5.846,9.8],[0,0],[2.308,-1],[0,0],[4.748,10.4],[0,0],[-3.06,10.192],[-2.206,0.8],[0,0]],"o":[[0,0],[1.6,-10.1],[1.262,2],[0,0],[1.077,7.2],[0,0],[4.031,1.6],[-0.185,5.1],[0,0],[-0.892,2.9],[0,0],[0.523,13.7],[-1.569,0.6],[0,0],[-2.154,-3.6],[0,0],[-3.385,5.7],[-0.646,-4.2],[0,0],[0.985,-23.3],[0,0],[1.569,-3],[0,0],[-6.057,2.3],[0,0],[-3.627,-7.6],[1.421,-4.7],[0,0],[1.785,-0.6]],"v":[[-20.682,-68.735],[-6.796,-168.7],[2.342,-178.3],[5.512,-168.3],[18.67,-84.674],[24.363,-74.779],[55.247,-84.325],[61.678,-57.225],[59.678,-43.125],[32.627,46.581],[31.673,56.781],[35.49,146.456],[28.505,174.456],[23.705,171.956],[2.004,143.7],[-3.35,143.2],[-25.821,188.801],[-35.637,178.901],[-36.56,164.701],[-34.249,121.397],[-24.91,61.89],[-17.849,37.359],[-18.495,32.559],[-32.299,40.394],[-49.61,26.494],[-62.622,-2.406],[-63.946,-34.62],[-58.038,-44.42],[-25.007,-57.562]],"c":true}]},{"t":71,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gs","o":{"a":0,"k":100},"w":{"a":0,"k":8},"g":{"p":3,"k":{"a":0,"k":[0,0.796,0.439,0,0.5,0.782,0.4,0,1,0.769,0.361,0]}},"s":{"a":0,"k":[-1,-171]},"e":{"a":0,"k":[1.73,184.29]},"t":1,"lc":2,"lj":2,"bm":0,"nm":"Gradient_TGjBON7hdL","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29,"s":[0,1,0.714,0,0.5,0.965,0.612,0,1,0.929,0.51,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34,"s":[0,0.956,0.607,0,0.5,0.911,0.524,0,1,0.867,0.442,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[0,1,0.714,0,0.5,0.965,0.612,0,1,0.929,0.51,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":55,"s":[0,1,0.714,0,0.5,0.965,0.612,0,1,0.929,0.51,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[0,0.956,0.607,0,0.5,0.911,0.524,0,1,0.867,0.442,0]},{"t":64,"s":[0,1,0.714,0,0.5,0.965,0.612,0,1,0.929,0.51,0]}]}},"s":{"a":0,"k":[-0.953,-180.679]},"e":{"a":0,"k":[1.58,188.35]},"t":1,"nm":"Gradient_D2Kwxh51FL","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Back","bm":0,"hd":false}],"ip":0,"op":180,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Star Back","parent":4,"sr":1,"ks":{"p":{"a":0,"k":[0.061,187.016,0]},"a":{"a":0,"k":[0.061,187.015,0]},"s":{"a":0,"k":[100.001,99.999,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":20,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[-0.981,5.3],[0,0],[0,0],[-0.755,-4.2],[0,0],[-2.943,-1],[0,0],[0.551,-12.403],[1.358,-3.6],[0,0],[-0.189,-4],[0,0],[8.605,1.578],[1.736,2.5],[0,0],[2.075,-2.9],[0,0],[0,0],[0,0],[0,0],[-4.167,9.8],[0,0],[0.605,0.872],[0,0],[4.792,10.4],[1.813,13.205],[-3.107,10.185],[-2.226,0.8],[0,0]],"o":[[0,0],[1.962,-10.1],[0,0],[0,0],[1.321,7.2],[0,0],[4.943,1.6],[-0.226,5.1],[0,0],[-1.094,2.9],[0,0],[-7.138,2.855],[-1.924,0.6],[0,0],[-2.641,-3.6],[0,0],[-4.503,-1.054],[0,0],[0,0],[1.207,-23.3],[0,0],[1.118,-3],[0,0],[-2.671,-2.389],[0,0],[-2.237,-16.3],[1.434,-4.7],[0,0],[2.188,-0.6]],"v":[[-62.584,-78.957],[-44.325,-172.732],[-20.381,-182.847],[-1.143,-177.405],[-13.575,-72.562],[-7.161,-60.762],[18.762,-41.543],[26.648,-14.443],[24.195,-0.343],[4.39,53.243],[3.22,63.443],[35.29,185.036],[-1.006,186.543],[-6.892,184.043],[-34.7,143.443],[-45.089,170.725],[-80.479,166.875],[-86.434,155.907],[-86.984,140.629],[-85.34,98.877],[-75.267,48.164],[-66.803,25.19],[-67.597,17.96],[-74.91,13.092],[-93.746,-3.514],[-102.826,-31.597],[-102.695,-70.341],[-96.733,-80.141],[-62.049,-75.382]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[5.366,0.863],[0,0],[0,0],[-0.282,-4.2],[0,0],[-1.101,-1],[0,0],[0.206,-12.403],[0.508,-3.6],[0,0],[-0.071,-4],[0,0],[0,0],[0,0],[0,0],[0,0],[0.211,17.124],[-0.113,3.314],[0.208,2.24],[0,0],[-2.681,9.8],[0,0],[-0.204,0.123],[0,0],[0.7,9.221],[1.926,7.923],[-1.162,10.185],[-0.833,0.8],[0,0]],"o":[[0,0],[0.415,-12.562],[0,0],[0,0],[0.494,7.2],[0,0],[1.849,1.6],[-0.085,5.1],[0,0],[-0.409,2.9],[0,0],[1.053,14.374],[0,0],[0,0],[0,0],[0,0],[-0.074,-6.03],[0.059,-1.748],[0,0],[0.452,-23.3],[0,0],[0.175,-3],[0,0],[0.141,-2.224],[0,0],[0.143,-12.82],[0.536,-4.7],[0,0],[0.818,-0.6]],"v":[[-52.75,-82.065],[-51.37,-177.563],[-25.079,-187.176],[-1.634,-178.285],[-2.065,-70.123],[0.334,-58.323],[-1.2,-37.861],[-0.069,-14.781],[-0.392,3.335],[1.382,55.316],[0.945,65.516],[5.844,181.109],[-27.105,188.395],[-26.87,188.579],[-45.695,185.557],[-47.093,185.282],[-64.074,164.073],[-65.415,138.132],[-65.831,123.015],[-64.964,97.911],[-63.535,46.166],[-63.642,22.412],[-63.862,16.155],[-63.807,7.129],[-64.353,-9.531],[-65.136,-36.77],[-65.588,-71.47],[-63.358,-81.27],[-11.058,-79.672]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[-1.313,0.124],[0,0],[0,0],[0.241,-4.2],[0,0],[0.938,-1],[0,0],[-0.176,-12.403],[-0.433,-3.6],[0,0],[0.06,-4],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.18,17.124],[0.096,3.314],[-0.177,2.24],[0,0],[0.058,9.8],[0,0],[0.018,0.123],[0,0],[-0.063,9.221],[-0.042,7.923],[0.99,10.185],[0.71,0.8],[0,0]],"o":[[0,0],[-0.625,-10.1],[0,0],[0,0],[-0.421,7.2],[0,0],[-1.576,1.6],[0.072,5.1],[0,0],[0.349,2.9],[0,0],[-0.898,14.374],[0,0],[0,0],[0,0],[0,0],[0.063,-6.03],[-0.051,-1.748],[0,0],[-0.385,-23.3],[0,0],[-0.016,-3],[0,0],[-0.013,-2.224],[0,0],[-0.003,-12.82],[-0.457,-4.7],[0,0],[-0.698,-0.6]],"v":[[52.336,-93.551],[49.003,-174.786],[25.912,-182.913],[0.849,-178.285],[1.216,-70.123],[-0.829,-58.323],[0.478,-37.861],[-0.486,-14.781],[-0.211,3.335],[-1.723,55.316],[-1.35,65.516],[-8.083,181.366],[19.973,188.926],[20.413,188.979],[44.775,187.43],[45.967,187.155],[61.57,169.41],[62.225,144.551],[62.58,129.434],[61.858,97.874],[55.959,46.381],[61.462,23.437],[61.482,17.179],[61.313,6.345],[61.38,-9.555],[61.453,-36.808],[62.299,-87.786],[60.343,-95.718],[16.507,-83.896]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0.954,5.3],[0,0],[9.558,-0.194],[0.733,-4.2],[0,0],[2.861,-1],[0,0],[-0.522,-12.403],[-1.32,-3.6],[0,0],[0.183,-4],[0,0],[-7.039,0.611],[-1.687,2.5],[0,0],[-2.017,-2.9],[0,0],[-0.663,6.645],[0.293,5.6],[0,0],[6.968,9.8],[0,0],[-2.751,-1],[0,0],[-3.116,7.453],[-3.143,15.043],[3.027,10.184],[2.164,0.8],[0,0]],"o":[[0,0],[-1.907,-10.1],[-8.888,0.181],[0,0],[-1.284,7.2],[0,0],[-4.804,1.6],[0.22,5.1],[0,0],[1.064,2.9],[0,0],[-0.007,2.709],[7.039,-0.611],[0,0],[2.567,-3.6],[0,0],[5.458,-0.905],[0.424,-4.249],[0,0],[-1.174,-23.3],[0,0],[-1.87,-3],[0,0],[7.746,-6.229],[0,0],[2.865,-13.713],[-1.394,-4.7],[0,0],[-2.127,-0.6]],"v":[[64.541,-85.305],[49.001,-170.516],[31.183,-183.088],[-0.895,-179.668],[8.973,-69.954],[2.739,-58.154],[-19.704,-47.093],[-27.369,-19.993],[-24.985,-5.893],[-9.211,51.613],[-8.074,61.813],[-37.264,186.214],[-13.021,187.504],[10.966,177.699],[28.784,141.813],[34.948,168.669],[67.292,162.075],[80.383,151.919],[81.483,137.719],[79.297,94.088],[66.021,41.488],[55.322,20.784],[56.092,15.985],[74.393,0.403],[90.316,-20.41],[104.752,-50.095],[105.926,-84.795],[100.131,-94.595],[69.984,-92.796]],"c":true}]},{"i":{"x":0.6,"y":1},"o":{"x":0.167,"y":0.167},"t":39,"s":[{"i":[[1.49,5.3],[0,0],[8.258,0.011],[1.146,-4.2],[0,0],[4.469,-1],[0,0],[-0.836,-12.403],[-2.062,-3.6],[0,0],[0.286,-4],[0,0],[-9.079,-0.178],[-2.635,2.5],[0,0],[-3.151,-2.9],[0,0],[-2.299,8.172],[0.458,5.6],[0,0],[9.722,10.05],[0,0],[-4.297,-1],[0,0],[-6.283,8.458],[-2.025,9.91],[4.717,10.183],[3.38,0.8],[0,0]],"o":[[0,0],[-2.979,-10.1],[-9.317,0.618],[0,0],[-2.005,7.2],[0,0],[-7.505,1.6],[0.344,5.1],[0,0],[1.661,2.9],[0,0],[-0.577,6.46],[6.251,-0.198],[0,0],[4.01,-3.6],[0,0],[7.973,-1.188],[0.98,-4.232],[0,0],[-1.833,-23.3],[0,0],[-2.922,-3],[0,0],[10.444,-3.318],[0,0],[5.111,-11.627],[-2.177,-4.7],[0,0],[-3.323,-0.6]],"v":[[66.704,-80.363],[40.746,-169.664],[19.559,-182.542],[-4.097,-178.738],[-8.718,-73.254],[-18.458,-61.454],[-62.777,-50.551],[-74.751,-23.451],[-71.027,-9.351],[-36.962,52.522],[-35.186,62.722],[-61.807,186.082],[-34.969,188.575],[-13.936,183.377],[22.391,142.722],[52.921,174.228],[74.249,172.903],[97.3,159.7],[99.019,145.5],[95.624,102.05],[76.806,49.47],[40.809,26.937],[42.013,22.137],[86.303,17.043],[113.976,-7.754],[131.391,-34.748],[133.224,-69.448],[124.173,-79.248],[73.74,-76.812]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":45,"s":[{"i":[[2.623,5.3],[0,0],[10.592,-5],[2.018,-4.2],[0,0],[7.868,-1],[0,0],[-1.472,-12.405],[-3.632,-3.6],[0,0],[0.504,-4],[0,0],[-13.618,-1.7],[-4.64,2.5],[0,0],[-5.548,-2.9],[0,0],[-5.609,11.12],[0.807,5.6],[0,0],[19.167,9.8],[0,0],[-7.566,-1],[0,0],[-12.811,10.4],[0,0],[8.3,10.177],[5.952,0.8],[0,0]],"o":[[0,0],[-5.246,-10.1],[-4.136,2],[0,0],[-3.531,7.2],[0,0],[-13.215,1.6],[0.605,5.1],[0,0],[2.925,2.9],[0,0],[-1.715,13.7],[5.145,0.6],[0,0],[7.061,-3.6],[0,0],[11.097,5.7],[2.118,-4.2],[0,0],[-3.228,-23.3],[0,0],[-5.145,-3],[0,0],[16.342,2.3],[0,0],[9.785,-7.6],[-3.833,-4.7],[0,0],[-5.851,-0.6]],"v":[[64.77,-78.7],[19.072,-168.7],[-10.888,-178.3],[-21.279,-168.3],[-64.757,-80.4],[-81.906,-68.6],[-171.384,-58],[-192.468,-30.9],[-185.911,-16.8],[-114.288,53.5],[-111.16,63.7],[-122.761,158.8],[-99.862,186.8],[-84.125,184.3],[-9.779,143.7],[7.774,143.2],[84.845,182.8],[117.024,172.9],[120.051,158.7],[114.099,115.6],[77.581,63],[-4.029,20.9],[-1.91,16.1],[99.169,29.8],[145.875,15.9],[180.981,-13],[184.209,-47.7],[168.27,-57.5],[77.077,-69.2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[1.6,5.3],[0,0],[6.461,-5],[1.231,-4.2],[0,0],[4.8,-1],[0,0],[-3.826,-11.023],[-2.215,-3.6],[0,0],[0.308,-4],[0,0],[-11.299,-4.267],[-4.523,-1.033],[0,0],[-3.384,-2.9],[0,0],[-9.088,-3.097],[0.492,5.6],[0,0],[11.692,9.8],[0,0],[-4.615,-1],[0,0],[-5.854,10.4],[0,0],[3.794,10.182],[2.719,0.8],[0,0]],"o":[[0,0],[-3.2,-10.1],[-2.523,2],[0,0],[-2.154,7.2],[0,0],[-16.682,4.978],[1.677,4.831],[0,0],[1.785,2.9],[0,0],[-1.046,13.7],[3.138,0.6],[0,0],[4.307,-3.6],[0,0],[6.769,5.7],[4.159,1.418],[0,0],[-1.969,-23.3],[0,0],[-3.138,-3],[0,0],[7.467,2.3],[0,0],[4.471,-7.6],[-1.752,-4.7],[0,0],[-3.569,-0.6]],"v":[[-3.591,-82.734],[3.346,-178.308],[-50.226,-183.942],[-56.564,-173.942],[-82.304,-90.235],[-91.687,-82.879],[-143.788,-87.496],[-155.394,-40.783],[-151.394,-26.683],[-111.768,51.098],[-109.86,61.298],[-117.225,140],[-103.379,170.373],[-92.047,172.708],[-60.241,175.37],[-38.06,133.365],[1.219,180.282],[32.442,192.573],[55.956,191.766],[26.418,113.148],[4.143,60.548],[-45.26,11.065],[-43.967,6.265],[12.381,18.67],[36.111,13.334],[52.151,-15.566],[53.327,-44.466],[46.045,-54.266],[2.584,-69.33]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[1.358,5.3],[0,0],[7.587,-1.06],[1.511,-6.881],[0,0],[0.96,-0.2],[0,0],[-1.056,-10.469],[-0.892,-6.838],[0,0],[0.062,-0.8],[0,0],[-9.588,-4.267],[-3.838,-1.033],[0,0],[-3.815,0.489],[0,0],[-1.818,-0.619],[0.098,1.12],[0,0],[2.792,15.953],[0,0],[-3.916,-1],[0,0],[-1.171,2.08],[0,0],[-0.447,6.254],[2.308,0.8],[0,0]],"o":[[0,0],[-2.715,-10.1],[-6.435,0.199],[0,0],[4.101,4.045],[0,0],[-3.336,0.995],[0.477,4.978],[0,0],[0.357,0.58],[0,0],[-0.888,13.7],[2.663,0.6],[0,0],[7.118,-0.377],[0,0],[1.354,1.14],[0.832,0.284],[0,0],[-1.671,-23.3],[0,0],[-2.663,-3],[0,0],[1.493,0.46],[0,0],[0.487,-7.459],[0.728,-4.712],[0,0],[-3.029,-0.6]],"v":[[-2.482,-83.124],[0.279,-178.521],[-30.03,-187.592],[-52.283,-179.699],[-67.397,-92.546],[-33.333,-84.205],[-79.538,-94.016],[-85.966,-78.279],[-83.683,-17.64],[-74.511,51.149],[-73.936,61.55],[-75.526,141.58],[-64.986,181.714],[-51.988,184.088],[-34.62,186.427],[-14.824,178.431],[3.27,188.624],[10.153,191.552],[15.015,190.783],[7.16,110.026],[-0.565,57.98],[-10.616,16.089],[-9.519,11.289],[-1.613,14.522],[5.056,5.63],[8.152,-17.016],[9.055,-40.391],[7.063,-51.631],[0.882,-66.554]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":62,"s":[{"i":[[1.297,5.3],[0,0],[7.869,-0.075],[1.581,-7.551],[0,0],[0,0],[0,0],[-0.364,-10.331],[-0.561,-7.648],[0,0],[0,0],[0,0],[-9.16,-4.267],[-3.666,-1.033],[0,0],[-3.923,1.336],[0,0],[0,0],[0,0],[0,0],[0.567,17.492],[0,0],[-3.742,-1],[0,0],[0,0],[0,0],[-1.508,5.272],[2.205,0.8],[0,0]],"o":[[0,0],[-2.594,-10.1],[-7.413,-0.252],[0,0],[5.664,3.257],[0,0],[0,0],[0.177,5.015],[0,0],[0,0],[0,0],[-0.848,13.7],[2.544,0.6],[0,0],[7.82,0.429],[0,0],[0,0],[0,0],[0,0],[-1.596,-23.3],[0,0],[-2.544,-3],[0,0],[0,0],[0,0],[-0.509,-7.424],[1.348,-4.715],[0,0],[-2.893,-0.6]],"v":[[-2.205,-83.221],[-0.487,-178.574],[-24.981,-188.505],[-51.212,-181.139],[-64.922,-84.079],[-19.996,-75.491],[-64.727,-86.601],[-69.862,-78.608],[-66.755,-15.379],[-65.196,51.162],[-64.955,61.613],[-65.101,141.975],[-55.387,184.549],[-41.974,186.933],[-28.214,189.191],[-9.016,189.698],[3.782,190.71],[4.581,191.296],[4.78,190.537],[2.345,109.245],[-1.742,57.338],[-1.955,17.345],[-0.907,12.545],[-5.111,13.485],[-2.707,3.705],[-2.847,-17.378],[-2.013,-39.373],[-2.682,-50.972],[0.456,-65.86]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[{"i":[[-1.223,5.3],[0,0],[-7.418,-0.075],[-1.491,-7.551],[0,0],[0,0],[0,0],[2.924,-11.023],[1.693,-3.6],[0,0],[0,0],[0,0],[8.636,-4.267],[3.456,-1.033],[0,0],[3.698,1.336],[0,0],[0,0],[0,0],[0,0],[-0.535,17.492],[0,0],[3.527,-1],[0,0],[0,0],[0,0],[1.421,5.272],[-2.078,0.8],[0,0]],"o":[[0,0],[2.445,-10.1],[6.988,-0.252],[0,0],[0.582,0.624],[0,0],[0,0],[-1.281,4.831],[0,0],[0,0],[0,0],[0.799,13.7],[-2.398,0.6],[0,0],[-7.373,0.429],[0,0],[0,0],[0,0],[0,0],[1.505,-23.3],[0,0],[2.398,-3],[0,0],[0,0],[0,0],[0.479,-7.424],[-1.271,-4.715],[0,0],[2.728,-0.6]],"v":[[4.751,-83.236],[3.132,-178.589],[26.223,-188.52],[50.952,-181.154],[58.514,-90.931],[18.652,-83.616],[61.118,-90.047],[71.375,-62.196],[64.567,-14.848],[64.136,51.147],[63.908,61.597],[64.045,141.96],[54.888,184.534],[42.243,186.918],[29.271,189.176],[11.172,189.683],[-0.893,190.695],[-1.646,191.281],[-1.834,190.522],[0.462,109.23],[4.315,57.323],[4.516,17.33],[3.528,12.53],[7.491,13.47],[5.225,3.69],[5.357,-17.393],[4.57,-39.388],[5.201,-50.987],[2.243,-65.875]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64,"s":[{"i":[[-1.011,5.3],[0,0],[-5.325,-2.538],[-1.053,-5.875],[0,0],[-1.2,-0.5],[0,0],[1.687,-11.713],[1.4,-3.6],[0,0],[-0.077,-2],[0,0],[6.581,-4.532],[5.735,-0.714],[0,0],[2.695,-0.782],[0,0],[5.245,1.672],[-0.123,2.8],[0,0],[-3.191,13.646],[0,0],[2.918,-1],[0,0],[2.374,5.2],[0,0],[-0.829,7.729],[-2.142,0.8],[0,0]],"o":[[0,0],[2.023,-10.1],[4.125,0.874],[0,0],[0.235,1.785],[0,0],[2.015,0.8],[-0.733,4.965],[0,0],[-0.446,1.45],[0,0],[0.661,13.7],[-1.984,0.6],[0,0],[-4.763,-1.585],[0,0],[-1.692,2.85],[-2.024,-0.645],[0,0],[1.245,-23.3],[0,0],[1.984,-3],[0,0],[-3.029,1.15],[0,0],[-1.574,-7.512],[0.075,-4.708],[0,0],[2.256,-0.6]],"v":[[6.107,-78.987],[0.369,-178.24],[31.88,-186.895],[45.829,-178.212],[58.404,-88.113],[36.748,-83.593],[76.845,-88.301],[85.058,-63.885],[80.655,-33.161],[64.67,41.935],[64.08,52.26],[67.627,140.316],[61.067,176.236],[44.01,180.248],[29.198,181.622],[18.083,167.58],[3.812,185.471],[-15.25,190.357],[-12.883,174.391],[-2.821,112.312],[4.675,60.058],[16.455,16.113],[15.638,11.313],[1.668,23.93],[-8.12,12.09],[-14.56,-12.901],[-15.616,-40.006],[-12.346,-50.705],[2.69,-64.72]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[-0.8,5.3],[0,0],[-3.231,-5],[-0.615,-4.2],[0,0],[-2.4,-1],[0,0],[0.449,-12.403],[1.108,-3.6],[0,0],[-0.154,-4],[0,0],[4.527,-4.796],[8.013,-0.394],[0,0],[1.692,-2.9],[0,0],[10.491,3.345],[-0.246,5.6],[0,0],[-5.846,9.8],[0,0],[2.308,-1],[0,0],[4.748,10.4],[0,0],[-3.079,10.186],[-2.206,0.8],[0,0]],"o":[[0,0],[1.6,-10.1],[1.262,2],[0,0],[1.077,7.2],[0,0],[4.031,1.6],[-0.185,5.1],[0,0],[-0.892,2.9],[0,0],[0.523,13.7],[-1.569,0.6],[0,0],[-2.154,-3.6],[0,0],[-3.385,5.7],[-4.049,-1.291],[0,0],[0.985,-23.3],[0,0],[1.569,-3],[0,0],[-6.057,2.3],[0,0],[-3.627,-7.6],[1.421,-4.7],[0,0],[1.785,-0.6]],"v":[[7.462,-74.738],[-2.395,-177.89],[40.255,-185.334],[43.424,-175.334],[54.207,-99.937],[65.965,-86.709],[91.308,-89.177],[98.742,-65.575],[96.742,-51.475],[67.367,32.137],[66.413,42.338],[71.208,138.672],[67.246,167.938],[45.778,173.578],[29.125,174.069],[24.995,145.477],[8.518,180.248],[-28.854,189.434],[-23.932,158.259],[-6.105,115.394],[5.034,62.793],[28.394,14.897],[27.748,10.097],[-8.025,20.583],[-26.566,12.057],[-34.477,-8.409],[-35.802,-40.623],[-29.894,-50.423],[3.137,-63.565]],"c":true}]},{"t":71,"s":[{"i":[[-2.6,5.3],[0,0],[-10.5,-5],[-2,-4.2],[0,0],[-7.8,-1],[0,0],[1.5,-12.4],[3.6,-3.6],[0,0],[-0.5,-4],[0,0],[13.5,-1.7],[4.6,2.5],[0,0],[5.5,-2.9],[0,0],[5.6,11.1],[-0.8,5.6],[0,0],[-19,9.8],[0,0],[7.5,-1],[0,0],[12.7,10.4],[0,0],[-8.2,10.2],[-5.9,0.8],[0,0]],"o":[[0,0],[5.2,-10.1],[4.1,2],[0,0],[3.5,7.2],[0,0],[13.1,1.6],[-0.6,5.1],[0,0],[-2.9,2.9],[0,0],[1.7,13.7],[-5.1,0.6],[0,0],[-7,-3.6],[0,0],[-11,5.7],[-2.1,-4.2],[0,0],[3.2,-23.3],[0,0],[5.1,-3],[0,0],[-16.2,2.3],[0,0],[-9.7,-7.6],[3.8,-4.7],[0,0],[5.8,-0.6]],"v":[[-65.7,-78.7],[-20.4,-168.7],[9.3,-178.3],[19.6,-168.3],[62.7,-80.4],[79.7,-68.6],[168.4,-58],[189.3,-30.9],[182.8,-16.8],[111.8,53.5],[108.7,63.7],[120.2,158.8],[97.5,186.8],[81.9,184.3],[8.2,143.7],[-9.2,143.2],[-85.6,182.8],[-117.5,172.9],[-120.5,158.7],[-114.6,115.6],[-78.4,63],[2.5,20.9],[0.4,16.1],[-99.8,29.8],[-146.1,15.9],[-180.9,-13],[-184.1,-47.7],[-168.3,-57.5],[-77.9,-69.2]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"gs","o":{"a":0,"k":100},"w":{"a":0,"k":8},"g":{"p":3,"k":{"a":0,"k":[0,0.796,0.439,0,0.5,0.782,0.4,0,1,0.769,0.361,0]}},"s":{"a":0,"k":[-1,-171]},"e":{"a":0,"k":[1.73,184.29]},"t":1,"lc":2,"lj":2,"bm":0,"nm":"Gradient_ILexhnwGkU","hd":false},{"ty":"gf","o":{"a":0,"k":100},"r":1,"bm":0,"g":{"p":3,"k":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[0,1,0.714,0,0.5,0.965,0.612,0,1,0.929,0.51,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34,"s":[0,1,0.813,0.218,0.5,1,0.73,0.145,1,1,0.647,0.072]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":39,"s":[0,0.898,0.556,0,0.5,0.844,0.461,0,1,0.791,0.366,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":52,"s":[0,0.898,0.556,0,0.5,0.844,0.461,0,1,0.791,0.366,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":58,"s":[0,1,0.813,0.218,0.5,1,0.73,0.145,1,1,0.647,0.072]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":63,"s":[0,1,0.714,0,0.5,0.965,0.612,0,1,0.929,0.51,0]},{"t":68,"s":[0,0.898,0.556,0,0.5,0.844,0.461,0,1,0.791,0.366,0]}]}},"s":{"a":0,"k":[-0.953,-180.679]},"e":{"a":0,"k":[1.58,188.35]},"t":1,"nm":"Gradient_jwoM2CR32N","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"Transform"}],"nm":"Back","bm":0,"hd":false}],"ip":26,"op":70,"st":0,"bm":0}]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/superripple_effect.agsl b/TMessagesProj/src/main/res/raw/superripple_effect.agsl new file mode 100644 index 00000000000..db157a08a70 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/superripple_effect.agsl @@ -0,0 +1,66 @@ +uniform shader img; + +uniform float density; +uniform float2 size; +uniform int count; +uniform float4 radius; + +uniform float[7] t; +uniform float[7] centerX; +uniform float[7] centerY; +uniform float[7] intensity; + +float sdfRoundedBox(in float2 p, in float2 s, in float4 r) { + r.xy = (p.x > 0.0) ? r.xy : r.zw; + r.x = (p.y > 0.0) ? r.x : r.y; + float2 q = abs(p) - s + r.x; + return min(max(q.x, q.y), 0.0) + length(max(q, 0.0)) - r.x; +} + +float3 rippleOffset_ios(float2 position, float2 center, float intensity, float time) { + float speed = (intensity > 1.0 ? 1200.0 : 1500.0) * density; + float frequency = (intensity > 1.0 ? 17.0 : 15.0); + float amplitude = (intensity > 1.0 ? 15.0 : 30.0) * density * intensity; + float decay = intensity > 1.0 ? 5.5 : 10.0; + + float dist = length(position - center); + if (dist < 9.0 * density) return float3(0.0); + + float delay = dist / speed; + time -= delay; + time = max(0.0, time); + + float rippleAmount = amplitude * sin(frequency * time) * exp(-decay * time); + float absRippleAmount = abs(rippleAmount); + if (rippleAmount < 0.0) { + rippleAmount = -absRippleAmount; + } else { + rippleAmount = absRippleAmount; + } + + if (dist <= 80.0 * density) { + rippleAmount *= mix(0.4, 1.0, clamp((dist - 60.0 * density) / (20.0 * density), 0.0, 1.0)); + } + + return float3( + normalize(position - center) * rippleAmount, + (intensity > 1.0 ? 0.17 : 0.11) * (rippleAmount / amplitude) + ); +} + +half4 main(in float2 fragCoord) { + float add = 0.0; + float2 offset = float2(0.0); + for (int i = 0; i < 7; ++i) { + if (i >= count) break; + float3 ripple = rippleOffset_ios(fragCoord, float2(centerX[i], centerY[i]), intensity[i], t[i]); + offset += ripple.xy; + add += ripple.z; + } + float2 uv = fragCoord / size; + uv *= size; + uv += offset; + if (sdfRoundedBox(uv - size * .5, size * .5, radius) > 0.0) + return half4(0.0, 0.0, 0.0, 1.0); + return img.eval(uv) + half4(add, add, add, 1.); +} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/webview_app_ext.js b/TMessagesProj/src/main/res/raw/webview_app_ext.js new file mode 100644 index 00000000000..1f156218f91 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/webview_app_ext.js @@ -0,0 +1,112 @@ +/* + * Telegram-Android browser extension for Mini Apps + * + * # Gestures + * This script captures whether touch event is consumed by a website, to otherwise apply + * down or right gesture. Use `event.preventDefault()` at `touchstart` to prevent those gestures. + * It is recommended to do `event.preventDefault()` when dragging or swiping is expected to be + * handled by a website. + * + * Since some websites don't do that, the script also captures `style` and `class` changes to + * hierarchy of a touch element, and does equivalent of `preventDefault` if those changes happen + * while `touchstart` or `touchmove` events. + */ + +if (!window.__tg__webview_set) { + window.__tg__webview_set = true; + (function () { + const DEBUG = $DEBUG$; + + // Touch gestures hacks + let prevented = false; + let awaitingResponse = false; + let touchElement = null; + let mutatedWhileTouch = false; + let whiletouchstart = false, whiletouchmove = false; + document.addEventListener('touchstart', e => { + touchElement = e.target; + awaitingResponse = true; + whiletouchstart = true; + }, true); + document.addEventListener('touchstart', e => { + whiletouchstart = false; + }, false); + document.addEventListener('touchmove', e => { + whiletouchstart = false; + whiletouchmove = true; + if (awaitingResponse) { + setTimeout(() => { + if (awaitingResponse) { + if (window.TelegramWebviewProxy) { + const allowScrollX = !prevented && (!window.visualViewport || window.visualViewport.offsetLeft == 0) && !mutatedWhileTouch; + const allowScrollY = !prevented && (!window.visualViewport || window.visualViewport.offsetTop == 0) && !mutatedWhileTouch; + if (DEBUG) { + console.log('tgbrowser allowScroll sent after "touchmove": x=' + allowScrollX + ' y=' + allowScrollY, { prevented, mutatedWhileTouch }); + } + window.TelegramWebviewProxy.postEvent('web_app_allow_scroll', JSON.stringify([ allowScrollX, allowScrollY ])); + } + prevented = false; + awaitingResponse = false; + } + mutatedWhileTouch = false; + }, 16); + } + }, true); + document.addEventListener('touchmove', e => { + whiletouchmove = false; + }, false); + document.addEventListener('scroll', e => { + if (!e.target) return; + const allowScrollX = e.target.scrollLeft == 0 && (!window.visualViewport || window.visualViewport.offsetLeft == 0) && !prevented && !mutatedWhileTouch; + const allowScrollY = e.target.scrollTop == 0 && (!window.visualViewport || window.visualViewport.offsetTop == 0) && !prevented && !mutatedWhileTouch; + if (DEBUG) { + console.log('tgbrowser scroll on' + e.target + ' scrollLeft=' + e.target.scrollLeft + ' scrollTop=' + e.target.scrollTop); + } + if (awaitingResponse) { + if (window.TelegramWebviewProxy) { + if (DEBUG) { + console.log('tgbrowser allowScroll sent after "scroll": x=' + allowScrollX + ' y=' + allowScrollY, { prevented, mutatedWhileTouch, scrollLeft: e.target.scrollLeft, scrollTop: e.target.scrollTop }); + } + window.TelegramWebviewProxy.postEvent('web_app_allow_scroll', JSON.stringify([allowScrollX, allowScrollY])); + } + awaitingResponse = false; + } + prevented = false; + mutatedWhileTouch = false; + }, true); + if (TouchEvent) { + const originalPreventDefault = TouchEvent.prototype.preventDefault; + TouchEvent.prototype.preventDefault = function () { + prevented = true; + originalPreventDefault.call(this); + }; + const originalStopPropagation = TouchEvent.prototype.stopPropagation; + TouchEvent.prototype.stopPropagation = function () { + if (this.type === 'touchmove') { + whiletouchmove = false; + } else if (this.type === 'touchstart') { + whiletouchstart = false; + } + originalStopPropagation.call(this); + }; + } + const isParentOf = (e, p) => { + if (!e || !p) return false; + if (e == p) return true; + return isParentOf(e.parentElement, p); + } + new MutationObserver(mutationList => { + const isTouchElement = touchElement && !![...(mutationList||[])] + .filter(r => r && (r.attributeName === 'style' || r.attributeName === 'class')) + .map(r => r.target) + .filter(e => !!e && e != document.body && e != document.documentElement) + .find(e => isParentOf(touchElement, e)); + if (isTouchElement) { // && (whiletouchstart || whiletouchmove)) { + if (DEBUG) { + console.log('tgbrowser mutation detected', mutationList); + } + mutatedWhileTouch = true; + } + }).observe(document, { attributes: true, childList: true, subtree: true }); + })(); +}; \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/webview_ext.js b/TMessagesProj/src/main/res/raw/webview_ext.js new file mode 100644 index 00000000000..91c68337399 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/webview_ext.js @@ -0,0 +1,242 @@ +/* + * Telegram-Android browser extension + * + * # Gestures + * This script captures whether touch event is consumed by a website, to otherwise apply + * down or right gesture. Use `event.preventDefault()` at `touchstart` to prevent those gestures. + * It is recommended to do `event.preventDefault()` when dragging or swiping is expected to be + * handled by a website. + * + * You can also globally disable swipes for X and/or Y with <meta> tags: + * - <meta name="tg:swipes:x" content="none"> + * - <meta name="tg:swipes:y" content="allow"> + * Please, use these <meta> tags as the last resort, as it disables convenient back and close + * gestures, degrading user experience. + * + * Since some websites don't do that, the script also captures `style` and `class` changes to + * hierarchy of a touch element, and does equivalent of `preventDefault` if those changes happen + * while `touchstart` or `touchmove` events. + * + * === feature is hidden under debug button === + * # Action Bar and Navigation Bar colors + * Top action bar and bottom navigation bar colors are defined with: + * - <meta name="tg:theme-accent" content="#FFFFFF" /> — action bar, usually an accent color + * - <meta name="theme-color" content="#FFFFFF" /> — action bar, usually an accent color + * - <meta name="tg:theme-background" content="#FFFFFF" /> — navigation bar + * - <meta name="theme-background-color" content="#FFFFFF" /> — navigation bar + * - <body> `background-color` css style — fallback + * `media` attribute on <meta> is also supported, feel free to use `prefers-color-scheme` + */ + +if (!window.__tg__webview_set) { + window.__tg__webview_set = true; + (function () { + const DEBUG = $DEBUG$; + + // Touch gestures hacks + const isImageViewer = () => { + if (!document.body.children || document.body.children.length != 1) return false; + const img = document.querySelector('body > img'); + return img && img.tagName && img.tagName.toLowerCase() === 'img' && img.src === window.location.href; + } + const swipesDisabled = axis => + (document.querySelector(`meta[name="tg:swipes:${axis}"]`)||{}).content === 'none'; + let prevented = false; + let awaitingResponse = false; + let touchElement = null; + let mutatedWhileTouch = false; + let whiletouchstart = false, whiletouchmove = false; + document.addEventListener('touchstart', e => { + touchElement = e.target; + awaitingResponse = true; + whiletouchstart = true; + if (isImageViewer()) { + if (window.TelegramWebview) { + const allowScrollX = window.visualViewport && window.visualViewport.offsetLeft == 0 && !swipesDisabled('x'); + const allowScrollY = window.visualViewport && window.visualViewport.offsetTop == 0 && !swipesDisabled('y'); + if (DEBUG) { + console.log('tgbrowser allowScroll sent after "touchstart": x=' + allowScrollX + ' y=' + allowScrollY + ' inside image viewer'); + } + window.TelegramWebview.post('allowScroll', JSON.stringify([ allowScrollX, allowScrollY ])); + } + awaitingResponse = false; + } + }, true); + document.addEventListener('touchstart', e => { + whiletouchstart = false; + }, false); + document.addEventListener('touchmove', e => { + whiletouchstart = false; + whiletouchmove = true; + if (awaitingResponse) { + setTimeout(() => { + if (awaitingResponse) { + if (window.TelegramWebview) { + const allowScrollX = !prevented && (!window.visualViewport || window.visualViewport.offsetLeft == 0) && !mutatedWhileTouch && !swipesDisabled('x'); + const allowScrollY = !prevented && (!window.visualViewport || window.visualViewport.offsetTop == 0) && !mutatedWhileTouch && !swipesDisabled('y'); + if (DEBUG) { + console.log('tgbrowser allowScroll sent after "touchmove": x=' + allowScrollX + ' y=' + allowScrollY, { prevented, mutatedWhileTouch }); + } + window.TelegramWebview.post('allowScroll', JSON.stringify([ allowScrollX, allowScrollY ])); + } + prevented = false; + awaitingResponse = false; + } + mutatedWhileTouch = false; + }, 16); + } + }, true); + document.addEventListener('touchmove', e => { + whiletouchmove = false; + }, false); + document.addEventListener('scroll', e => { + if (!e.target) return; + const allowScrollX = e.target.scrollLeft == 0 && (!window.visualViewport || window.visualViewport.offsetLeft == 0) && !prevented && !mutatedWhileTouch && !swipesDisabled('x'); + const allowScrollY = e.target.scrollTop == 0 && (!window.visualViewport || window.visualViewport.offsetTop == 0) && !prevented && !mutatedWhileTouch && !swipesDisabled('y'); + if (DEBUG) { + console.log('tgbrowser scroll on' + e.target + ' scrollLeft=' + e.target.scrollLeft + ' scrollTop=' + e.target.scrollTop); + } + if (awaitingResponse) { + if (window.TelegramWebview) { + if (DEBUG) { + console.log('tgbrowser allowScroll sent after "scroll": x=' + allowScrollX + ' y=' + allowScrollY, { prevented, mutatedWhileTouch, scrollLeft: e.target.scrollLeft, scrollTop: e.target.scrollTop }); + } + window.TelegramWebview.post('allowScroll', JSON.stringify([allowScrollX, allowScrollY])); + } + awaitingResponse = false; + } + prevented = false; + mutatedWhileTouch = false; + }, true); + if (TouchEvent) { + const originalPreventDefault = TouchEvent.prototype.preventDefault; + TouchEvent.prototype.preventDefault = function () { + prevented = true; + originalPreventDefault.call(this); + }; + const originalStopPropagation = TouchEvent.prototype.stopPropagation; + TouchEvent.prototype.stopPropagation = function () { + if (this.type === 'touchmove') { + whiletouchmove = false; + } else if (this.type === 'touchstart') { + whiletouchstart = false; + } + originalStopPropagation.call(this); + }; + } + const isParentOf = (e, p) => { + if (!e || !p) return false; + if (e == p) return true; + return isParentOf(e.parentElement, p); + } + new MutationObserver(mutationList => { + const isTouchElement = touchElement && !![...(mutationList||[])] + .filter(r => r && (r.attributeName === 'style' || r.attributeName === 'class')) + .map(r => r.target) + .filter(e => !!e && e != document.body && e != document.documentElement) + .find(e => isParentOf(touchElement, e)); + if (isTouchElement) { // && (whiletouchstart || whiletouchmove)) { + if (DEBUG) { + console.log('tgbrowser mutation detected', mutationList); + } + mutatedWhileTouch = true; + } + }).observe(document, { attributes: true, childList: true, subtree: true }); + + // Retrieving colors + const __tg__backgroundColor = () => { + try { + return window.getComputedStyle(document.body, null).getPropertyValue('background-color'); + } catch (e) { + return null; + } + } + const __tg__metaColor = name => + [...document.querySelectorAll(`meta[name="${name}"]`)] + .filter(meta => !meta.media || window.matchMedia && window.matchMedia(meta.media).matches) + .map(meta => meta.content)[0]; + const __tg__cssColorToRGBA = color => { + if (!color) return null; + if (color[0] === '#') { + let hex = color.slice(1); + if (hex.length === 3 || hex.length === 4) { + hex = hex.split('').map(char => char + char).join(''); + } + return [parseInt(hex.slice(0,2), 16), parseInt(hex.slice(2,4), 16), parseInt(hex.slice(4,6), 16), hex.length <= 6 ? 1 : parseInt(hex.slice(6,8), 16) / 255]; + } + const colorMatch = color.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+(?:\.\d+)?))?\)$/); + if (colorMatch) { + return [parseInt(colorMatch[1]), parseInt(colorMatch[2]), parseInt(colorMatch[3]), colorMatch[4] ? parseFloat(colorMatch[4]) : 1]; + } + return null; + }; + let __tg__lastActionBarColor, __tg__lastNavigationBarColor; + window.__tg__postColorsChange = () => { + const actionBarColor = JSON.stringify(__tg__cssColorToRGBA( + __tg__metaColor("tg:theme-accent") || + __tg__metaColor("theme-color") || + __tg__backgroundColor() + )); + const navigationBarColor = JSON.stringify(__tg__cssColorToRGBA( + __tg__metaColor("tg:theme-background") || + __tg__metaColor("theme-background-color") || + __tg__backgroundColor() + )); + if (window.TelegramWebview) { + if (actionBarColor != __tg__lastActionBarColor) { + if (DEBUG) { + console.log('tgbrowser actionbar color', actionBarColor); + } + window.TelegramWebview.post("actionBarColor", __tg__lastActionBarColor = actionBarColor); + } + if (navigationBarColor != __tg__lastNavigationBarColor) { + if (DEBUG) { + console.log('tgbrowser navbar color', navigationBarColor); + } + window.TelegramWebview.post("navigationBarColor", __tg__lastNavigationBarColor = navigationBarColor); + } + } + }; + const __tg__colorsObserver = new MutationObserver(() => { + window.__tg__postColorsChange(); + setTimeout(window.__tg__postColorsChange, 500); + }); + window.__tg__listenColors = () => { + [ + document, + document.body, + ...document.querySelectorAll('meta[name="tg:theme-accent"]'), + ...document.querySelectorAll('meta[name="tg:theme-background"]'), + ...document.querySelectorAll('meta[name="theme-color"]'), + ...document.querySelectorAll('meta[name="theme-background-color"]') + ].filter(e => !!e).map(e => __tg__colorsObserver.observe(e, { attributes: true })); + if (window.matchMedia) { + window.matchMedia('(prefers-color-scheme: light)').addEventListener('change', () => window.__tg__postColorsChange()); + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => window.__tg__postColorsChange()); + } + }; + window.__tg__listenColors(); + window.addEventListener('ready', __tg__listenColors, true); + window.__tg__postColorsChange(); + })(); +}; + +setTimeout(function () { + const site_name = ( + (document.querySelector('meta[property="og:site_name"]') || {}).content || + (document.querySelector('meta[property="og:title"]') || {}).content + ); + if (window.TelegramWebview && window.TelegramWebview.post) { + if (site_name) { + window.TelegramWebview.post('siteName', site_name); + } else { + window.TelegramWebview.post('siteNameEmpty'); + } + } + if (window.__tg__listenColors) { + window.__tg__listenColors(); + } + if (window.__tg__postColorsChange) { + window.__tg__postColorsChange(); + } +}, 10); \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/webview_share.js b/TMessagesProj/src/main/res/raw/webview_share.js new file mode 100644 index 00000000000..0bd50d92f46 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/webview_share.js @@ -0,0 +1,43 @@ +// polyfill for web share api +if (window.navigator && !window.navigator.canShare) { + window.navigator.canShare = () => true; +} +if (window.navigator && !window.navigator.share) { + window.navigator.share = data => { + if (window.navigator.__share__receive) { + return new Promise((_, reject) => reject(new DOMException("Other sharing operations are in progress", "InvalidStateError"))) + } + if (typeof data !== 'object' || !data.url && !data.title && !data.text && !data.files) { + return new Promise((_, reject) => reject(new DOMException("share(...) receives only object with either url, title, text or files", "TypeError"))) + } + if (!window.TelegramWebview) { + return new Promise((_, reject) => reject(new DOMException("Must be handling a user gesture to perform a share", "NotAllowedError"))) + } + const { url, title, text } = data + const file = (Array.isArray(data.file) ? data.file[0] : data.file) || data.files && data.files[0] + if (file && file.arrayBuffer && file.size < 1024 * 1024 * 3) { + file.arrayBuffer().then(buffer => { + const bytes = Array.from(new Uint8Array(buffer)) + const filename = file.name + const filetype = file.type + window.TelegramWebview.resolveShare(JSON.stringify({ url, title, text }), bytes, filename, filetype); + }) + } else { + window.TelegramWebview.resolveShare(JSON.stringify({ url, title, text }), null, null, null); + } + return new Promise((resolve, reject) => { + window.navigator.__share__receive = reason => { + window.navigator.__share__receive = undefined; + if (!reason) { + resolve(); + } else if (reason === 'security') { + reject(new DOMException("Must be handling a user gesture to perform a share", "NotAllowedError")); + } else if (reason === 'abort') { + reject(new DOMException("The operation was aborted.", "AbortError")); + } else { + reject(new DOMException("", "DataError")); + } + }; + }); + }; +} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/values/ids.xml b/TMessagesProj/src/main/res/values/ids.xml index a8de4da7308..d6a6c8e790d 100644 --- a/TMessagesProj/src/main/res/values/ids.xml +++ b/TMessagesProj/src/main/res/values/ids.xml @@ -34,8 +34,10 @@ <item name="menu_reload_page" type="id"/> <item name="menu_delete_bot" type="id"/> <item name="menu_tos_bot" type="id"/> + <item name="menu_privacy" type="id"/> <item name="menu_add_to_home_screen_bot" type="id"/> <item name="menu_collapse_bot" type="id"/> + <item name="menu_share_bot" type="id"/> <!-- there are required for focusing order customization on the passcode screen --> <item name="passcode_btn_1" type="id"/> diff --git a/TMessagesProj/src/main/res/values/strings.xml b/TMessagesProj/src/main/res/values/strings.xml index 3f0dffa5d5f..da7924089e2 100644 --- a/TMessagesProj/src/main/res/values/strings.xml +++ b/TMessagesProj/src/main/res/values/strings.xml @@ -157,6 +157,8 @@ <string name="SetEmojiStatus">Set Emoji Status</string> <string name="ChangeEmojiStatus">Change Status</string> <string name="Settings">Settings</string> + <string name="Refresh">Refresh</string> + <string name="AddressPlaceholder">Search %s or type URL</string> <string name="Contacts">Contacts</string> <string name="NewGroup">New Group</string> <string name="Yesterday">yesterday</string> @@ -547,6 +549,7 @@ <string name="ChannelRestrictedUsers">Restricted users</string> <string name="ChannelAdministrators">Administrators</string> <string name="ChannelAdminSettings">Channel Settings</string> + <string name="ChannelStars">Balance</string> <string name="ChannelDelete">Delete Channel</string> <string name="ChannelDeleteMenu">Delete channel</string> <string name="ChannelDeleteAlert">Wait! Deleting this channel will remove all members and all messages will be lost. Delete the channel anyway?</string> @@ -640,6 +643,7 @@ <string name="ChannelNotifyMembersInfoOn">Members will be notified when you post</string> <string name="ChannelNotifyMembersInfoOff">Members will receive a silent notification</string> <string name="ChannelSignMessages">Sign Messages</string> + <string name="ChannelSignMessagesWithProfile">Show Authors\' Profiles</string> <string name="ChannelSignMessagesInfo">Add names of the admins to the messages they post.</string> <string name="EditAdmin">Admin Rights</string> <string name="EditAdminRank">Custom title</string> @@ -756,6 +760,7 @@ <string name="TypeLocationGroup">Link</string> <string name="TypeLocationGroupEdit">Tap to add a permanent link</string> <string name="ChoosePhoto">Choose photo</string> + <string name="ChoosePhotoForSticker">Create a sticker from a photo</string> <string name="AddImage">Add Image</string> <string name="ChoosePhotoOrVideo">Choose photo or video</string> <string name="AddPhoto">Set new photo</string> @@ -959,6 +964,8 @@ <string name="EventLogToggledInvitesOff">un1 disabled group invites</string> <string name="EventLogToggledSignaturesOn">un1 enabled signatures</string> <string name="EventLogToggledSignaturesOff">un1 disabled signatures</string> + <string name="EventLogToggledSignaturesProfilesOn">un1 enabled authors\' profiles</string> + <string name="EventLogToggledSignaturesProfilesOff">un1 disabled authors\' profiles</string> <string name="EventLogRestrictedUntil">changed permissions for %1$s\n\nDuration: %2$s</string> <string name="EventLogDefaultPermissions">changed default permissions</string> <string name="EventLogRestrictedSendStickers">Send stickers &amp; GIFs</string> @@ -2574,8 +2581,6 @@ <string name="SecretWebPage">Link Previews</string> <string name="SecretWebPageInfo">Link previews will be generated on Telegram servers. We do not store data about the links you send.</string> <string name="SecretChat">Secret chats</string> - <string name="ChromeCustomTabs">In-App Browser</string> - <string name="ChromeCustomTabsInfo">Open external links within the app</string> <string name="DirectShare">Direct Share</string> <string name="DirectShareInfo">Show recent chats in Android share menu</string> <string name="Emoji">Emoji</string> @@ -2604,6 +2609,7 @@ <string name="DebugMenuClearMediaCache">Clear sent media cache</string> <string name="DebugMenuCallSettings">Call settings</string> <string name="DebugMenuClearWebViewCache">Clear WebView cache</string> + <string name="DebugMenuClearWebViewCookies">Clear WebView cookies</string> <string name="DebugMenuEnableWebViewDebug">Enable WebView debug</string> <string name="DebugMenuDisableWebViewDebug">Disable WebView debug</string> <string name="DebugMenuWebViewDebugEnabled">Debug enabled!</string> @@ -3372,9 +3378,6 @@ <string name="ClearSearch">Clear search history?</string> <string name="ClearSearchAlert">Are you sure you want to clear your search history?</string> <string name="ClearSearchAlertPartial_one">Do you want to remove this chat from your search history?</string> - <string name="ClearSearchAlertPartial_two">Do you want to remove these %1$d chats from your search history?</string> - <string name="ClearSearchAlertPartial_few">Do you want to remove these %1$d chats from your search history?</string> - <string name="ClearSearchAlertPartial_many">Do you want to remove these %1$d chats from your search history?</string> <string name="ClearSearchAlertPartial_other">Do you want to remove these %1$d chats from your search history?</string> <string name="ClearSearchAlertTitle">Clear search history</string> <string name="ClearSearchAlertPartialTitle">Remove from search history</string> @@ -3875,7 +3878,10 @@ <string name="ActionTTLYouDisabled">You disabled the auto-delete timer</string> <string name="ActionInviteUser">un1 joined the group via invite link</string> <string name="ActionInviteUserFolder">un1 joined the group via folder invite link</string> + <string name="ActionInviteChannelUser">un1 joined the channel via invite link</string> + <string name="ActionInviteChannelUserFolder">un1 joined the channel via folder invite link</string> <string name="ActionKickUser">un1 removed un2</string> + <string name="ActionRefunded">un1 refunded back %1$s</string> <string name="ActionLeftUser">un1 left the group</string> <string name="ActionAddUser">un1 added un2</string> <string name="ActionRemovedPhoto">un1 removed the group photo</string> @@ -4144,6 +4150,7 @@ <string name="PermissionNoCameraWithHint">**Telegram** needs camera access so that you can take photos and videos. Tap Settings -> Permissions, and turn **Camera** on.</string> <string name="PermissionNoCameraMicVideo">**Telegram** needs camera and microphone access so that you can send video messages. Tap Settings -> Permissions, and turn **Microphone** and **Camera** on.</string> <string name="PermissionNoLocation">Telegram needs access to your location so that you can share it with your friends.</string> + <string name="PermissionNoLocationStory">Telegram needs access to your location so that you can add your current weather widget to a story.</string> <string name="PermissionNoLocationPosition">Telegram needs access to your location.</string> <string name="PermissionNoLocationFriends">**Telegram** needs access to location so that you can share it with your friends. Tap Settings -> Permissions, and turn **Location** on.</string> <string name="PermissionNoLocationPeopleNearby">**Telegram** needs access to location so that you can find people nearby. Tap Settings -> Permissions, and turn **Location** on.</string> @@ -4634,7 +4641,8 @@ <string name="NoRtmpStreamFromAppViewer">%1$s is currently not broadcasting live stream data to Telegram.</string> <!--invite links--> <string name="ManageInviteLinks">Manage Invite Links</string> - <string name="ManageLinksInfoHelp">You can create additional invite links that have a limited time or number of uses</string> + <string name="ManageLinksInfoHelp">You can create additional invite links that have a limited time or number of uses.</string> + <string name="ManageLinksInfoHelpPaid">You can create additional invite links that have a limited time, number of uses or require a paid subscription.</string> <string name="PrimaryLinkHelp">Anyone on Telegram will be able to join your group by following this link.</string> <string name="PrimaryLinkHelpChannel">Anyone on Telegram will be able to join your channel by following this link.</string> <string name="EditLink">Edit link</string> @@ -4666,6 +4674,7 @@ <string name="CreateNewLink">Create a New Link</string> <string name="DeleteAllRevokedLinks">Delete All Revoked Links</string> <string name="NoOneJoined">No one joined</string> + <string name="NoOneSubscribed">No one subscribed</string> <string name="LinkLimitReached">Limit reached</string> <string name="QRCodeLinkHelpGroup">Everyone on Telegram can scan this code to join your group.</string> <string name="DeleteLinkHelp">This will delete link.</string> @@ -4704,25 +4713,13 @@ <string name="LeaveCommunities_many">Leave %d communities</string> <string name="LeaveCommunities_other">Leave %d communities</string> - <string name="RemoveDocumentsMessage_zero">Do you want remove these **%d documents** from Downloads?</string> <string name="RemoveDocumentsMessage_one">Do you want remove this document from Downloads?</string> - <string name="RemoveDocumentsMessage_two">Do you want remove these **%d documents** from Downloads?</string> - <string name="RemoveDocumentsMessage_few">Do you want remove these **%d documents** from Downloads?</string> - <string name="RemoveDocumentsMessage_many">Do you want remove these **%d documents** from Downloads?</string> <string name="RemoveDocumentsMessage_other">Do you want remove these **%d documents** from Downloads?</string> - <string name="RemoveDocumentsTitle_zero">Remove %d documents</string> <string name="RemoveDocumentsTitle_one">Remove %d document</string> - <string name="RemoveDocumentsTitle_two">Remove %d documents</string> - <string name="RemoveDocumentsTitle_few">Remove %d documents</string> - <string name="RemoveDocumentsTitle_many">Remove %d documents</string> <string name="RemoveDocumentsTitle_other">Remove %d documents</string> - <string name="ForceSetPasswordAlertMessage_zero">Proceed without a password? If you do not set a password, you will only be able to log into your account via SMS once every %1$s days.</string> <string name="ForceSetPasswordAlertMessage_one">Proceed without a password? If you do not set a password, you will only be able to log into your account via SMS once every %1$s day.</string> - <string name="ForceSetPasswordAlertMessage_two">Proceed without a password? If you do not set a password, you will only be able to log into your account via SMS once every %1$s days.</string> - <string name="ForceSetPasswordAlertMessage_few">Proceed without a password? If you do not set a password, you will only be able to log into your account via SMS once every %1$s days.</string> - <string name="ForceSetPasswordAlertMessage_many">Proceed without a password? If you do not set a password, you will only be able to log into your account via SMS once every %1$s days.</string> <string name="ForceSetPasswordAlertMessage_other">Proceed without a password? If you do not set a password, you will only be able to log into your account via SMS once every %1$s days.</string> <string name="MessagesDeletedUndo_zero">Messages for %1$s days deleted</string> @@ -4732,24 +4729,12 @@ <string name="MessagesDeletedUndo_many">Messages for %1$s days deleted</string> <string name="MessagesDeletedUndo_other">Messages for %1$s days deleted</string> - <string name="DeleteDays_zero">Delete %1$s days</string> <string name="DeleteDays_one">Delete %1$s day</string> - <string name="DeleteDays_two">Delete %1$s days</string> - <string name="DeleteDays_few">Delete %1$s days</string> - <string name="DeleteDays_many">Delete %1$s days</string> <string name="DeleteDays_other">Delete %1$s days</string> - <string name="MembersAreSpeakingToast_zero">un1 are speaking</string> <string name="MembersAreSpeakingToast_one">un1 is speaking</string> - <string name="MembersAreSpeakingToast_two">un1 are speaking</string> - <string name="MembersAreSpeakingToast_few">un1 are speaking</string> - <string name="MembersAreSpeakingToast_many">un1 are speaking</string> <string name="MembersAreSpeakingToast_other">un1 are speaking</string> - <string name="DeleteBackground_zero">Delete %1$d backgrounds</string> <string name="DeleteBackground_one">Delete background</string> - <string name="DeleteBackground_two">Delete %1$d backgrounds</string> - <string name="DeleteBackground_few">Delete %1$d backgrounds</string> - <string name="DeleteBackground_many">Delete %1$d backgrounds</string> <string name="DeleteBackground_other">Delete %1$d backgrounds</string> <string name="Recipient_zero">%1$d recipients</string> <string name="Recipient_one">%1$d recipient</string> @@ -5786,6 +5771,7 @@ <string name="CreateNewTheme">Create a New Theme</string> <string name="ApproveNewMembers">Approve New Members</string> <string name="ApproveNewMembersDescription">Turn this on if you want users to join only after they are approved by an admin.</string> + <string name="ApproveNewMembersDescriptionFrozen">You can\'t enable admin approval for links that require a monthly fee.</string> <string name="NoMemberRequests">No join requests</string> <string name="RequestToJoinMembersTwo">%1$s, %2$s</string> <string name="RequestToJoinMembersThree">%1$s, %2$s and %3$s</string> @@ -6093,12 +6079,20 @@ <string name="BotRemoveInlineFromMenu">Remove **%1$s** from suggestions?</string> <string name="BotWebViewRequestGeolocationPermission">Allow **%1$s** to access to your location?\n\nThe developer of **%1$s** will be able to access your location when this web app is open.</string> <string name="BotWebViewRequestGeolocationPermissionWithHint">Allow **%1$s** to access to your location?\n\nThe developer of **%1$s** will be able to access your location when this web app is open.\n\nGo to Settings > Permissions and turn **Location** on to share location data.</string> + <string name="WebViewRequestGeolocationPermission">Allow **%1$s** to access to your location?\n\n**%1$s** will be able to access your location when this website is open.</string> + <string name="WebViewRequestGeolocationPermissionWithHint">Allow **%1$s** to access to your location?\n\n**%1$s** will be able to access your location when this website is open.\n\nGo to Settings > Permissions and turn **Location** on to share location data.</string> <string name="BotWebViewRequestMicrophonePermission">Allow **%1$s** to access to your microphone?\n\nThe developer of **%1$s** will be able to access your microphone when this web app is open.</string> <string name="BotWebViewRequestMicrophonePermissionWithHint">Allow **%1$s** to access to your microphone?\n\nThe developer of **%1$s** will be able to access your microphone when this web app is open.\n\nEnable microphone access in Settings > Permissions > Microphone.</string> + <string name="WebViewRequestMicrophonePermission">Allow **%1$s** to access to your microphone?\n\n**%1$s** will be able to access your microphone when this website is open.</string> + <string name="WebViewRequestMicrophonePermissionWithHint">Allow **%1$s** to access to your microphone?\n\n**%1$s** will be able to access your microphone when this website is open.\n\nEnable microphone access in Settings > Permissions > Microphone.</string> <string name="BotWebViewRequestCameraPermission">Allow **%1$s** to access to your camera?\n\nThe developer of **%1$s** will be able to access your camera when this web app is open.</string> <string name="BotWebViewRequestCameraPermissionWithHint">Allow **%1$s** to access to your camera?\n\nThe developer of **%1$s** will be able to access your camera when this web app is open.\n\nEnable camera access in Settings > Permissions > Camera.</string> + <string name="WebViewRequestCameraPermission">Allow **%1$s** to access to your camera?\n\n**%1$s** will be able to access your camera when this website is open.</string> + <string name="WebViewRequestCameraPermissionWithHint">Allow **%1$s** to access to your camera?\n\n**%1$s** will be able to access your camera when this website is open.\n\nEnable camera access in Settings > Permissions > Camera.</string> <string name="BotWebViewRequestCameraMicPermission">Allow **%1$s** to access to your camera and microphone?\n\nThe developer of **%1$s** will be able to access your camera and microphone when this web app is open.</string> <string name="BotWebViewRequestCameraMicPermissionWithHint">Allow **%1$s** to access to your camera and microphone?\n\nThe developer of **%1$s** will be able to access your camera and microphone when this web app is open.\n\nEnable camera access in Settings > Permissions > Camera.</string> + <string name="WebViewRequestCameraMicPermission">Allow **%1$s** to access to your camera and microphone?\n\n**%1$s** will be able to access your camera and microphone when this website is open.</string> + <string name="WebViewRequestCameraMicPermissionWithHint">Allow **%1$s** to access to your camera and microphone?\n\n**%1$s** will be able to access your camera and microphone when this website is open.\n\nEnable camera access in Settings > Permissions > Camera.</string> <string name="ErrorRingtoneDurationTooLong">Length must be under %s seconds.</string> <string name="ErrorRingtoneSizeTooBig">Size must be under %s Kb.</string> <string name="ErrorRingtoneInvalidFormat">File must be mp3 or ogg format.</string> @@ -6346,7 +6340,7 @@ <string name="DisableReactionsInfo">Members of the group can’t add any reactions to messages.</string> <string name="ClearRecentReactionsAlertTitle">Clear recent emoji</string> <string name="ClearRecentReactionsAlertMessage">Do you want to clear your recent reaction emoji from suggestions?</string> - <string name="SelectSendAsPeerPremiumHint">Subscribe to **Telegram Premium** to be able to comment on behalf of your channels in group chats.</string> + <string name="SelectSendAsPeerPremiumHint">Subscribe to **Telegram Premium** to be able to comment on behalf of your channels in any group chat.</string> <string name="SelectSendAsPeerPremiumOpen">Open</string> <string name="SetEmojiStatusUntilTitle">Set status until…</string> <string name="SetEmojiStatusUntilButton">Set Status</string> @@ -6362,6 +6356,8 @@ <string name="PremiumPreviewEmojiStatusDescription">Add any of thousands emojis next to your name to display current activity.</string> <string name="PremiumPreviewTranslations">Real-Time Translation</string> <string name="PremiumPreviewTranslationsDescription">Real-time translation of channels and chats into other languages.</string> + <string name="PremiumPreviewEffects">Message Effects</string> + <string name="PremiumPreviewEffectsDescription">Add over 500 animated effects to private messages.</string> <string name="PremiumPreviewWallpaper">Wallpaper for Both Sides</string> <string name="PremiumPreviewWallpaperDescription">Set custom wallpapers for you and your chat partner.</string> <string name="PremiumPreviewProfileColor">Name and Profile Colors</string> @@ -6566,14 +6562,8 @@ <string name="ClearCacheForChats">Are you sure you want to delete cached data for selected chats?</string> <string name="ClearCacheForChat">Are you sure you want to delete cached data for selected chat?</string> <string name="SelectChatsForAutoDelete">to apply the self-destruct timer</string> - <string name="SelectChatsForAutoDelete2_one">will have the self-destruct timer</string> - <string name="SelectChatsForAutoDelete2_few">will have the self-destruct timer</string> - <string name="SelectChatsForAutoDelete2_many">will have the self-destruct timer</string> - <string name="SelectChatsForAutoDelete2_other">will have the self-destruct timer</string> - <string name="SelectChatsForDisableAutoDelete2_one">will remove the self-destruct timer</string> - <string name="SelectChatsForDisableAutoDelete2_few">will remove the self-destruct timer</string> - <string name="SelectChatsForDisableAutoDelete2_many">will remove the self-destruct timer</string> - <string name="SelectChatsForDisableAutoDelete2_other">will remove the self-destruct timer</string> + <string name="SelectChatsForAutoDelete2">will have the self-destruct timer</string> + <string name="SelectChatsForDisableAutoDelete2">will remove the self-destruct timer</string> <string name="DisableAutoDeleteTimer">Disable Auto-Delete</string> <string name="PhotoEditorDraw">Draw</string> <string name="PhotoEditorSticker">Sticker</string> @@ -7079,7 +7069,8 @@ <string name="WallpaperPreview">Wallpaper</string> <string name="WallpaperNotification">Set a new chat Wallpaper</string> <string name="WallpaperSameNotification">Set a same chat Wallpaper</string> - <string name="BotWebViewStartPermission">You will connect to this bot\'s website to launch its web app.</string> + <string name="BotWebViewStartPermission">By launching this mini app, you agree to the **Terms of Service for Mini Apps**.</string> + <string name="BotWebViewStartPermissionLink">https://telegram.org/tos/stars</string> <string name="MoreAboutThisBot">More about this bot</string> <string name="ChatThemeDaySwitchTooltip">Tap to view this theme in the day mode.</string> <string name="ChatThemeNightSwitchTooltip">Tap to view this theme in the night mode.</string> @@ -7252,6 +7243,7 @@ <string name="ArchiveStories_many">Archive Stories</string> <string name="ArchiveStories_other">Archive Stories</string> <string name="EditStory">Edit Story</string> + <string name="EditBotPreview">Edit Preview</string> <string name="WhoCanSee">Who can see</string> <string name="Everyone">Everyone</string> <string name="CloseFriends">Close Friends</string> @@ -7389,6 +7381,7 @@ <string name="ArchivedStories">Archived Stories</string> <string name="SavedStories">Saved Stories</string> <string name="RecorderNewStory">New Story</string> + <string name="RecorderEditCover">Story Cover</string> <string name="RecorderEditStory">Edit</string> <string name="RecorderRepost">Repost</string> <string name="StoryAllowScreenshots">Allow Screenshots</string> @@ -8690,9 +8683,12 @@ <string name="MonetizationInfo">Telegram shares %1$d%% of the revenue from ads displayed in your channel. **Learn more >**</string> <string name="MonetizationBalance">Available balance</string> <string name="MonetizationBalanceInfo">You can collect your reward using Fragment, a third-party platform used by advertisers to pay for ads. **Learn more >**</string> - <string name="MonetizationProceedsInfo">Funds from your total balance become available for spending on ads and rewards 21 days after they are earned.</string> - <string name="MonetizationProceedsInfoLink">https://telegram.org/tos/content-creator-rewards</string> - <string name="MonetizationProceedsInfoTON">TON from your total balance become available for spending on ads and rewards 21 days after they are earned.</string> + <string name="MonetizationProceedsStarsInfo">Stars from your total balance become available for spending on ads and rewards 21 days after they are earned.</string> + <string name="MonetizationProceedsStarsInfoLink">https://telegram.org/tos/stars/</string> + <string name="MonetizationProceedsTONInfo">TON from your total balance become available for spending on ads and rewards 3 days after they are earned.</string> + <string name="MonetizationProceedsTONInfoLink">https://telegram.org/tos/content-creator-rewards</string> + <string name="MonetizationProceedsStarsTONInfo">Stars and TON from your total balance become available for spending on ads and rewards 21 and 3 days respectively after they are earned.</string> + <string name="MonetizationProceedsStarsTONInfoLink">https://telegram.org/tos/content-creator-rewards</string> <string name="MonetizationProceedsInfoTONLink">https://telegram.org/tos/content-creator-rewards</string> <string name="MonetizationBalanceInfoLink">https://telegram.org/tos/content-creator-rewards</string> <string name="MonetizationBalanceInfoNotAvailable">In the coming weeks you will be able to collect your reward using Fragment, a third-party platform used by advertisers to pay ads. **Learn more >**</string> @@ -8928,11 +8924,25 @@ <string name="EnterPINorFingerprint">Enter your PIN or use a fingerprint</string> <string name="EnterPIN">Enter your PIN</string> <string name="AppLocked">Telegram Locked</string> + <string name="ShowSensitiveContent">Show 18+ Content</string> + <string name="ShowSensitiveContentInfo">Do not hide media that contain content suitable only for adults</string> + <string name="ConfirmSensitiveContentTitle">18+ Content</string> + <string name="ConfirmSensitiveContentText">Confirm that you are over 18 years old and update your settings to see potentially explicit and sensitive content.</string> <string name="Confirm">Confirm</string> + <string name="MessageSensitiveContent">18+ Content</string> + <string name="MessageSensitiveContentShort">18+</string> + <string name="MessageShowSensitiveContentMediaTitle">18+ Content</string> + <string name="MessageShowSensitiveContentChannelTitle">18+ Content</string> + <string name="MessageShowSensitiveContentMediaText">This media may contain sensitive content suitable only for adults. Do you still want to view it?</string> + <string name="MessageShowSensitiveContentChannelText">This chat may contain sensitive content suitable only for adults. Do you still want to view it?</string> + <string name="MessageShowSensitiveContentAlways">Always show 18+ media</string> + <string name="MessageShowSensitiveContentButton">View Anyway</string> + <string name="SensitiveContentSettingsToast">You can update the visibility of sensitive media in **Chat Settings > Show 18+ Content**</string> <string name="MenuTelegramStars">Your Stars</string> <string name="TelegramStars">Telegram Stars</string> <string name="TelegramStarsInfo">Buy Stars to unlock content and service\nin miniapps on Telegram.</string> <string name="TelegramStarsChoose">Choose package</string> + <string name="TelegramStarsGift">Gift Stars to Friends</string> <string name="StarsCount_one">%d Star</string> <string name="StarsCount_other">%d Stars</string> <string name="StarsTOS">By proceeding and purchasing Stars, you agree with the **Terms and Conditions**.</string> @@ -8942,6 +8952,8 @@ <string name="StarsTransactionsIncoming">Incoming</string> <string name="StarsTransactionsOutgoing">Outgoing</string> <string name="StarsTransactionInApp">In-App Purchase</string> + <string name="StarsTransactionUnknown">Unknown User</string> + <string name="StarsTransactionUnknownLink">https://fragment.com/stars</string> <string name="StarsTransactionBot">Stars Top-Up Bot</string> <string name="StarsTransactionUnsupported">In-App Purchase</string> <string name="StarsTransactionAds">Ads</string> @@ -8962,6 +8974,11 @@ <string name="StarsNeededTitle_one">%d Star Needed</string> <string name="StarsNeededTitle_other">%d Stars Needed</string> <string name="StarsNeededText">Buy **Stars** and use them on **%s** and other miniapps.</string> + <string name="StarsNeededTextBuySubscription">Buy **Stars** and subscribe to **%s** and other channels.</string> + <string name="StarsNeededTextKeepSubscription">Buy **Stars** to keep your subscription for **%s**.</string> + <string name="StarsNeededTextReactions">Buy **Stars** to send paid reactions to **%s** and other channels.</string> + <string name="StarsNeededTextLink">Buy **Stars** to keep your channel subscriptions.</string> + <string name="StarsNeededTextLink_subs">Buy **Stars** to keep your channel subscriptions.</string> <string name="CaptionAbove">Move Caption Up</string> <string name="CaptionBelow">Move Caption Down</string> <string name="AddFactCheck">Add Fact Check</string> @@ -9035,7 +9052,7 @@ <string name="PaintBringToFront">To Front</string> <string name="HashtagStoriesFound_one">%d Story found</string> <string name="HashtagStoriesFound_other">%d Stories found</string> - <string name="HashtagStoriesFoundSubtitle">View stories with #%s</string> + <string name="HashtagStoriesFoundSubtitle">View stories with %s</string> <string name="StoryLinkLimitTitle">Limit Reached</string> <string name="StoryLinkLimitMessage_other">You can’t add more than %d links to a story.</string> <string name="BotStarsWithdrawalToast">Next withdrawal will be available in **%s**.</string> @@ -9050,6 +9067,7 @@ <string name="Stars_one">%d Star</string> <string name="Stars_other">%d Stars</string> <string name="StarsTransactionMedia">Media</string> + <string name="StarsTransactionMessage">Post</string> <string name="PaidContentTitle">Paid Content</string> <string name="PaidContentPriceTitle">Enter unlock cost</string> <string name="PaidContentInfo">Users will have to transfer this amount of Stars to your channel in order to view this media. **Learn more >**</string> @@ -9074,5 +9092,249 @@ <string name="StarsConfirmPurchaseMediaOne2_other">Do you want to unlock %2$s in **%3$s** for **%1$d stars**?</string> <string name="StarsConfirmPurchaseMediaTwo2_one">Do you want to unlock %2$s and %3$s in **%4$s** for **%1$d star**?</string> <string name="StarsConfirmPurchaseMediaTwo2_other">Do you want to unlock %2$s and %3$s in **%4$s** for **%1$d stars**?</string> + <string name="StarsConfirmPurchaseMediaBotOne2_one">Do you want to unlock %2$s from **%3$s** for **%1$d star**?</string> + <string name="StarsConfirmPurchaseMediaBotOne2_other">Do you want to unlock %2$s from **%3$s** for **%1$d stars**?</string> + <string name="StarsConfirmPurchaseMediaBotTwo2_one">Do you want to unlock %2$s and %3$s from **%4$s** for **%1$d star**?</string> + <string name="StarsConfirmPurchaseMediaBotTwo2_other">Do you want to unlock %2$s and %3$s from **%4$s** for **%1$d stars**?</string> <string name="AttachPaidMedia">⭐️ %s</string> + <string name="GiftStarsTitle">Gift Stars</string> + <string name="GiftStarsSubtitle">With Stars, **%s** will be able to unlock content and services on Telegram.</string> + <string name="GiftStarsSubtitleLinkName">**See Examples >**</string> + <string name="ActionGiftStarsTitle_one">%d Star</string> + <string name="ActionGiftStarsTitle_other">%d Stars</string> + <string name="ActionGiftStarsSubtitle">With Stars, **%s** is able to unlock content and services on Telegram.</string> + <string name="ActionGiftStarsSubtitleYou">Use Stars to unlock content and services on Telegram.</string> + <string name="ActionGiftStarsView">View</string> + <string name="StarsGiftReceived">Received Gift</string> + <string name="StarsGiftSent">Sent Gift</string> + <string name="StarsGiftSentPopup">Stars Gift Sent!</string> + <string name="StarsGiftSentPopupInfo_one">**%1$d Star** sent as gift to %2$s.</string> + <string name="StarsGiftSentPopupInfo_other">**%1$d Stars** sent as gift to %2$s.</string> + <string name="WebEmpty">Webpage</string> + <string name="WebErrorTitle">Oops...</string> + <string name="WebErrorInfo">Failed to load page.</string> + <string name="WebErrorInfoDomain">Failed to load **%s**.</string> + <string name="WebDownloading">Downloading...</string> + <string name="WebDownloadingFile">Downloading %s...</string> + <string name="WebDownloadAlertTitle">Download file</string> + <string name="WebDownloadAlertInfo">Start downloading **%s**?</string> + <string name="WebDownloadAlertInfoWithSize">Start downloading **%1$s** (%2$s)?</string> + <string name="WebDownloadAlertYes">Download</string> + <string name="WebSectionRecent">Recent searches</string> + <string name="WebSectionBookmarks">Bookmarks</string> + <string name="WebRecentClear">Clear</string> + <string name="WebRecentClearTitle">Clear recent searches?</string> + <string name="WebRecentClearText">Do you want to clear your recent search queries?</string> + <string name="SearchEngine">Search Engine</string> + <string name="SearchEngineInfo">Search and auto-complete in browser search bar</string> + <string name="OpenInTelegramBrowser">Open in Telegram</string> + <string name="OpenInSystemBrowser">Open in...</string> + <string name="AppsTab">Apps</string> + <string name="ProfileBotOpenApp">Open App</string> + <string name="ProfileBotOpenAppInfo">By launching this mini app, you agree to the **Terms of Service for Mini Apps.**</string> + <string name="ProfileBotOpenAppInfoLink">https://telegram.org/tos/mini-apps</string> + <string name="ProfileBotOpenAppInfoOwner">By publishing this mini app, you agree to the **Telegram Terms of Service for Developers.**</string> + <string name="ProfileBotOpenAppInfoOwnerLink">https://telegram.org/tos/mini-apps</string> + <string name="ProfileBotPreviewTab">Preview</string> + <string name="ProfileBotPreviewEmptyTitle">No Preview</string> + <string name="ProfileBotPreviewEmptyText_one">Upload up to %d screenshot and video demos for your mini app.</string> + <string name="ProfileBotPreviewEmptyText_other">Upload up to %d screenshots and video demos for your mini app.</string> + <string name="ProfileBotPreviewEmptyButton">Add preview</string> + <string name="BotPreviewEmpty">no images yet</string> + <string name="Images_one">%d image</string> + <string name="Images_other">%d images</string> + <string name="ProfileBotPreviewFooterGeneral">This preview will be displayed for all users except those for whom you provide a translated version.</string> + <string name="ProfileBotPreviewFooterLanguage">This preview will be displayed for all users who have %s set as their language.</string> + <string name="ProfileBotPreviewFooterCreateTranslation">Create a Translation</string> + <string name="ProfileBotPreviewFooterDeleteTranslation">Delete this Translation</string> + <string name="ProfileBotPreviewLanguageChoose">Add a Translation</string> + <string name="ProfileBotAddPreview">Add Preview</string> + <string name="ProfileBotLanguageGeneral">General</string> + <string name="ProfileBotLanguageAdd">Add Translation</string> + <string name="ProfileBotOr">or</string> + <string name="ProfileBotReorder">Reorder</string> + <string name="ProfileBotRemoveLang">Delete %s</string> + <string name="ProfileBotSelect">Select</string> + <string name="ProfileBotUnSelect">Unselect</string> + <string name="DeleteBotPreviewTitle">Delete Preview</string> + <string name="DeleteBotPreviewSubtitle">Are you sure you want to delete this preview?</string> + <string name="DeleteBotPreviewsTitle">Delete Previews</string> + <string name="DeleteBotPreviewsSubtitle_zero">Are you sure you want to delete %d previews?</string> + <string name="DeleteBotPreviewsSubtitle_one">Are you sure you want to delete %d preview?</string> + <string name="DeleteBotPreviewsSubtitle_two">Are you sure you want to delete %d previews?</string> + <string name="DeleteBotPreviewsSubtitle_few">Are you sure you want to delete %d previews?</string> + <string name="DeleteBotPreviewsSubtitle_many">Are you sure you want to delete %d previews?</string> + <string name="DeleteBotPreviewsSubtitle_other">Are you sure you want to delete %d previews?</string> + <string name="BotPreviewsDeleted_one">%d preview deleted</string> + <string name="BotPreviewsDeleted_other">%d previews deleted</string> + <string name="UploadBotPreview">Add</string> + <string name="SearchApps">Bots</string> + <string name="SearchAppsMine">Apps you use</string> + <string name="SearchAppsPopular">Popular apps</string> + <string name="SearchAppsExamples">Examples</string> + <string name="BotUsers_one">%d user</string> + <string name="BotUsers_other">%d users</string> + <string name="AppsClearSearch">Apps history</string> + <string name="AppsClearSearchAlert">Do you want to remove %s from your apps usage history?</string> + <string name="WebBookmark">Bookmark</string> + <string name="WebBookmarkedToast">Link added to Bookmarks in **Saved Messages**.</string> + <string name="SearchEngine1Name">Google</string> + <string name="SearchEngine1SearchURL">https://www.google.com/search?q=</string> + <string name="SearchEngine1AutocompleteURL">https://suggestqueries.google.com/complete/search?client=chrome&amp;q=</string> + <string name="SearchEngine1PrivacyPolicyURL">https://policies.google.com/privacy</string> + <string name="SearchEngine2Name">DuckDuckGo</string> + <string name="SearchEngine2SearchURL">https://duckduckgo.com/?q=</string> + <string name="SearchEngine2AutocompleteURL">https://duckduckgo.com/ac/?q=</string> + <string name="SearchEngine2PrivacyPolicyURL">https://duckduckgo.com/privacy</string> + <string name="SearchEngine3Name">Bing</string> + <string name="SearchEngine3SearchURL">https://www.bing.com/search?q=</string> + <string name="SearchEngine3AutocompleteURL">https://api.bing.com/osjson.aspx?query=</string> + <string name="SearchEngine3PrivacyPolicyURL">https://privacy.microsoft.com/en-us/privacystatement</string> + <string name="SearchEngine4Name">Yahoo</string> + <string name="SearchEngine4SearchURL">https://search.yahoo.com/search?p=</string> + <string name="SearchEngine4AutocompleteURL">https://sugg.search.yahoo.net/sg/?output=json&amp;nresults=10&amp;command=</string> + <string name="SearchEngine4PrivacyPolicyURL">https://legal.yahoo.com/us/en/yahoo/privacy/index.html</string> + <string name="SearchEngine5Name">Brave Search</string> + <string name="SearchEngine5SearchURL">https://search.brave.com/search?q=</string> + <string name="SearchEngine5AutocompleteURL">https://search.brave.com/api/suggest?q=</string> + <string name="SearchEngine5PrivacyPolicyURL">https://search.brave.com/help/privacy-policy</string> + <string name="SearchEngine6Name">reserved</string> + <string name="SearchEngine6SearchURL">reserved</string> + <string name="SearchEngine6AutocompleteURL">reserved</string> + <string name="SearchEngine6PrivacyPolicyURL">reserved</string> + <string name="SearchEngine7Name">reserved</string> + <string name="SearchEngine7SearchURL">reserved</string> + <string name="SearchEngine7AutocompleteURL">reserved</string> + <string name="SearchEngine7PrivacyPolicyURL">reserved</string> + <string name="BrowserSettingsTitle">Web Browser</string> + <string name="BrowserSettingsEnable">Enable In-App Browser</string> + <string name="BrowserSettingsCustomTabsTitle">Open external links in</string> + <string name="BrowserSettingsCustomTabs">New Pages within Telegram</string> + <string name="BrowserSettingsNoCustomTabs">New Tabs in External Browser</string> + <string name="BrowserSettingsNoCustomTabsInfo">You can choose to open external link without leaving Telegram.</string> + <string name="BrowserSettingsEnableInfo">Open links inside Telegram without starting an external browser.</string> + <string name="BrowserSettingsCacheClear">Clear Cache</string> + <string name="BrowserSettingsCookiesClear">Clear Cookies</string> + <string name="BrowserSettingsCacheClearText">Are you sure you want to clear browser cache%s?</string> + <string name="BrowserSettingsCookiesClearText">Are you sure you want to clear browser cookies%s?\n\nThis might log you out from website account sessions.</string> + <string name="BrowserSettingsCookiesInfo">Delete all cookies and cache from the Telegram in-app browser and miniapps.</string> + <string name="BrowserSettingsHistoryShow">View History</string> + <string name="BrowserSettingsHistoryClear">Clear History</string> + <string name="BrowserSettingsHistoryPages_one">%d page</string> + <string name="BrowserSettingsHistoryPages_other">%d pages</string> + <string name="BrowserSettingsHistoryClearText">Are you sure you want to clear browser history since %s?</string> + <string name="BrowserSettingsNeverOpenInTitle">Never open in the in-app browser</string> + <string name="BrowserSettingsNeverOpenInAdd">Add Website</string> + <string name="BrowserSettingsNeverOpenInRemove">Remove</string> + <string name="BrowserSettingsNeverOpenInClearList">Clear List</string> + <string name="BrowserSettingsNeverOpenInInfo">Telegram will always open links from these websites in the external browser.</string> + <string name="BrowserSettingsAddTitle">Add Website</string> + <string name="BrowserSettingsAddText">Enter a domain that you don’t want to be opened in the in-app browser.</string> + <string name="BrowserSettingsAddHint">Enter URL</string> + <string name="InappBrowser">In-App Browser</string> + <string name="InappBrowserInfo">Open external links within the app</string> + <string name="BrowserSettingsSearchEngine">Search Engine</string> + <string name="BrowserSettingsSearchEngineInfo">Search Engine is used in address bar to open search and auto-complete.</string> + <string name="BrowserExternalTitle">Open in Browser</string> + <string name="BrowserExternalText">Do you want to open this link in your default browser?</string> + <string name="BrowserExternalCheck">Always open links from **%s** in browser</string> + <string name="BrowserExternalRestricted">Telegram will now open links from this website in the external browser. You can change this in **Settings.**</string> + <string name="StoryEditCover">Edit Cover</string> + <string name="StoryEditCoverInfo">Choose a frame from the story to show in your Profile.</string> + <string name="StoryEditCoverMenu">Edit Cover</string> + <string name="StoryCoverSave">Save Cover</string> + <string name="WebBookmarks">Bookmarks</string> + <string name="WebHistory">History</string> + <string name="WebNoHistory">No history yet</string> + <string name="WebNoSearchedHistory">No search results</string> + <string name="WebNoBookmarks">No bookmarks found</string> + <string name="WebForward">Go Forward</string> + <string name="BotPrivacyPolicy">Privacy Policy</string> + <string name="RequireMonthlyFee">Require Monthly Fee</string> + <string name="RequireMonthlyFeePriceHint">Stars Amount per month</string> + <string name="RequireMonthlyFeePriceHintTest5Minutes">Stars Amount per 5 minutes</string> + <string name="RequireMonthlyFeePrice">~%s/month</string> + <string name="RequireMonthlyFeePriceTest5Minutes">~%s/5min</string> + <string name="RequireMonthlyFeeInfo">Charge a subscription fee from people joining your channel via this link.</string> + <string name="RequireMonthlyFeeInfoLink">https://telegram.org/tos/stars</string> + <string name="RequireMonthlyFeeInfoFrozen">If you need to change the subscription fee, create a new invite link with different price.</string> + <string name="LinkRevenue">Subscription fee</string> + <string name="LinkRevenuePrice">⭐️%1$d/month</string> + <string name="LinkRevenuePriceInfo">you get approximately %1$s monthly</string> + <string name="StarsSubscribeTitle">Subscribe to the Channel</string> + <string name="StarsSubscribeText_one">Do you want to subscribe to **%2$s** for **%1$d Star** per month?</string> + <string name="StarsSubscribeText_other">Do you want to subscribe to **%2$s** for **%1$d Stars** per month?</string> + <string name="StarsSubscribeTextTest_one">Do you want to subscribe to **%2$s** for **%1$d Star** per %3$s?</string> + <string name="StarsSubscribeTextTest_other">Do you want to subscribe to **%2$s** for **%1$d Stars** per %3$s?</string> + <string name="StarsSubscribeButton">Subscribe</string> + <string name="StarsSubscribeInfo">By subscribing you agree to the **Terms of Service**.</string> + <string name="StarsSubscribeInfoLink">https://telegram.org/tos/stars</string> + <string name="StarsSubscriptionCompleted">Subscription successful!</string> + <string name="StarsSubscriptionCompletedText_one">%1$d Star transferred to **%2$s**.</string> + <string name="StarsSubscriptionCompletedText_other">%1$d Stars transferred to **%2$s**.</string> + <string name="StarsTransactionSubscriptionMonthly">Monthly subscription fee</string> + <string name="StarsReactionTerms">By sending Stars you agree to the **Terms of Service**.</string> + <string name="StarsReactionTermsLink">https://telegram.org/tos/stars</string> + <string name="StarsSubscriptionRenews">renews on %s</string> + <string name="StarsSubscriptionExpires">expires on %s</string> + <string name="StarsSubscriptionExpired">expired on %s</string> + <string name="StarsSubscriptionStatusCancelled">cancelled</string> + <string name="StarsSubscriptionStatusExpired">expired</string> + <string name="StarsSubscriptionTitle">Subscription</string> + <string name="StarsSubscriptionPrice">⭐️%1$d/month</string> + <string name="StarsSubscriptionChannel">Subscription</string> + <string name="StarsSubscriptionSince">Subscribed</string> + <string name="StarsSubscriptionUntilRenews">Renews</string> + <string name="StarsSubscriptionUntilExpires">Expires</string> + <string name="StarsSubscriptionUntilExpired">Expired</string> + <string name="StarsSubscriptionCancelledText">You have cancelled your subscription.</string> + <string name="StarsSubscriptionRenew">Renew Subscription</string> + <string name="StarsSubscriptionAgain">Subscribe Again</string> + <string name="StarsSubscriptionCancel">Cancel Subscription</string> + <string name="StarsSubscriptionCancelInfo">If you cancel now, you will still be able to access your subscription until %s.</string> + <string name="StarsSubscriptionExpiredInfo">Your subscription expired on %s.</string> + <string name="StarsSubscriptionRefulfill">Join Channel</string> + <string name="StarsSubscriptionRefulfillInfo">You left channel, but you can still get back until %s.</string> + <string name="StarsSubscriptionExpiredHintTitle">⭐️%1$d Stars needed for %2$s</string> + <string name="StarsSubscriptionExpiredHintText">Insufficient funds to cover your subscription.</string> + <string name="StarsParticipantSubscription">Subscriber</string> + <string name="StarsParticipantSubscriptionApproxMonth">appx. %1$s per month</string> + <string name="StarsParticipantSubscriptionStart">Subscribed</string> + <string name="StarsParticipantSubscriptionExpired">Expired</string> + <string name="StarsParticipantSubscriptionRenews">Renews</string> + <string name="StarsParticipantSubscriptionPerMonth">per month</string> + <string name="StarsSentTitle">Stars sent!</string> + <string name="StarsSentText_one">You reacted with **%d** star.</string> + <string name="StarsSentText_other">You reacted with **%d** stars.</string> + <string name="StarsSentUndo">Undo</string> + <string name="StarsReactionTitle">Star Reaction</string> + <string name="StarsReactionText">Choose how many stars you want to send to **%s** to support this post.</string> + <string name="StarsReactionTextSent_one">You sent **%1$d** Star to support this post.</string> + <string name="StarsReactionTextSent_other">You sent **%1$d** Stars to support this post.</string> + <string name="StarsReactionTopSenders">Top Senders</string> + <string name="StarsReactionShowMeInTopSenders">Show me in Top Senders</string> + <string name="StarsReactionAnonymous">Anonymous</string> + <string name="StarsReactionSend">Send ⭐️%s</string> + <string name="StarsReactionTop">TOP</string> + <string name="StarsReactionsSent">Star Reaction</string> + <string name="ChannelEnablePaidReactions">Enable Paid Reactions</string> + <string name="ChannelEnablePaidReactionsInfo">Switch this on to let your subscribers set paid reactions with Telegram Stars, which you will be able to withdraw later as TON.</string> + <string name="ChannelEnablePaidReactionsInfoLink">https://telegram.org/tos/stars/</string> + <string name="ChannelSignInfo">Add names of admins to the messages they post.</string> + <string name="ChannelSignProfilesInfo">Add names and photos of admins to the messages they post, linking to their profiles.</string> + <string name="ChannelLinksInfoPaid">You can create additional invite links that have limited time, number of users or require a paid subscription.</string> + <string name="ChannelLinksInfo">You can create additional invite links that have limited time and number of users.</string> + <string name="StarSubscriptionTo">To</string> + <string name="StarSubscriptionPurchase">Monthly subscription fee</string> + <string name="StarMySubscriptions">My subscriptions</string> + <string name="StarMySubscriptionsExpand">Show More</string> + <string name="StarsTopupLinkEnough">You have enough stars at the moment.</string> + <string name="StarsTopupLinkTopupAnyway">Topup Anyway</string> + <string name="BotDefaultPrivacyPolicy">https://telegram.org/privacy-tpa</string> + <string name="PeopleSubscriptionExpired_one">%d expired subscription</string> + <string name="PeopleSubscriptionExpired_other">%d expired subscriptions</string> + <string name="StarsSubscriptionCancelledToast">Subscription cancelled</string> + <string name="StarsSubscriptionCancelledToastText">You will still have access to the channel until **%s**.</string> + <string name="StarsSubscriptionRenewedToast">Subscription renewed</string> + <string name="StarsSubscriptionRenewedToastText">You renewed your subscription to **%s**.</string> </resources> \ No newline at end of file diff --git a/TMessagesProj_AppStandalone/src/main/AndroidManifest.xml b/TMessagesProj_AppStandalone/src/main/AndroidManifest.xml index 32aeed36732..641590bac81 100644 --- a/TMessagesProj_AppStandalone/src/main/AndroidManifest.xml +++ b/TMessagesProj_AppStandalone/src/main/AndroidManifest.xml @@ -5,7 +5,10 @@ android:installLocation="auto"> <application android:name="org.telegram.messenger.ApplicationLoaderImpl" tools:replace="name"> - <service android:name="org.telegram.messenger.GoogleVoiceClientService" android:exported="true"/> + <service + android:name="org.telegram.messenger.GoogleVoiceClientService" + android:exported="true" + /> <activity android:name="org.telegram.messenger.GoogleVoiceClientActivity" android:exported="true"> @@ -16,6 +19,10 @@ </intent-filter> </activity> - <service android:name="org.telegram.messenger.SMSJobsNotification" android:enabled="true" android:exported="true"/> + <service + android:name="org.telegram.messenger.SMSJobsNotification" + android:enabled="true" + android:exported="true" + /> </application> </manifest> \ No newline at end of file diff --git a/TMessagesProj_AppStandalone/src/main/java/org/telegram/messenger/SMSJobsNotification.java b/TMessagesProj_AppStandalone/src/main/java/org/telegram/messenger/SMSJobsNotification.java index e98608497cf..2f95fc73220 100644 --- a/TMessagesProj_AppStandalone/src/main/java/org/telegram/messenger/SMSJobsNotification.java +++ b/TMessagesProj_AppStandalone/src/main/java/org/telegram/messenger/SMSJobsNotification.java @@ -11,6 +11,7 @@ import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationManagerCompat; +import androidx.core.app.ServiceCompat; import org.telegram.messenger.web.R; import org.telegram.tgnet.TL_smsjobs; diff --git a/gradle.properties b/gradle.properties index 52f2a351ea9..18b41aeb3e9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,8 +13,8 @@ # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true #Sat Mar 12 05:53:50 MSK 2016 -APP_VERSION_CODE=4945 -APP_VERSION_NAME=10.14.5 +APP_VERSION_CODE=5143 +APP_VERSION_NAME=11.0.0 APP_PACKAGE=org.telegram.messenger IS_PRIVATE=false RELEASE_KEY_PASSWORD=android