diff --git a/TMessagesProj/build.gradle b/TMessagesProj/build.gradle index 13dee4125b5..ee904886d89 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' @@ -226,7 +225,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 ef59f86ab39..3e86a329dbf 100644 Binary files a/TMessagesProj/jni/ffmpeg/arm64-v8a/libavcodec.a and b/TMessagesProj/jni/ffmpeg/arm64-v8a/libavcodec.a differ diff --git a/TMessagesProj/jni/ffmpeg/arm64-v8a/libavformat.a b/TMessagesProj/jni/ffmpeg/arm64-v8a/libavformat.a index bb75ab74e26..4bd6439a4da 100644 Binary files a/TMessagesProj/jni/ffmpeg/arm64-v8a/libavformat.a and b/TMessagesProj/jni/ffmpeg/arm64-v8a/libavformat.a differ diff --git a/TMessagesProj/jni/ffmpeg/arm64-v8a/libavresample.a b/TMessagesProj/jni/ffmpeg/arm64-v8a/libavresample.a index a5d4c2b779f..591f2207b53 100644 Binary files a/TMessagesProj/jni/ffmpeg/arm64-v8a/libavresample.a and b/TMessagesProj/jni/ffmpeg/arm64-v8a/libavresample.a differ diff --git a/TMessagesProj/jni/ffmpeg/arm64-v8a/libavutil.a b/TMessagesProj/jni/ffmpeg/arm64-v8a/libavutil.a index cf6697a677f..6b3846183c3 100644 Binary files a/TMessagesProj/jni/ffmpeg/arm64-v8a/libavutil.a and b/TMessagesProj/jni/ffmpeg/arm64-v8a/libavutil.a differ diff --git a/TMessagesProj/jni/ffmpeg/arm64-v8a/libswresample.a b/TMessagesProj/jni/ffmpeg/arm64-v8a/libswresample.a index 7675775e3b9..69efdf612d5 100644 Binary files a/TMessagesProj/jni/ffmpeg/arm64-v8a/libswresample.a and b/TMessagesProj/jni/ffmpeg/arm64-v8a/libswresample.a differ diff --git a/TMessagesProj/jni/ffmpeg/arm64-v8a/libswscale.a b/TMessagesProj/jni/ffmpeg/arm64-v8a/libswscale.a index 2732e67fc71..9f0c6d211c6 100644 Binary files a/TMessagesProj/jni/ffmpeg/arm64-v8a/libswscale.a and b/TMessagesProj/jni/ffmpeg/arm64-v8a/libswscale.a differ diff --git a/TMessagesProj/jni/ffmpeg/arm64-v8a/libvpx.a b/TMessagesProj/jni/ffmpeg/arm64-v8a/libvpx.a index 32f07ddd9c0..0d8886b8b62 100644 Binary files a/TMessagesProj/jni/ffmpeg/arm64-v8a/libvpx.a and b/TMessagesProj/jni/ffmpeg/arm64-v8a/libvpx.a differ diff --git a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavcodec.a b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavcodec.a index 5f8dd2c6289..4d4a948567d 100644 Binary files a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavcodec.a and b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavcodec.a differ diff --git a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavformat.a b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavformat.a index bbd38c511a9..c43fffeaace 100644 Binary files a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavformat.a and b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavformat.a differ diff --git a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavresample.a b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavresample.a index 677df649259..a4816891dde 100644 Binary files a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavresample.a and b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavresample.a differ diff --git a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavutil.a b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavutil.a index f7a03fba42f..5dde31d83b6 100644 Binary files a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavutil.a and b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libavutil.a differ diff --git a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libswresample.a b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libswresample.a index 90e94947f1c..fb86241f981 100644 Binary files a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libswresample.a and b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libswresample.a differ diff --git a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libswscale.a b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libswscale.a index e740c363439..f35501bcaee 100644 Binary files a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libswscale.a and b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libswscale.a differ diff --git a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libvpx.a b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libvpx.a index ca37d5906f9..a6d9ffcaa7d 100644 Binary files a/TMessagesProj/jni/ffmpeg/armeabi-v7a/libvpx.a and b/TMessagesProj/jni/ffmpeg/armeabi-v7a/libvpx.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86/libavcodec.a b/TMessagesProj/jni/ffmpeg/x86/libavcodec.a index 4eddf5040ca..002a567a918 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86/libavcodec.a and b/TMessagesProj/jni/ffmpeg/x86/libavcodec.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86/libavformat.a b/TMessagesProj/jni/ffmpeg/x86/libavformat.a index a6743018d46..00c5ac2ef37 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86/libavformat.a and b/TMessagesProj/jni/ffmpeg/x86/libavformat.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86/libavresample.a b/TMessagesProj/jni/ffmpeg/x86/libavresample.a index 5c8bc6263ba..81563020cf8 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86/libavresample.a and b/TMessagesProj/jni/ffmpeg/x86/libavresample.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86/libavutil.a b/TMessagesProj/jni/ffmpeg/x86/libavutil.a index 0b72b41459d..f03fd350b8c 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86/libavutil.a and b/TMessagesProj/jni/ffmpeg/x86/libavutil.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86/libswresample.a b/TMessagesProj/jni/ffmpeg/x86/libswresample.a index 45ee7954dba..00a5203be87 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86/libswresample.a and b/TMessagesProj/jni/ffmpeg/x86/libswresample.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86/libswscale.a b/TMessagesProj/jni/ffmpeg/x86/libswscale.a index efdf8fce0ae..fb56c176cb7 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86/libswscale.a and b/TMessagesProj/jni/ffmpeg/x86/libswscale.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86/libvpx.a b/TMessagesProj/jni/ffmpeg/x86/libvpx.a index 865f97cbc17..de3c1db956e 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86/libvpx.a and b/TMessagesProj/jni/ffmpeg/x86/libvpx.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libavcodec.a b/TMessagesProj/jni/ffmpeg/x86_64/libavcodec.a index 13d6c3ee02d..e54555cb9ba 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86_64/libavcodec.a and b/TMessagesProj/jni/ffmpeg/x86_64/libavcodec.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libavformat.a b/TMessagesProj/jni/ffmpeg/x86_64/libavformat.a index 730d167d40b..f8e54307486 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86_64/libavformat.a and b/TMessagesProj/jni/ffmpeg/x86_64/libavformat.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libavresample.a b/TMessagesProj/jni/ffmpeg/x86_64/libavresample.a index 11b9ada0b43..a2e5997b601 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86_64/libavresample.a and b/TMessagesProj/jni/ffmpeg/x86_64/libavresample.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libavutil.a b/TMessagesProj/jni/ffmpeg/x86_64/libavutil.a index 130af1e6a0f..d982f106773 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86_64/libavutil.a and b/TMessagesProj/jni/ffmpeg/x86_64/libavutil.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libswresample.a b/TMessagesProj/jni/ffmpeg/x86_64/libswresample.a index ce72751442e..230a286976b 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86_64/libswresample.a and b/TMessagesProj/jni/ffmpeg/x86_64/libswresample.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libswscale.a b/TMessagesProj/jni/ffmpeg/x86_64/libswscale.a index afb1f7ffa79..3187be8df62 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86_64/libswscale.a and b/TMessagesProj/jni/ffmpeg/x86_64/libswscale.a differ diff --git a/TMessagesProj/jni/ffmpeg/x86_64/libvpx.a b/TMessagesProj/jni/ffmpeg/x86_64/libvpx.a index 21e46183de0..bd0383e8060 100644 Binary files a/TMessagesProj/jni/ffmpeg/x86_64/libvpx.a and b/TMessagesProj/jni/ffmpeg/x86_64/libvpx.a differ 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" + > + + + + + + + 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 320ce49b2d0..856f2f71e59 100644 Binary files a/TMessagesProj/src/main/assets/fonts/num.otf and b/TMessagesProj/src/main/assets/fonts/num.otf differ 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 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 charactersMap; @@ -5407,11 +5450,25 @@ public static List 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 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 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 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 { - 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 listener = resultListeners.remove(productId); - if (listener != null) { - listener.accept(billing); - } + for (String productId : purchase.getProducts()) { + Consumer 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 payload, Utilities.Callback> 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 options = StarsController.getInstance(currentAccount).getOptionsCached(); - if (options == null) { - ConnectionsManager.getInstance(currentAccount).sendRequest(new TLRPC.TL_payments_getStarsTopupOptions(), (res, err) -> AndroidUtilities.runOnUIThread(() -> { - ArrayList 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(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(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(); + result = new ArrayList(); 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 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 hints = new ArrayList<>(); public ArrayList inlineBots = new ArrayList<>(); + public ArrayList webapps = new ArrayList<>(); boolean loaded; boolean loading; @@ -5030,6 +5034,7 @@ public void loadHints(boolean cache) { getMessagesStorage().getStorageQueue().postRunnable(() -> { ArrayList hintsNew = new ArrayList<>(); ArrayList inlineBotsNew = new ArrayList<>(); + ArrayList webappsNew = new ArrayList<>(); ArrayList users = new ArrayList<>(); ArrayList 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 messages) { } } - public void loadReplyMessagesForMessages(ArrayList messages, long dialogId, int mode, long threadMessageId, Runnable callback, int classGuid) { + public void loadReplyMessagesForMessages(ArrayList 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 replyMessages = new ArrayList<>(); LongSparseArray> replyMessageRandomOwners = new LongSparseArray<>(); for (int a = 0; a < messages.size(); a++) { @@ -5971,8 +6047,11 @@ public void loadReplyMessagesForMessages(ArrayList 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 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 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 messages, long LongSparseArray>> replyMessageOwners = new LongSparseArray<>(); LongSparseArray> dialogReplyMessagesIds = new LongSparseArray<>(); LongSparseArray> 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 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 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 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 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 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 messages, long } } } + Timer.done(t3); if (replyMessageOwners.isEmpty() && messagesWithUnknownStories == null) { if (callback != null) { callback.run(); @@ -6180,8 +6272,10 @@ public void loadReplyMessagesForMessages(ArrayList messages, long LongSparseArray> 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 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 messages, long } return; } + + Timer.Task t5 = Timer.start(logLogger, "loadReplyMessagesForMessages: getting reply messages"); + ArrayList result = new ArrayList<>(); ArrayList users = new ArrayList<>(); ArrayList chats = new ArrayList<>(); @@ -6257,13 +6355,16 @@ public void loadReplyMessagesForMessages(ArrayList 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 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 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 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 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 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 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 botInfos = new HashMap<>(); + private HashMap botInfos = new HashMap<>(); private LongSparseArray> botDialogKeyboards = new LongSparseArray<>(); private HashMap botKeyboards = new HashMap<>(); private LongSparseArray 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 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 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 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 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 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= 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 chats = new ConcurrentHashMap<>(100, 1.0f, 2); - private ConcurrentHashMap encryptedChats = new ConcurrentHashMap<>(10, 1.0f, 2); - private ConcurrentHashMap users = new ConcurrentHashMap<>(100, 1.0f, 3); - private ConcurrentHashMap objectsByUsernames = new ConcurrentHashMap<>(100, 1.0f, 2); + private final ConcurrentHashMap chats = new ConcurrentHashMap<>(100, 1.0f, 2); + private final ConcurrentHashMap encryptedChats = new ConcurrentHashMap<>(10, 1.0f, 2); + private final ConcurrentHashMap users = new ConcurrentHashMap<>(100, 1.0f, 3); + private final ConcurrentHashMap objectsByUsernames = new ConcurrentHashMap<>(100, 1.0f, 2); public static int stableIdPointer = 100; - private HashMap activeVoiceChatsMap = new HashMap<>(); + private final HashMap activeVoiceChatsMap = new HashMap<>(); - private ArrayList joiningToChannels = new ArrayList<>(); + private final ArrayList joiningToChannels = new ArrayList<>(); - private LongSparseArray exportedChats = new LongSparseArray<>(); + private final LongSparseArray exportedChats = new LongSparseArray<>(); public ArrayList hintDialogs = new ArrayList<>(); public SparseArray> dialogsByFolder = new SparseArray<>(); @@ -543,6 +558,7 @@ protected boolean useCache(Integer arguments) { public int boostsChannelLevelMax; public int channelRestrictSponsoredLevelMin; public Set webAppAllowedProtocols; + public Set 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 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 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 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 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 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 updates, ArrayList updates, ArrayList updates, ArrayList updates, 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 usersDict = new LongSparseArray<>(); - final LongSparseArray 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 reasons) { + public String getRestrictionReason(ArrayList 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 return null; } + public boolean isSensitive(ArrayList 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 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 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 reactions, int reactionsCount, Utilities.Callback onError, Runnable onSuccess) { + public void setCustomChatReactions(long chatId, int type, List reactions, int reactionsCount, Boolean allow_paid, Utilities.Callback 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 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 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> contentSettingsCallbacks; + private long contentSettingsLoadedTime; + private TL_account.contentSettings contentSettings; + + public TL_account.contentSettings getContentSettings() { + return contentSettings; + } + + public void getContentSettings(Utilities.Callback 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 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 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 usersToLoad, ArrayList 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 visibleReactions, ReactionsLayoutInBubble.VisibleReaction addedReaction, boolean big, boolean addToRecent, BaseFragment parentFragment, Runnable callback) { + public void sendReaction( + MessageObject messageObject, + ArrayList 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 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 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 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 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 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 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(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 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 currencyExpMap) { if (!currencyExpMap.isEmpty()) { @@ -55,21 +58,146 @@ public static Pair 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 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 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 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 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 bot_info = new ArrayList<>(); + public ArrayList 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 restriction_reason = new ArrayList<>(); + public ArrayList 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 results = new ArrayList<>(); public ArrayList recent_reactions = new ArrayList<>(); + public ArrayList 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 restriction_reason = new ArrayList<>(); + public ArrayList 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 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 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 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 restriction_reason = new ArrayList<>(); + public ArrayList 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 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 subscriptions = new ArrayList<>(); + public String subscriptions_next_offset; + public long subscriptions_missing_balance; public ArrayList history = new ArrayList<>(); public String next_offset; public ArrayList 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 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 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 media = new ArrayList<>(); + public ArrayList 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 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 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 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 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 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 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 storyViewerStack; // public ArrayList 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 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 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 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 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 getTabs() { + return getTabs(this.currentAccount); + } + + public ArrayList getTabDrawables() { + return getTabDrawables(this.currentAccount); + } + + public ArrayList getTabs(int currentAccount) { ArrayList tabs = this.tabs.get(currentAccount); if (tabs == null) this.tabs.put(currentAccount, tabs = new ArrayList<>()); return tabs; } - public ArrayList getTabDrawables() { + public ArrayList getTabDrawables(int currentAccount) { ArrayList 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 tabs = getTabs(); final ArrayList 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 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 callback) { if (tab == null) { callback.run(true); @@ -341,14 +452,14 @@ public void removeTab(WebTabData tab, Utilities.Callback 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 callback) { } public boolean removeTab(WebTabData tab, boolean destroy) { - final ArrayList tabs = getTabs(); - final ArrayList tabDrawables = getTabDrawables(); + return removeTab(currentAccount, tab, destroy); + } + + public boolean removeTab(int currentAccount, WebTabData tab, boolean destroy) { + final ArrayList tabs = getTabs(currentAccount); + final ArrayList 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 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 botInfo; + private LongSparseArray 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 info) { + public void setBotInfo(LongSparseArray info) { botInfo = info; } @@ -1417,7 +1418,7 @@ public void run() { ArrayList 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 pagesStack = new ArrayList<>(); + public final ArrayList 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 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 entry : adapter[i].anchorsOffset.entrySet()) { + for (int i = 0; i < pages.length; i++) { + for (HashMap.Entry 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 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 photoCaptionTextPaints = new SparseArray<>(); - private static SparseArray photoCreditTextPaints = new SparseArray<>(); - private static SparseArray titleTextPaints = new SparseArray<>(); - private static SparseArray kickerTextPaints = new SparseArray<>(); - private static SparseArray headerTextPaints = new SparseArray<>(); - private static SparseArray subtitleTextPaints = new SparseArray<>(); - private static SparseArray subheaderTextPaints = new SparseArray<>(); - private static SparseArray authorTextPaints = new SparseArray<>(); - private static SparseArray footerTextPaints = new SparseArray<>(); - private static SparseArray paragraphTextPaints = new SparseArray<>(); - private static SparseArray listTextPaints = new SparseArray<>(); - private static SparseArray preformattedTextPaints = new SparseArray<>(); - private static SparseArray quoteTextPaints = new SparseArray<>(); - private static SparseArray embedPostTextPaints = new SparseArray<>(); - private static SparseArray embedPostCaptionTextPaints = new SparseArray<>(); - private static SparseArray mediaCaptionTextPaints = new SparseArray<>(); - private static SparseArray mediaCreditTextPaints = new SparseArray<>(); - private static SparseArray relatedArticleTextPaints = new SparseArray<>(); - private static SparseArray detailsTextPaints = new SparseArray<>(); - private static SparseArray tableTextPaints = new SparseArray<>(); + private static final SparseArray photoCaptionTextPaints = new SparseArray<>(); + private static final SparseArray photoCreditTextPaints = new SparseArray<>(); + private static final SparseArray titleTextPaints = new SparseArray<>(); + private static final SparseArray kickerTextPaints = new SparseArray<>(); + private static final SparseArray headerTextPaints = new SparseArray<>(); + private static final SparseArray subtitleTextPaints = new SparseArray<>(); + private static final SparseArray subheaderTextPaints = new SparseArray<>(); + private static final SparseArray authorTextPaints = new SparseArray<>(); + private static final SparseArray footerTextPaints = new SparseArray<>(); + private static final SparseArray paragraphTextPaints = new SparseArray<>(); + private static final SparseArray listTextPaints = new SparseArray<>(); + private static final SparseArray preformattedTextPaints = new SparseArray<>(); + private static final SparseArray quoteTextPaints = new SparseArray<>(); + private static final SparseArray embedPostTextPaints = new SparseArray<>(); + private static final SparseArray embedPostCaptionTextPaints = new SparseArray<>(); + private static final SparseArray mediaCaptionTextPaints = new SparseArray<>(); + private static final SparseArray mediaCreditTextPaints = new SparseArray<>(); + private static final SparseArray relatedArticleTextPaints = new SparseArray<>(); + private static final SparseArray detailsTextPaints = new SparseArray<>(); + private static final SparseArray 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 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 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 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 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 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 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 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 copy = new HashMap<>(adapter[0].textToBlocks); - ArrayList array = new ArrayList<>(adapter[0].textBlocks); - searchRunnable = null; - Utilities.searchQueue.postRunnable(() -> { - ArrayList 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 copy = new HashMap<>(pages[0].adapter.textToBlocks); + ArrayList array = new ArrayList<>(pages[0].adapter.textBlocks); + searchRunnable = null; + Utilities.searchQueue.postRunnable(() -> { + ArrayList 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 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 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 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 args = new HashMap<>(); - args.put("Referer", ApplicationLoader.applicationContext.getPackageName()); - webView.loadUrl(currentBlock.url, args); + if (webView != null) { + webView.setVisibility(VISIBLE); + HashMap 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 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 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 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 } } - 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 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 2e6223e7cea..05ae8410824 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 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 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) { @@ -24272,7 +24523,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 options = new ArrayList<>(); final ArrayList 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 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 botInfo = new LongSparseArray<>(); + private LongSparseArray 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 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 messages = (ArrayList) 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 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 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 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 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 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 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 IN_OUT_OFFSET_Y = new FloatPropertyCompat("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 users, CharSequence return createUsersBulletin(users, text, null, null); } + public Bulletin createUsersBulletin(List users, CharSequence text, CharSequence subtitle) { + return createUsersBulletin(users, text, subtitle, null); + } + public Bulletin createUsersBulletin(List 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 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 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 lastBotInfo; + private LongSparseArray lastBotInfo; - public void setBotInfo(LongSparseArray botInfo) { + public void setBotInfo(LongSparseArray botInfo) { setBotInfo(botInfo, true); } - public void setBotInfo(LongSparseArray botInfo, boolean animate) { + public void setBotInfo(LongSparseArray 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 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 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 items = new ArrayList<>(); ArrayList phones = new ArrayList<>(); ArrayList other = new ArrayList<>(); - ArrayList vcard = null; + ArrayList 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 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 popularBots = new ArrayList<>(); + + public final ArrayList searchMine = new ArrayList<>(); + public final ArrayList searchGlobal = new ArrayList<>(); + public final ArrayList 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 items, UniversalAdapter adapter) { + HashSet uids = new HashSet<>(); + + if (!TextUtils.isEmpty(query)) { + ArrayList 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 top_peers = MediaDataController.getInstance(currentAccount).webapps; + ArrayList 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 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 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 joinedUsers = new ArrayList<>(); + ArrayList expiredUsers = new ArrayList<>(); ArrayList 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 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 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 importersList = loadRequestedUsers ? requestedUsers : joinedUsers; + final List 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 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= 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 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 result = null; ArrayList items = new ArrayList<>(); - ArrayList vcard = null; + ArrayList 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 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 options = BoostRepository.filterGiftOptions(paymentOptions, selectedUsers.size()); - options = BoostRepository.filterGiftOptionsByBilling(options); - PremiumPreviewGiftToUsersBottomSheet.show(selectedUsers, options); + if (type == TYPE_STARS) { + + } else { + List 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 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 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 selectedEmojisIds = new ArrayList<>(); private final HashMap initialSelectedEmojis = new LinkedHashMap<>(); private final List 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 grabReactions(boolean onlyCustom) { List reactions = new ArrayList<>(); List 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 { @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 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 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 removeTabs() { SparseArray 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 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 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 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 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 excludeDrawViews = new HashSet<>(); - final ArrayList drawingViews = new ArrayList<>(); - final ArrayList drawingViews2 = new ArrayList<>(); - final ArrayList 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 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 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 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 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 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 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 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 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 pinnedIds = new ArrayList<>(storiesList.pinnedIds); + ArrayList 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 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 excludeDrawViews = new HashSet<>(); + final ArrayList drawingViews = new ArrayList<>(); + final ArrayList drawingViews2 = new ArrayList<>(); + final ArrayList 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 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 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, 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 preTabClick; + public void setPreTabClick(Utilities.Callback2Return 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 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 b22b77ae226..bb925b340df 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 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 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 webviewShareAPIDoneListener; + public void whenWebviewShareAPIDone(Utilities.Callback 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); @@ -6281,8 +6453,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) { @@ -6532,8 +6710,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; @@ -7611,14 +7792,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; } @@ -8277,4 +8458,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 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 items = new ArrayList<>(); - ArrayList icons = new ArrayList<>(); - final ArrayList 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 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 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 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 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 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 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 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 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 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 lastLoadedStats = new HashMap<>(); private final HashMap stats = new HashMap<>(); - public long getBalance(long bot_id) { - TLRPC.TL_payments_starsRevenueStats botStats = getRevenueStats(bot_id); + private final HashMap lastLoadedChannelStats = new HashMap<>(); + private final HashMap 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 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 getTransactions(long bot_id, int type) { - TransactionsState state = getTransactionsState(bot_id); + public ArrayList 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 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 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 options; public ArrayList getOptionsCached() { @@ -176,16 +196,15 @@ public ArrayList 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 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 getOptions() { return options; } + private boolean giftOptionsLoading, giftOptionsLoaded; + private ArrayList giftOptions; + public ArrayList getGiftOptionsCached() { + return giftOptions; + } + public ArrayList 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 loadedOptions = new ArrayList<>(); + ArrayList 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 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 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 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 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 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 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 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 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 items, UniversalAdapter adapter) { if (getContext() == null) { @@ -463,7 +505,7 @@ public void fillItems(ArrayList 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 options = c.getOptions(); @@ -471,7 +513,7 @@ public void fillItems(ArrayList 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 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 cachedPlatformDrawables; - public static Drawable getPlatformDrawable(String platform) { + public static HashMap 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 { + @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> 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 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 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 items, UniversalAdapter adapter) { + items.add(UItem.asCustom(headerView)); + items.add(UItem.asHeader(getString(R.string.TelegramStarsChoose))); + int stars = 1; + ArrayList 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 reactors; + + public StarsReactionsSheet( + Context context, + int currentAccount, + long dialogId, + ChatActivity chatActivity, + MessageObject messageObject, + ArrayList 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 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 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 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 senders = new ArrayList<>(); + public final ArrayList 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 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 clickListener; + public void setOnSenderClickListener(Utilities.Callback 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 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 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 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 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 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> messagesWithUnknownStories, Runnable callback, int classGuid) { - storiesStorage.fillMessagesWithStories(messagesWithUnknownStories, callback, classGuid); + public void fillMessagesWithStories(LongSparseArray> messagesWithUnknownStories, Runnable callback, int classGuid, Timer timer) { + storiesStorage.fillMessagesWithStories(messagesWithUnknownStories, callback, classGuid, timer); } LongSparseArray 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[] storiesLists = new HashMap[3]; + private final HashMap[] 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 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 lang_codes = new ArrayList<>(); + private final ArrayList> fakeDays = new ArrayList<>(); + private int lastId = 0; + + @Override + public boolean load(boolean force, int count, List 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 medias = new ArrayList<>(); + if (res instanceof TLRPC.Vector) { + ArrayList 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 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 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> 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 ids, boolean apply) { + final ArrayList newOrder = new ArrayList<>(); + final ArrayList 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 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> fakeDays = new ArrayList<>(); + private final ArrayList> 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 arrayList, boolean showPhotos, boolean showVideos) { + public void fill(ArrayList 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 toLoad; + protected Utilities.CallbackReturn toLoad; private StoriesList(int currentAccount, long dialogId, int type, Utilities.Callback 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 storyIds) { } //storage queue - public void fillMessagesWithStories(LongSparseArray> messagesWithUnknownStories, Runnable runnable, int classGuid) { - fillMessagesWithStories(messagesWithUnknownStories, runnable, classGuid, true); + public void fillMessagesWithStories(LongSparseArray> messagesWithUnknownStories, Runnable runnable, int classGuid, Timer timer) { + fillMessagesWithStories(messagesWithUnknownStories, runnable, classGuid, true, timer); } - public void fillMessagesWithStories(LongSparseArray> messagesWithUnknownStories, Runnable runnable, int classGuid, boolean updateDatabase) { + public void fillMessagesWithStories(LongSparseArray> messagesWithUnknownStories, Runnable runnable, int classGuid, boolean updateDatabase, Timer timer) { if (runnable == null) { return; } @@ -568,6 +569,7 @@ public void fillMessagesWithStories(LongSparseArray> me return; } ArrayList 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 messageObjects = messagesWithUnknownStories.valueAt(i); @@ -588,6 +590,7 @@ public void fillMessagesWithStories(LongSparseArray> me } } } + Timer.done(t1); if (updateDatabase) { updateMessagesWithStories(updatedMessages); @@ -603,7 +606,9 @@ public void fillMessagesWithStories(LongSparseArray> 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> 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 peerIds, int currentAccount, int position } public void setDays(long dialogId, ArrayList> 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> days, int curre updateDelegate = true; } + private static boolean eqA(ArrayList> a, ArrayList> 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 a, ArrayList 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 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 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> attachedContainers; + private static LongSparseArray> cachedLists; + private final StoriesController.BotPreviewsList mainList; + private final ArrayList langLists = new ArrayList<>(); + private final ArrayList 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 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 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 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 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 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 langs = new ArrayList<>(mainList.lang_codes); + for (String l : localLangs) { + if (!langs.contains(l)) { + langs.add(l); + } + } + ArrayList 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 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 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 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 selectedPhotos = chatAttachAlert.getPhotoLayout().getSelectedPhotos(); + ArrayList 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 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 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 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 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 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 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 items, UniversalAdapter adapter) { + ArrayList 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 { + @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 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> 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> 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 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 listener) { + this(rootView, false, listener); + } + + public KeyboardNotifier(@NonNull View rootView, boolean getRootView, Utilities.Callback 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 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 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 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 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 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 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 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 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 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 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> 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 shareUserIds; public boolean silent; @@ -202,7 +211,7 @@ public boolean wouldBeVideo(ArrayList 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 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 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 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 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 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 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 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 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 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 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+"¤t_weather=true" +// ); +// +// return () -> task.cancel(true); +// } + + public static Runnable fetch(double lat, double lng, Utilities.Callback 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 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 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 callback = latestPermissionCallback; + latestPermissionCallback = null; + callback.run(granted); + } + } + + @SuppressLint("MissingPermission") + public static void getUserLocation(boolean withProgress, Utilities.Callback whenGot) { + if (whenGot == null) return; + + ensureLocationPermission(granted -> { + if (!granted) { + whenGot.run(null); + return; + } + + LocationManager lm = (LocationManager) ApplicationLoader.applicationContext.getSystemService(Context.LOCATION_SERVICE); + List 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[] 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 dialogRef = new AtomicReference<>(); + + LinearLayout linearLayout = new LinearLayout(context); + linearLayout.setOrientation(LinearLayout.VERTICAL); + + ArrayList 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 consumer, TLRPC.User withSendMessage) { + public static void show(Context context, Consumer 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 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 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 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 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 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 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 thisCallback = callback; + Utilities.Callback2 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 thisCallback = callback; + Utilities.Callback2 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 callback; + private Utilities.Callback2 callback; private void prompt( String text, boolean decrypt, String token, - Utilities.Callback whenDone + Utilities.Callback2 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 botIds = new ArrayList<>(); - final ArrayList botDisabled = new ArrayList<>(); final Map values = prefs.getAll(); for (Map.Entry 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 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 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 botInfo) { + public void setBotInfo(LongSparseArray 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 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 ACTION_BAR_TRANSITION_PROGRESS_VALUE = new SimpleFloatPropertyCompat("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 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 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 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 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 items, UniversalAdapter adapter) { + if (!hideCurrent && suggestions.isEmpty()) { + items.add(UItem.asCustom(currentContainer)); + } + + final ArrayList 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 onQueryClick; + private Utilities.Callback onQueryInsertClick; + private Utilities.Callback onURLClick; + + public void setCurrent( + Bitmap favicon, + String title, + String url, + Runnable onCurrentClick, + Utilities.Callback onQueryClick, + Utilities.Callback onQueryInsertClick, + Utilities.Callback 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 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 { +// @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 { + @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 { + @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 getRecentSearches(Context context) { + final SharedPreferences pref = context.getSharedPreferences("webhistory", Activity.MODE_PRIVATE); + final ArrayList queries = new ArrayList<>(); + final String json = pref.getString("queries_json", null); + if (json != null) { + try { + final ArrayList 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 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 links = new ArrayList(); + + 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 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 msgs = (ArrayList) 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 cachedLists; + public AddressBarList.BookmarksList list = new AddressBarList.BookmarksList(currentAccount, this::updateWithOffset); + public AddressBarList.BookmarksList searchList; + + private final Runnable closeToTabs; + private final Utilities.Callback whenClicked; + + private ActionBarMenuItem searchItem; + private ActionBarMenuItem gotoItem; + private String query; + + private NumberTextView selectedCount; + public HashSet 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 selectedLinks = new HashSet<>(); + final ArrayList messageObjects = new ArrayList(); + final HashSet 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 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 addedUrls = new HashSet<>(); + private int lastId; + + @Override + protected void fillItems(ArrayList 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 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 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 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 e: request.getRequestHeaders().entrySet()) { + connection.setRequestProperty(e.getKey(), e.getValue()); + } + } + connection.connect(); + HashMap headers = new HashMap<>(); + for (Map.Entry> 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 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 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 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 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 history; + private static LongSparseArray historyById; + private static ArrayList>> 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 history = new ArrayList<>(); + final LongSparseArray 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> callback : callbacks) { + callback.run(history); + } + callbacks = null; + } + }); + }); + } + + public static ArrayList getHistory() { + return getHistory(null); + } + + public static ArrayList getHistory(Utilities.Callback> 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 whenClicked; + + private ArrayList history = BrowserHistory.getHistory(loadedHistory -> { + history = loadedHistory; + if (listView.isAttachedToWindow()) { + listView.adapter.update(true); + } + }); + private final ArrayList searchResults = new ArrayList<>(); + private boolean searchLoading; + + private String query; + + private NumberTextView selectedCount; + public HashSet 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 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 history = new ArrayList<>(HistoryFragment.this.history); + final String query = HistoryFragment.this.query; + Utilities.searchQueue.postRunnable(() -> { + final ArrayList 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 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 { + + private Utilities.Callback callback; + private Exception exception; + + public HttpGetFileTask(Utilities.Callback 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 { + + private final HashMap headers = new HashMap<>(); + private final Utilities.Callback callback; + private Exception exception; + + public HttpGetTask(Utilities.Callback 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 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 { + + private final String dataMime; + private final String data; + private final Utilities.Callback callback; + private final HashMap headers = new HashMap<>(); + + private Exception exception; + + public HttpPostTask( + String mime, String data, + Utilities.Callback 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 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 openedDomains = new HashMap<>(); + public final HashSet restrictedDomainsSet = new HashSet<>(); + public final ArrayList> 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 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 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 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 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 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 extractSuggestions(String json) { + final ArrayList 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 searchEngines; + public static ArrayList 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 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 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 menuListener; + public void setMenuListener(Utilities.Callback 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 urlCallback; + public void showAddress(String currentUrl, Utilities.Callback 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 whenHistoryClicked; + public WebBrowserSettings(Utilities.Callback 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 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 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> allDomains = RestrictedDomainsList.getInstance().restrictedDomains; + for (ArrayList 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 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 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 dialogRef = new AtomicReference<>(); + + LinearLayout linearLayout = new LinearLayout(getContext()); + linearLayout.setOrientation(LinearLayout.VERTICAL); + + ArrayList 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 domains; + private boolean needDivider; + public void set( + CharSequence title, + ArrayList 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 { + @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) item.object2, item.object instanceof Bitmap ? ((Bitmap) item.object) : null, divider); + } + + public static UItem as(ArrayList 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 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 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 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 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 whenReceived; + public SitenameProxy(Utilities.Callback 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 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 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 00000000000..a4119d1db9a Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/large_income.png differ 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 00000000000..699954b16bc Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_arrowup.png differ 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 00000000000..51cb0e7cb6c Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_bookmark.png differ 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 00000000000..ef1394f5cbd Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_bookmarks.png differ 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 00000000000..0ed008b3faa Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_refresh.png differ 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 00000000000..7066fb356fe Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_browser_search.png differ 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 00000000000..e57e3fa6cdc Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_cache.png differ 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 00000000000..d6fc958e22a Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_cookies.png differ 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 00000000000..8aee059c290 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_history.png differ 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 00000000000..38be7b9b7ad Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_clear_recent.png differ 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 00000000000..dc88f3bae0b Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_cover_stories.png differ 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 00000000000..66dfa470460 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_delete_old.png differ 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 00000000000..9a7830f9185 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_premium_effects.png differ 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 00000000000..dd1fff2e09c Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_privacy_policy.png differ 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 00000000000..ac47c72e249 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/menu_stars_gift.png differ 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 00000000000..e94c34caad5 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/large_income.png differ 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 00000000000..d59fbee964c Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_arrowup.png differ 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 00000000000..c3c5cc552fe Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_bookmark.png differ 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 00000000000..c736d157607 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_bookmarks.png differ 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 00000000000..6dfdfb7b6b5 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_refresh.png differ 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 00000000000..9fc5a3e1326 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_browser_search.png differ 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 00000000000..a288790a9d7 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_cache.png differ 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 00000000000..eea1499b680 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_cookies.png differ 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 00000000000..30af26e26b6 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_history.png differ 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 00000000000..da26d1e52b4 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_clear_recent.png differ 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 00000000000..b0fc834547f Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_cover_stories.png differ 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 00000000000..2499f8ec06f Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_delete_old.png differ 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 00000000000..7fb66d1110d Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_premium_effects.png differ 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 00000000000..231a7a401b9 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_privacy_policy.png differ 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 00000000000..2d4a5a8571a Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/menu_stars_gift.png differ 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 00000000000..f30849ec265 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/large_income.png differ 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 00000000000..ad3b42ff0c3 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_arrowup.png differ 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 00000000000..fba8edcce22 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_bookmark.png differ 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 00000000000..9787545a465 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_bookmarks.png differ 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 00000000000..26d167380d1 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_refresh.png differ 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 00000000000..54b1c4c7911 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_browser_search.png differ 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 00000000000..86a04122bee Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_cache.png differ 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 00000000000..8835d629ae7 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_cookies.png differ 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 00000000000..d45a2b97a37 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_history.png differ 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 00000000000..f2861d95ace Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_clear_recent.png differ 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 00000000000..e10ccef5387 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_cover_stories.png differ 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 00000000000..f3c08dbbac3 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_delete_old.png differ 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 00000000000..ce83e1a0b10 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_premium_effects.png differ 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 00000000000..aef39cac6bd Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_privacy_policy.png differ 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 00000000000..8dea765a3ad Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/menu_stars_gift.png differ 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 00000000000..224c13cb0ef Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/large_income.png differ 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 00000000000..9f53699ca92 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_arrowup.png differ 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 00000000000..741d7412dd7 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_bookmark.png differ 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 00000000000..45fa1af1255 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_bookmarks.png differ 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 00000000000..838ae09742f Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_refresh.png differ 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 00000000000..cc9a96c6e1a Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_browser_search.png differ 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 00000000000..0d2fadc3e4d Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_cache.png differ 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 00000000000..9e82debbe7e Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_cookies.png differ 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 00000000000..9fd59feb6db Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_history.png differ 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 00000000000..148c63ac655 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_clear_recent.png differ 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 00000000000..02de4b41e99 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_cover_stories.png differ 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 00000000000..521275fb00f Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_delete_old.png differ 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 00000000000..a28b961d99c Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_premium_effects.png differ 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 00000000000..dcc084a7fbf Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_privacy_policy.png differ 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 00000000000..b4076029e3b Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/menu_stars_gift.png differ 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 @@ - - - - - - - - - - - - - - - - - - - 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 @@ - - 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 @@ + + + + + \ 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 tags: + * - + * - + * Please, use these 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: + * - — action bar, usually an accent color + * - — action bar, usually an accent color + * - — navigation bar + * - — navigation bar + * - `background-color` css style — fallback + * `media` attribute on 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 @@ + + 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 @@ Set Emoji Status Change Status Settings + Refresh + Search %s or type URL Contacts New Group yesterday @@ -547,6 +549,7 @@ Restricted users Administrators Channel Settings + Balance Delete Channel Delete channel Wait! Deleting this channel will remove all members and all messages will be lost. Delete the channel anyway? @@ -640,6 +643,7 @@ Members will be notified when you post Members will receive a silent notification Sign Messages + Show Authors\' Profiles Add names of the admins to the messages they post. Admin Rights Custom title @@ -756,6 +760,7 @@ Link Tap to add a permanent link Choose photo + Create a sticker from a photo Add Image Choose photo or video Set new photo @@ -959,6 +964,8 @@ un1 disabled group invites un1 enabled signatures un1 disabled signatures + un1 enabled authors\' profiles + un1 disabled authors\' profiles changed permissions for %1$s\n\nDuration: %2$s changed default permissions Send stickers & GIFs @@ -2574,8 +2581,6 @@ Link Previews Link previews will be generated on Telegram servers. We do not store data about the links you send. Secret chats - In-App Browser - Open external links within the app Direct Share Show recent chats in Android share menu Emoji @@ -2604,6 +2609,7 @@ Clear sent media cache Call settings Clear WebView cache + Clear WebView cookies Enable WebView debug Disable WebView debug Debug enabled! @@ -3372,9 +3378,6 @@ Clear search history? Are you sure you want to clear your search history? Do you want to remove this chat from your search history? - Do you want to remove these %1$d chats from your search history? - Do you want to remove these %1$d chats from your search history? - Do you want to remove these %1$d chats from your search history? Do you want to remove these %1$d chats from your search history? Clear search history Remove from search history @@ -3875,7 +3878,10 @@ You disabled the auto-delete timer un1 joined the group via invite link un1 joined the group via folder invite link + un1 joined the channel via invite link + un1 joined the channel via folder invite link un1 removed un2 + un1 refunded back %1$s un1 left the group un1 added un2 un1 removed the group photo @@ -4144,6 +4150,7 @@ **Telegram** needs camera access so that you can take photos and videos. Tap Settings -> Permissions, and turn **Camera** on. **Telegram** needs camera and microphone access so that you can send video messages. Tap Settings -> Permissions, and turn **Microphone** and **Camera** on. Telegram needs access to your location so that you can share it with your friends. + Telegram needs access to your location so that you can add your current weather widget to a story. Telegram needs access to your location. **Telegram** needs access to location so that you can share it with your friends. Tap Settings -> Permissions, and turn **Location** on. **Telegram** needs access to location so that you can find people nearby. Tap Settings -> Permissions, and turn **Location** on. @@ -4634,7 +4641,8 @@ %1$s is currently not broadcasting live stream data to Telegram. Manage Invite Links - You can create additional invite links that have a limited time or number of uses + You can create additional invite links that have a limited time or number of uses. + You can create additional invite links that have a limited time, number of uses or require a paid subscription. Anyone on Telegram will be able to join your group by following this link. Anyone on Telegram will be able to join your channel by following this link. Edit link @@ -4666,6 +4674,7 @@ Create a New Link Delete All Revoked Links No one joined + No one subscribed Limit reached Everyone on Telegram can scan this code to join your group. This will delete link. @@ -4704,25 +4713,13 @@ Leave %d communities Leave %d communities - Do you want remove these **%d documents** from Downloads? Do you want remove this document from Downloads? - Do you want remove these **%d documents** from Downloads? - Do you want remove these **%d documents** from Downloads? - Do you want remove these **%d documents** from Downloads? Do you want remove these **%d documents** from Downloads? - Remove %d documents Remove %d document - Remove %d documents - Remove %d documents - Remove %d documents Remove %d documents - 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. 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. - 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. - 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. - 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. 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. Messages for %1$s days deleted @@ -4732,24 +4729,12 @@ Messages for %1$s days deleted Messages for %1$s days deleted - Delete %1$s days Delete %1$s day - Delete %1$s days - Delete %1$s days - Delete %1$s days Delete %1$s days - un1 are speaking un1 is speaking - un1 are speaking - un1 are speaking - un1 are speaking un1 are speaking - Delete %1$d backgrounds Delete background - Delete %1$d backgrounds - Delete %1$d backgrounds - Delete %1$d backgrounds Delete %1$d backgrounds %1$d recipients %1$d recipient @@ -5786,6 +5771,7 @@ Create a New Theme Approve New Members Turn this on if you want users to join only after they are approved by an admin. + You can\'t enable admin approval for links that require a monthly fee. No join requests %1$s, %2$s %1$s, %2$s and %3$s @@ -6093,12 +6079,20 @@ Remove **%1$s** from suggestions? 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. 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. + Allow **%1$s** to access to your location?\n\n**%1$s** will be able to access your location when this website is open. + 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. 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. 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. + Allow **%1$s** to access to your microphone?\n\n**%1$s** will be able to access your microphone when this website is open. + 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. 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. 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. + Allow **%1$s** to access to your camera?\n\n**%1$s** will be able to access your camera when this website is open. + 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. 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. 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. + 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. + 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. Length must be under %s seconds. Size must be under %s Kb. File must be mp3 or ogg format. @@ -6346,7 +6340,7 @@ Members of the group can’t add any reactions to messages. Clear recent emoji Do you want to clear your recent reaction emoji from suggestions? - Subscribe to **Telegram Premium** to be able to comment on behalf of your channels in group chats. + Subscribe to **Telegram Premium** to be able to comment on behalf of your channels in any group chat. Open Set status until… Set Status @@ -6362,6 +6356,8 @@ Add any of thousands emojis next to your name to display current activity. Real-Time Translation Real-time translation of channels and chats into other languages. + Message Effects + Add over 500 animated effects to private messages. Wallpaper for Both Sides Set custom wallpapers for you and your chat partner. Name and Profile Colors @@ -6566,14 +6562,8 @@ Are you sure you want to delete cached data for selected chats? Are you sure you want to delete cached data for selected chat? to apply the self-destruct timer - will have the self-destruct timer - will have the self-destruct timer - will have the self-destruct timer - will have the self-destruct timer - will remove the self-destruct timer - will remove the self-destruct timer - will remove the self-destruct timer - will remove the self-destruct timer + will have the self-destruct timer + will remove the self-destruct timer Disable Auto-Delete Draw Sticker @@ -7079,7 +7069,8 @@ Wallpaper Set a new chat Wallpaper Set a same chat Wallpaper - You will connect to this bot\'s website to launch its web app. + By launching this mini app, you agree to the **Terms of Service for Mini Apps**. + https://telegram.org/tos/stars More about this bot Tap to view this theme in the day mode. Tap to view this theme in the night mode. @@ -7252,6 +7243,7 @@ Archive Stories Archive Stories Edit Story + Edit Preview Who can see Everyone Close Friends @@ -7389,6 +7381,7 @@ Archived Stories Saved Stories New Story + Story Cover Edit Repost Allow Screenshots @@ -8690,9 +8683,12 @@ Telegram shares %1$d%% of the revenue from ads displayed in your channel. **Learn more >** Available balance You can collect your reward using Fragment, a third-party platform used by advertisers to pay for ads. **Learn more >** - Funds from your total balance become available for spending on ads and rewards 21 days after they are earned. - https://telegram.org/tos/content-creator-rewards - TON from your total balance become available for spending on ads and rewards 21 days after they are earned. + Stars from your total balance become available for spending on ads and rewards 21 days after they are earned. + https://telegram.org/tos/stars/ + TON from your total balance become available for spending on ads and rewards 3 days after they are earned. + https://telegram.org/tos/content-creator-rewards + Stars and TON from your total balance become available for spending on ads and rewards 21 and 3 days respectively after they are earned. + https://telegram.org/tos/content-creator-rewards https://telegram.org/tos/content-creator-rewards https://telegram.org/tos/content-creator-rewards 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 >** @@ -8928,11 +8924,25 @@ Enter your PIN or use a fingerprint Enter your PIN Telegram Locked + Show 18+ Content + Do not hide media that contain content suitable only for adults + 18+ Content + Confirm that you are over 18 years old and update your settings to see potentially explicit and sensitive content. Confirm + 18+ Content + 18+ + 18+ Content + 18+ Content + This media may contain sensitive content suitable only for adults. Do you still want to view it? + This chat may contain sensitive content suitable only for adults. Do you still want to view it? + Always show 18+ media + View Anyway + You can update the visibility of sensitive media in **Chat Settings > Show 18+ Content** Your Stars Telegram Stars Buy Stars to unlock content and service\nin miniapps on Telegram. Choose package + Gift Stars to Friends %d Star %d Stars By proceeding and purchasing Stars, you agree with the **Terms and Conditions**. @@ -8942,6 +8952,8 @@ Incoming Outgoing In-App Purchase + Unknown User + https://fragment.com/stars Stars Top-Up Bot In-App Purchase Ads @@ -8962,6 +8974,11 @@ %d Star Needed %d Stars Needed Buy **Stars** and use them on **%s** and other miniapps. + Buy **Stars** and subscribe to **%s** and other channels. + Buy **Stars** to keep your subscription for **%s**. + Buy **Stars** to send paid reactions to **%s** and other channels. + Buy **Stars** to keep your channel subscriptions. + Buy **Stars** to keep your channel subscriptions. Move Caption Up Move Caption Down Add Fact Check @@ -9035,7 +9052,7 @@ To Front %d Story found %d Stories found - View stories with #%s + View stories with %s Limit Reached You can’t add more than %d links to a story. Next withdrawal will be available in **%s**. @@ -9050,6 +9067,7 @@ %d Star %d Stars Media + Post Paid Content Enter unlock cost Users will have to transfer this amount of Stars to your channel in order to view this media. **Learn more >** @@ -9074,5 +9092,249 @@ Do you want to unlock %2$s in **%3$s** for **%1$d stars**? Do you want to unlock %2$s and %3$s in **%4$s** for **%1$d star**? Do you want to unlock %2$s and %3$s in **%4$s** for **%1$d stars**? + Do you want to unlock %2$s from **%3$s** for **%1$d star**? + Do you want to unlock %2$s from **%3$s** for **%1$d stars**? + Do you want to unlock %2$s and %3$s from **%4$s** for **%1$d star**? + Do you want to unlock %2$s and %3$s from **%4$s** for **%1$d stars**? ⭐️ %s + Gift Stars + With Stars, **%s** will be able to unlock content and services on Telegram. + **See Examples >** + %d Star + %d Stars + With Stars, **%s** is able to unlock content and services on Telegram. + Use Stars to unlock content and services on Telegram. + View + Received Gift + Sent Gift + Stars Gift Sent! + **%1$d Star** sent as gift to %2$s. + **%1$d Stars** sent as gift to %2$s. + Webpage + Oops... + Failed to load page. + Failed to load **%s**. + Downloading... + Downloading %s... + Download file + Start downloading **%s**? + Start downloading **%1$s** (%2$s)? + Download + Recent searches + Bookmarks + Clear + Clear recent searches? + Do you want to clear your recent search queries? + Search Engine + Search and auto-complete in browser search bar + Open in Telegram + Open in... + Apps + Open App + By launching this mini app, you agree to the **Terms of Service for Mini Apps.** + https://telegram.org/tos/mini-apps + By publishing this mini app, you agree to the **Telegram Terms of Service for Developers.** + https://telegram.org/tos/mini-apps + Preview + No Preview + Upload up to %d screenshot and video demos for your mini app. + Upload up to %d screenshots and video demos for your mini app. + Add preview + no images yet + %d image + %d images + This preview will be displayed for all users except those for whom you provide a translated version. + This preview will be displayed for all users who have %s set as their language. + Create a Translation + Delete this Translation + Add a Translation + Add Preview + General + Add Translation + or + Reorder + Delete %s + Select + Unselect + Delete Preview + Are you sure you want to delete this preview? + Delete Previews + Are you sure you want to delete %d previews? + Are you sure you want to delete %d preview? + Are you sure you want to delete %d previews? + Are you sure you want to delete %d previews? + Are you sure you want to delete %d previews? + Are you sure you want to delete %d previews? + %d preview deleted + %d previews deleted + Add + Bots + Apps you use + Popular apps + Examples + %d user + %d users + Apps history + Do you want to remove %s from your apps usage history? + Bookmark + Link added to Bookmarks in **Saved Messages**. + Google + https://www.google.com/search?q= + https://suggestqueries.google.com/complete/search?client=chrome&q= + https://policies.google.com/privacy + DuckDuckGo + https://duckduckgo.com/?q= + https://duckduckgo.com/ac/?q= + https://duckduckgo.com/privacy + Bing + https://www.bing.com/search?q= + https://api.bing.com/osjson.aspx?query= + https://privacy.microsoft.com/en-us/privacystatement + Yahoo + https://search.yahoo.com/search?p= + https://sugg.search.yahoo.net/sg/?output=json&nresults=10&command= + https://legal.yahoo.com/us/en/yahoo/privacy/index.html + Brave Search + https://search.brave.com/search?q= + https://search.brave.com/api/suggest?q= + https://search.brave.com/help/privacy-policy + reserved + reserved + reserved + reserved + reserved + reserved + reserved + reserved + Web Browser + Enable In-App Browser + Open external links in + New Pages within Telegram + New Tabs in External Browser + You can choose to open external link without leaving Telegram. + Open links inside Telegram without starting an external browser. + Clear Cache + Clear Cookies + Are you sure you want to clear browser cache%s? + Are you sure you want to clear browser cookies%s?\n\nThis might log you out from website account sessions. + Delete all cookies and cache from the Telegram in-app browser and miniapps. + View History + Clear History + %d page + %d pages + Are you sure you want to clear browser history since %s? + Never open in the in-app browser + Add Website + Remove + Clear List + Telegram will always open links from these websites in the external browser. + Add Website + Enter a domain that you don’t want to be opened in the in-app browser. + Enter URL + In-App Browser + Open external links within the app + Search Engine + Search Engine is used in address bar to open search and auto-complete. + Open in Browser + Do you want to open this link in your default browser? + Always open links from **%s** in browser + Telegram will now open links from this website in the external browser. You can change this in **Settings.** + Edit Cover + Choose a frame from the story to show in your Profile. + Edit Cover + Save Cover + Bookmarks + History + No history yet + No search results + No bookmarks found + Go Forward + Privacy Policy + Require Monthly Fee + Stars Amount per month + Stars Amount per 5 minutes + ~%s/month + ~%s/5min + Charge a subscription fee from people joining your channel via this link. + https://telegram.org/tos/stars + If you need to change the subscription fee, create a new invite link with different price. + Subscription fee + ⭐️%1$d/month + you get approximately %1$s monthly + Subscribe to the Channel + Do you want to subscribe to **%2$s** for **%1$d Star** per month? + Do you want to subscribe to **%2$s** for **%1$d Stars** per month? + Do you want to subscribe to **%2$s** for **%1$d Star** per %3$s? + Do you want to subscribe to **%2$s** for **%1$d Stars** per %3$s? + Subscribe + By subscribing you agree to the **Terms of Service**. + https://telegram.org/tos/stars + Subscription successful! + %1$d Star transferred to **%2$s**. + %1$d Stars transferred to **%2$s**. + Monthly subscription fee + By sending Stars you agree to the **Terms of Service**. + https://telegram.org/tos/stars + renews on %s + expires on %s + expired on %s + cancelled + expired + Subscription + ⭐️%1$d/month + Subscription + Subscribed + Renews + Expires + Expired + You have cancelled your subscription. + Renew Subscription + Subscribe Again + Cancel Subscription + If you cancel now, you will still be able to access your subscription until %s. + Your subscription expired on %s. + Join Channel + You left channel, but you can still get back until %s. + ⭐️%1$d Stars needed for %2$s + Insufficient funds to cover your subscription. + Subscriber + appx. %1$s per month + Subscribed + Expired + Renews + per month + Stars sent! + You reacted with **%d** star. + You reacted with **%d** stars. + Undo + Star Reaction + Choose how many stars you want to send to **%s** to support this post. + You sent **%1$d** Star to support this post. + You sent **%1$d** Stars to support this post. + Top Senders + Show me in Top Senders + Anonymous + Send ⭐️%s + TOP + Star Reaction + Enable Paid Reactions + Switch this on to let your subscribers set paid reactions with Telegram Stars, which you will be able to withdraw later as TON. + https://telegram.org/tos/stars/ + Add names of admins to the messages they post. + Add names and photos of admins to the messages they post, linking to their profiles. + You can create additional invite links that have limited time, number of users or require a paid subscription. + You can create additional invite links that have limited time and number of users. + To + Monthly subscription fee + My subscriptions + Show More + You have enough stars at the moment. + Topup Anyway + https://telegram.org/privacy-tpa + %d expired subscription + %d expired subscriptions + Subscription cancelled + You will still have access to the channel until **%s**. + Subscription renewed + You renewed your subscription to **%s**. \ 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"> - + @@ -16,6 +19,10 @@ - + \ 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